初级会员
- 积分
- 168
- 金钱
- 168
- 注册时间
- 2020-9-2
- 在线时间
- 41 小时
|
1金钱
串口1接收函数只在第一次产生串口中断,然后串口再接收数据就会卡在中断程序里,请问这该怎么修改?
//任务1的任务函数
void task1_task(void *p_arg)
{
u8 key;
u8 num;
OS_ERR err;
while(1)
{
//OSTaskSemPost(&Task2_TaskTCB,OS_OPT_POST_NONE,&err); //使用系统内建信号量向任务task2发送信号量
num++;
if(num==50)
{
num=0;
LED0=~LED0;
}
OSTimeDlyHMSM(0,0,0,10,OS_OPT_TIME_PERIODIC,&err); //延时10ms
}
}
//任务2的任务函数
void task2_task(void *p_arg)
{
u8 num;
OS_ERR err;
while(1)
{
OSTaskSemPend(0,OS_OPT_PEND_BLOCKING,0,&err); //请求任务内建的信号量
num++;
printf("任务信号量获取成功!\r\n");
LED1 = ~LED1;
OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err); //延时1s
}
}
void USART1_IRQHandler(void)
{
unsigned char r;
OS_ERR err;
OSIntEnter();
if(USART_GetFlagStatus(USART1,USART_IT_RXNE)!=RESET)
{
r=USART_ReceiveData(USART1);
printf("数据接收完成,释放一个任务信号量到数据分析任务\r\n");
OSTaskSemPost((OS_TCB *)&Task2_TaskTCB, //目标任务
(OS_OPT )OS_OPT_POST_NONE, //没选项要求
(OS_ERR *)&err);
}
//USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志
OSIntExit();
}
|
|