码迷,mamicode.com
首页 > 其他好文 > 详细

rtx任务间通信--信号量

时间:2015-01-15 17:36:15      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

void os_sem_init (
    OS_ID semaphore,        /* The semaphore object to initialize */
    U16   token_count );    /* Initial number of tokens */


参数semaphore的类型必须为OS_SEM, token_count为信号计数初始值,调用信号量相关函数之后,必须先
通过该函数初始化信号量.


OS_RESULT os_sem_send (
    OS_ID semaphore );    /* The semaphore whose token count is incremented */


返回值:
OS_R_OK 该返回只有一个返回值.


在任务中发送信号量,参数semaphore的类型必须为OS_SEM.
如果等待该信号量的任务(任务A)优先给比发送信号量的任务(任务B)优先级高,会切换到任务A去运行;如果
任务A比任务B优先级低,任务A状态修改成就绪状态,但是任务A还是继续运行,直到任务B时间片耗尽或任务A
为最高优先级的任务(RTX默认的高度方式)。如果没有任务等待该信号量,该函数会将信号计数值加1.


void isr_sem_send (
    OS_ID semaphore );    /* The semaphore whose token count is incremented */


在中断中发送信号量,参数semaphore的类型必须为OS_SEM.
如果等待信号量的任务(任务A)的优先级最高,退出中断后会切换到A去运行,否则将A运行状态置为就绪状态,
有机会就可以运行。如果没有任务等待该信号量,isr_sen_send简单的将信号计数加1.


OS_RESULT os_sem_wait (
    OS_ID semaphore,    /* The semaphore to get the token from */
    U16   timeout );    /* Length of time to wait for the token */


返回值:
OS_R_SEM The calling task has waited until a semaphore became available 任务挂起之后,在超时之前等待到了信号量
OS_R_TMO The timeout expired before the token became available.        等待信号量超时
OS_R_OK  A token was available and the function returned immediately.  信号量计数值>0,立即返回




获取信号量.如果信号量计数值不为0,该函数将信号量计数值减1,然后返回,调用该函数的任务继续运行。
如果信号计数值不为0,任务会挂起,切换到其他任务去运行,直到有其他任务或中断调用os_sem_send,isr_sem_send
函数发送信号量,该任务才会有机会运行。timeout为等待信号的超时返回时间,单位为系统tick,0和0xffff是两个特殊值.
0xffff为无限等待
为0时,如果信号量计数值为0,该函数立即返回OS_R_TMO,不会发生任务切换.

rtx任务间通信--信号量

标签:

原文地址:http://www.cnblogs.com/saibeidamo/p/4226456.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!