uCOS里的信号量错误笔记

来源:互联网 发布:粒子群算法代码 编辑:程序博客网 时间:2024/05/16 09:16
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">u8 * Get_Rm04_Check_Cmd_Flag(void)有问题</span>

具体为:请求信号量失败

OSSemPend(Get_Rm04_Check_Cmd_Flag_Sem,0,&m_err);//请求信号量,查看Rm04_Check_Cmd_Flag变量是否被占用

1,函数的返回值为OS_ERR_EVENT_TYPE,查看OSSemPend()返回值英文说明-->>If you didn't pass a pointer to a semaphore.-->>没有传递指针到信号量

2,查看 Get_Rm04_Check_Cmd_Flag_Sem=OSSemCreate(1);的返回值

Get_Rm04_Check_Cmd_Flag_Sem=OSSemCreate(1);//信号量,变量Rm04_Check_Cmd_Flag的访问控制if(Get_Rm04_Check_Cmd_Flag_Sem== (void *)0)fprintf(DEBUG_FILE,"\r\n\r\n\r\n\r\n\r\nGet_Rm04_Check_Cmd_Flag--创建失败r\n\r\n\r\n\r\n");
发现创建失败。

3,细看后发现是uCOS配置文件os_cfg.h里对于事件个数限制为6,而我用了7个。将OS_MAX_EVENTS由6改为8.

4,还是出错,查看

OSSemPend(Get_Rm04_Check_Cmd_Flag_Sem,0,&m_err);<span style="white-space:pre">//请求信号量,查看Rm04_Check_Cmd_Flag变量是否被占用</span>
的返回值,是OS_ERR_PEND_ISR     返回值英文说明-->>If you called this function from an ISR and the result  would lead to a suspension.-->>中断服务程序中调用该函数,会导致程序挂起。

原因:中断服务程序不能无限等待改信号量的获取!

解决:写了个中断专用的信号量请求函数。(调用OSSemAccept())

u8 * Get_Rm04_Check_Cmd_Flag_ISR(void)




0 0
原创粉丝点击