[Xenomai] FreeRTOS skin #2
Matthias Schneider
ma30002000 at yahoo.de
Mon Jun 23 22:27:42 CEST 2014
----- Original Message -----
> From: Matthias Schneider <ma30002000 at yahoo.de>
> To: Philippe Gerum <rpm at xenomai.org>; "xenomai at xenomai.org" <xenomai at xenomai.org>
> Cc:
> Sent: Monday, June 23, 2014 12:31 PM
> Subject: Re: [Xenomai] FreeRTOS skin #2
>
> ----- Original Message -----
>> From: Philippe Gerum <rpm at xenomai.org>
>> To: Matthias Schneider <ma30002000 at yahoo.de>;
> "xenomai at xenomai.org" <xenomai at xenomai.org>
>> Cc:
>> Sent: Friday, June 20, 2014 9:55 AM
>> Subject: Re: [Xenomai] FreeRTOS skin #2
>>
>> On 06/02/2014 08:46 PM, Matthias Schneider wrote:
>>
>>
>>> Please find enclosed a new version of the FreeRTOS skin. It adapts to
> the
>>> latest changes in forge/next and also removes the previously included
>>> workarounds - thanks to the changes done based on the first review
> round
>>> they were no longer necessary.
>>>
>>
>> Thanks. Here we go:
>>
>> * vTaskStartScheduler()
>>
>> Dropping the task_list lock then yielding is superfluous, the caller
>> will wait on the condvar for the scheduler state to switch to SUSPENDING
>> anyway, implicitly releasing this lock before going to sleep.
>
> Done.
>
>>
>> * vTaskDelay()
>>
>> Cobalt wraps sched_yield(), so you likely want to call
>> __RT(sched_yield()) to pick the proper implementation depending on the
>> underlying real-time core.
> Done.
>
>> * __xTaskGenericCreate()
>>
>> - It looks like the mutex attribute initialized locally is a left over
>> from a previous implementation.
>>
>> - Drawing unique identifier labels should be done using a name
>> generator, e.g.
>>
>> static DEFINE_NAME_GENERATOR(task_namegen, struct freertos_task, name);
>> ...
>> generate_name(task->name, name, &task_namegen);
>> The open-coded method also used by other emulators is racy.
> Done.
> Note that some freertos specific code remains to make duplicated task names
> unique.
>
>> * vPortEnter/ExitCritical()
>>
>> - wouldn't these calls better emulated by threadobj_lock_sched()
>> assuming they stand for a global serialization mechanism?
> Unfortunately, this seems cause some test cases in the demo to fail.
> Since these tests are rather time consuming to investigate, I would like
> to leave this item open until all other issues have been addressed. We
> had also talked about other options concerning this subject as well
> (removing the function or leaving it empty), so I still need some
> time to think about it.
>> * Task registry support
>>
>> The code looks outdated, using fsobstacks is recommended. The registry
>> helpers in lib/alchemy/alarm.c illustrate a basic usage.
> Done.
>
>>
>> * vTaskSuspendAll()
>>
>> Running check_processors() there may switch the caller to linux mode
>> at each invocation, due to calling sysconf/sched_getaffinity indirectly.
>> I would rather assume that the CPU affinity is not allowed to change
>> once started, and determine whether a task is bound to more than a
>> single CPU in the trampoline code. Then vTaskSuspendAll() may do a
>> simple flag-based test for checking the consistency, still allowing
>> different freertos tasks to be pinned on distinct CPUs though. At any
>> rate, this would be an acceptable restriction, since freertos does not
>> seem to be SMP-capable in its reference implementation anyway.
> Ok, reading the affinity information once and caching it makes sense to
> avoid the switches to secondary mode. However, vTaskSuspendAll() /
> vTaskResumeAll() only works as expected when all tasks are pinned to a
> single cpu, storing this information on a by-task basis will not be sufficient.
> Now if there is one place to retrieve this information, which would it be?
> I can think of freertos_init() / freertos_scheduler_init() or
> vTaskStartScheduler(). However, freertos_init() would probably not be
> able to allow setting process cpu affinity programatically at the
> beginning of main() if I am not mistaken.
>> Next time, I'll start reviewing other parts of the emulator.
> Great, thanks in advance for all the input..
>
>> HTH,
>>
>> --
>> Philippe.
>>
Please find enclosed a revised patch.
Matthias
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Initial-Freertos-commit-no.-4.patch.gz
Type: application/x-gzip
Size: 34354 bytes
Desc: not available
URL: <http://www.xenomai.org/pipermail/xenomai/attachments/20140623/2a044048/attachment.bin>
More information about the Xenomai
mailing list