uCOS里的信号量错误笔记

<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)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值