Overview
|
========
|
|
This directory contains a VxWorks(*) emulation interface on top of the
|
Xenomai framework.
|
|
Known variations from VxWorks/WIND
|
==================================
|
|
You may observe some variations from VxWorks. If you find such a
|
variation and you think it would be easy to correct, please mail to
|
the Xenomai mailing list at <xenomai@xenomai.org>. Here are the known
|
variations:
|
|
- VxWorks task priorities are restricted to [97..0] in the current
|
implementation of the emulator.
|
|
- taskInit() does not allow to create unnamed tasks, but assigns an
|
auto-generated name like taskSpawn() whenever a NULL or empty name
|
string is given.
|
|
- taskUnlock() may induce a round-robin effect within the priority
|
level of the task releasing the scheduler lock.
|
|
- semDelete() does not flush a mutex semaphore. May return
|
S_semLib_INVALID_OPERATION if busy upon deletion.
|
|
- semMCreate() does not support FIFO queuing mode, but only PRIO.
|
|
- semTake() will complain about the owner of a mutex-type semaphore
|
exiting without releasing the lock while the current task pends on
|
it. S_objLib_OBJ_UNAVAILABLE is then returned to the caller, and the
|
semaphore is left in an inconsistent state.
|
|
- kernelInit() has a different signature than the original WIND kernel
|
call, i.e.:
|
STATUS kernelInit(FUNCPTR rootRtn, int argc, char *const argv[]).
|
|
The first argument is a pointer to an optional root task entry
|
point, which the emulator will name "rootTask", and start with
|
priority 50. Since kernelInit() is usually called on behalf of a non
|
real-time thread within the application's main() routine, the root
|
task will preempt the caller immediately. If NULL is passed, no root
|
task will be started by kernelInit().
|
|
The second and third arguments should be the argument count and
|
vector, as passed to the application's main() routine on the
|
command line. Passing 0/NULL is valid, meaning that no command line
|
argument may be used to override the default emulator settings.
|
|
- memPartCreate() may return S_memLib_NOT_ENOUGH_MEMORY in case a
|
memory shortage happens while allocating the internal partition
|
descriptor. I.e. this descriptor is not laid into the user-provided
|
memory.
|
|
- memPartAddToPool() may return S_objLib_OBJ_ID_ERROR when called with
|
an invalid partition identifier.
|
|
- The following calls may return S_objLib_OBJ_NO_METHOD when called
|
from a non-VxWorks task context:
|
|
taskDelay, taskLock, taskUnlock, taskSafe, taskUnsafe, and taskIdSelf.
|
|
|
(*) VxWorks is a registered trademark of Wind River Systems, Inc
|
(http://www.windriver.com).
|