初级会员

- 积分
- 168
- 金钱
- 168
- 注册时间
- 2020-9-2
- 在线时间
- 41 小时
|
1金钱
ucos在串口中断中接收数据,数据接收完成后发部任务信号量到指定的任务中发现指定的任务不能接收到任务信号量,指定任务不执行!
//串口中断接收数据的函数
void USART1_IRQHandler(void)
{
unsigned char r;
OS_ERR err;
OSIntEnter();
if(USART_GetFlagStatus(USART1,USART_IT_RXNE)!=RESET)
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
r=USART_ReceiveData(USART1);
USART1_RX_BUF[USART1_REC_CNT]=r;
USART1_REC_CNT++;
if(USART1_REC_CNT>(USART1_REC_LEN-1))
{
printf("数据接收完成,释放一个任务信号量到数据分析任务\r\n");
OSTaskSemPost((OS_TCB *)&Analy_TaskTCB, //目标任务
(OS_OPT )OS_OPT_POST_NONE, //没选项要求
(OS_ERR *)&err);
USART1_REC_CNT=0;
}
}
OSIntExit();
}
///任务等待任务信号量的任务
//串口1接收数据校验
void Analy_task(void *p_arg)
{
unsigned char check_sum;
OS_ERR err;
CPU_TS ts;
CPU_SR_ALLOC();
p_arg = p_arg;
while(1)
{
//
OSTaskSemPend ((OS_TICK )0, //无期限等待
(OS_OPT )OS_OPT_PEND_BLOCKING, //如果信号量不可用就等待
(CPU_TS *)&ts, //获取信号量被发布的时间戳
(OS_ERR *)&err); //返回错误类型
// printf("Rx_buff[0]:0x%02hhx\r\n",USART1_RX_BUF[0]);
// printf("Rx_buff[1]:0x%02hhx\r\n",USART1_RX_BUF[1]);
// printf("Rx_buff[2]:0x%02hhx\r\n",USART1_RX_BUF[2]);
// printf("Rx_buff[3]:0x%02hhx\r\n",USART1_RX_BUF[3]);
// printf("Rx_buff[4]:0x%02hhx\r\n",USART1_RX_BUF[4]);
// printf("Rx_buff[5]:0x%02hhx\r\n",USART1_RX_BUF[5]);
// printf("Rx_buff[6]:0x%02hhx\r\n",USART1_RX_BUF[6]);
// printf("Rx_buff[7]:0x%02hhx\r\n",USART1_RX_BUF[7]);
// printf("Rx_buff[8]:0x%02hhx\r\n",USART1_RX_BUF[8]);
// printf("Rx_buff[9]:0x%02hhx\r\n",USART1_RX_BUF[9]);
// printf("Rx_buff[8]:0x%02hhx\r\n",USART1_RX_BUF[10]);
// printf("Rx_buff[22]:0x%02hhx\r\n",USART1_RX_BUF[22]);
if(USART1_RX_BUF[0]==0xaa&&USART1_RX_BUF[1]==0xff)
{
check_sum=USART1_RX_BUF[0]+USART1_RX_BUF[1]+USART1_RX_BUF[2]+USART1_RX_BUF[3]+USART1_RX_BUF[4]+USART1_RX_BUF[5]+USART1_RX_BUF[6]+USART1_RX_BUF[7]+
USART1_RX_BUF[8]+USART1_RX_BUF[9]+USART1_RX_BUF[10]+USART1_RX_BUF[11]+USART1_RX_BUF[12]+USART1_RX_BUF[13]+USART1_RX_BUF[14]+
USART1_RX_BUF[15]+USART1_RX_BUF[16]+USART1_RX_BUF[17]+USART1_RX_BUF[18]+USART1_RX_BUF[19]+USART1_RX_BUF[20]+USART1_RX_BUF[21];
check_sum=~check_sum;
check_sum=check_sum&0xff;
//printf("check_sum= 0x%02hhx\r",check_sum);
// if(USART1_RX_BUF[22]==check_sum)
// {
RecToUsart2();
OSFlagPost((OS_FLAG_GRP*)&EventFlags,
(OS_FLAGS )USART1REC_FLAG,
(OS_OPT )OS_OPT_POST_FLAG_SET,
(OS_ERR* )&err);
// }
// else
// {
// clearUsart1Buff();
// }
}
else
{
clearUsart1Buff();
}
OSTimeDlyHMSM(0,0,0,10,OS_OPT_TIME_HMSM_STRICT,&err); //延时1s
}
}
请问我这哪里有问题?
|
|