UCOSii-信号量
来源:互联网 发布:淘宝卖家快递推荐 编辑:程序博客网 时间:2024/05/22 18:22
信号量:二值信号量,计数信号量,互斥信号量
与信号量相关的几个函数:
1)创建信号量
OS_EVENT *OSCreateSem(INT16U cnt);
返回值为已创建好的信号量指针,参数cnt是信号量计数器的初始值,该初始值一般情况下为0
2)请求信号量
void OSSemPend(OS_EVENT *pevent,INT16U timeout,INT8U *err);
pevent是被请求信号量的指针,timeout为等待时限,为0的话就是无限等待,err为错误信息
3)发送信号量函数
INT8U OSSemPost(OS_EVENT *pevent);
pevent为信号量指针,该函数成功调用后,返回值为OS_ON_ERR
4)删除信号量函数
OS_EVENT *OSSemDel(OS_EVENT *pevent,INT16U timeout,INT8U *err);
pevent是被请求信号量的指针,timeout为等待时限,为0的话就是无限等待,err为错误信息
//´´½¨¿ªÊ¼ÈÎÎñ,ÔÚ¿ªÊ¼ÈÎÎñÀïÃæ´´½¨ÁËÁ½¸öÈÎÎñ
void startTask(void *p_arg)
{
OS_CPU_SR cpu_sr=0;
p_arg = p_arg;
Sem = OSSemCreate((INT16U)0);
OS_ENTER_CRITICAL();
OSTaskCreate(key_task, (void*)0, (OS_STK*)KEY_TASK_STK[KEY_STK_SIZE - 1], KEY_TASK_PRIO);
OSTaskCreate(key_task, (void*)0, (OS_STK*)KEY_TASK_STK[KEY_STK_SIZE - 1], KEY_TASK_PRIO);
OSTaskSuspend(START_TASK_PRIO);
OS_EXIT_CRITICAL();
}
//
void key_task(void *p_arg)
{
u8 key;
p_arg = p_arg;
while(1)
{
key = KEY_Scan(0);
if(key == WKUP_PRES)
{
OSSemPost(Sem); //·¢ËÍÐźÅÁ¿
}
OSTimeDlyHMSM(0, 0, 0, 10);
}
}
//
void led_task(void *p_arg)
{
INT8U err;
p_arg = p_arg;
while(1)
{
OSSemPend(Sem, 0 , &err);//ÇëÇóÐźÅÁ¿
LED1 = ~LED1;
OSTimeDlyHMSM(0, 0, 1, 0);
}
}
- UCOSII信号量
- uCOSii-信号量
- UCOSii-信号量
- 信号量流程图 UCOSII
- ucosii---------信号量&邮箱
- UCOSII 信号量的使用
- UCOSII源码-信号量理解
- 浅析ucosII互斥信号量
- UcosII 的信号量和邮箱
- UCOSII 信号量和信号量集实例
- UCOSII信号量的三个主要的函数
- ucosII 信号量的原理及应用
- STM32上使用UCOSII--信号量和邮箱
- STM32上使用UCOSII--消息队列和信号量集
- ucosii
- ucosii
- ucosii
- UcosII
- 快速幂算法
- F
- 学习Promise
- Google Guava--让java代码更加优雅
- PAT 1044火星数字
- UCOSii-信号量
- C语言指针专题——使用指针要注意这些
- json解析——fastjson
- [US Giants] 二. Integer-Array
- Java语言为什么可以跨平台
- 谷歌教机器人理解语义,像人一样学习复杂技能 | 附3篇论文
- Linux内存管理机制
- SpringMCV运行流程及整合spring
- Java面试知识总结