使用ucosII做一个任务的同步,为了找出问题所在把其他任务全部屏蔽了,只剩下一个任务
void mpu6050_task(void *pdata)
{
u8 err;
pdata = pdata ;
while(1)
{
OSSemPend(sem_mpu6050,0,&err);
mpu6050_times++;
disp_num(200,130,mpu6050_times);//液晶显示该数字
delay_ms(100);
}
}
创建任务前已经初始化信号量 sem_mpu6050
sem_mpu6050 = OSSemCreate(0);
释放该信号量的函数位于串口3中断服务子程序中
void USART3_IRQHandler(void)
{
OSIntEnter();
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //接收中断有效
{
OSSemPost(sem_mpu6050);
Temp0[counter] = USART_ReceiveData(USART3); //
}
OSIntExit();
}
由于是第一次用到ucos,为了测试信号量到底有没有起作用,我将中断服务程序中的释放函数OSSemPost(sem_mpu6050)屏蔽,但是不知为什么任务仍能请求到信号继续向下执行,有没有碰到过这种现象的呢,在线等
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
找到原因了,创建信号量的函数一定要写在OSInit()和OSStart()函数之间,之前写在了INIT前面,所以信号量没有创建成功,指针没有指向信号量,所以每次都能请求到信号量
---------------------------------
液晶上有显示的 任务确实在运行
一周热门 更多>