赞
踩
Cobalt / POSIX库中的所有服务,或属于基于Copperplate库的API的所有服务,都可能仅限于特定的调用上下文,或具有特定的副作用。
在双内核模式下,Cobalt API在所有其他面向应用程序的API的基础上,通过Cobalt实时核心提供POSIX实时服务。因此,以下信息适用于Xenomai可用的所有面向应用程序的API,例如Cobalt / POSIX库,Alchemy API,还适用于所有RTOS仿真器。为了描述此信息,此部分记录的每个服务在适用时带有一组标签。
下表将整个文档中使用的标记与其对调用者含义的描述进行了匹配。
注意
Xenomai线程是指Xenomai
API服务创建的任何线程,包括双内核模式下的实时Cobalt / POSIX线程。常规/普通POSIX线程是指由基于glibc的标准POSIX服务在Mercury或Cobalt上直接创建的任何线程(即NPTL / linuxthreads _STD(pthread_create())),但不包括已升级为实时的线程。之后将域(又称为“阴影”)移到Cobalt上。
Tag | Context on entry |
---|---|
xthread-only | Must be called from a Xenomai thread called【调用】 |
xhandler-only | Must be called from a Xenomai handler. See note. |
xcontext | May be called from any Xenomai context (thread or handler). |
pthread-only | Must be called from a regular POSIX thread |
thread-unrestricted | May be called from a Xenomai or regular POSIX thread indifferently |
xthread-nowait | May be called from a Xenomai thread unrestricted, or from a regular thread as a non-blocking service only. See note. |
unrestricted | May be called from any context previously described |
Note:
Xenomai处理程序用于来自基于Copperplate的API的基于回调的通知,例如超时。此上下文未映射到常规Linux信号处理程序,实际上是由特殊的线程上下文提供的,因此,当代表此类处理程序运行时,API实现可能在内部调用异步不安全的POSIX服务。因此,从异步常规信号处理程序调用Xenomai API服务从根本上讲是不安全的。
在Cobalt上,主线程是一种特殊情况,它从常规POSIX线程开始,然后在调用main()例程之前,作为初始化过程的一部分自动切换到Cobalt线程,除非禁用了自动引导程序(请参见http://xenomai.org/2015/05/application-setup-and-init/#Application_entry_CC)。
通过Cobalt核心运行应用程序时可能产生的副作用(即双内核配置)
Tag | Description |
---|---|
switch-primary | the caller may switch to primary mode |
switch-secondary | the caller may switch to secondary mode |
Global COMPAT__rt_alarm_create (RT_ALARM
*alarm, const char *name)
Global COMPAT__rt_event_clear (RT_EVENT
*event, unsigned long mask, unsigned long *mask_r)
Global COMPAT__rt_event_create (RT_EVENT
*event, const char *name, unsigned long ivalue, int mode)
Global COMPAT__rt_event_signal (RT_EVENT
*event, unsigned long mask)
Global COMPAT__rt_task_create (RT_TASK
*task, const char *name, int stksize, int prio, int mode)
Global COMPAT__rt_task_set_periodic (RT_TASK
*task, RTIME idate, RTIME period)
Global rt_alarm_wait (RT_ALARM *alarm)
Global RTDM_EXECUTE_ATOMICALLY (code_block)
Global rtdm_task_sleep_until (nanosecs_abs_t
wakeup_time)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。