中级会员
- 积分
- 287
- 金钱
- 287
- 注册时间
- 2021-6-21
- 在线时间
- 104 小时
|
1金钱
本帖最后由 skw168 于 2022-10-27 11:24 编辑
有一个最低优先级任务(优先级是8),在该任务中使用串口发送100字节数据;在发送过程中,系统无法调度其它高优先级的任务,必须要等到串口数据全部发送完成了,才会执行到其它任务,这是什么情况;
目前调试的方案有:
1.怀疑堆栈溢出,加大堆栈到512,无效果
2.把串口任务换成其它阻塞任务,比如软件延时(不是uCOS延时),系统又恢复正常了
目前基本确定是串口发送数据部分的问题
任务函数:
- void App_Task_OTHER(void* pdata)
- {
- unsigned char j;
- pdata = pdata;
- for (;;)
- {
- // Delay(0xffffffff);
- // Delay(0xffffffff);
- // Delay(0xffffffff);
- // Delay(0xffffffff);
- // Delay(0xffffffff);
- // while(GET_MEAS_KEY == 1);
- //vAppTask_DebugInfo();
- __NOP();
- for(j = 0; j < 100; j++)
- {
- Uart_SendByte(0xaa);
- }
-
- for(j = 0; j < 100; j++)
- {
- Uart_SendByte(0xaa);
- }
- for(j = 0; j < 100; j++)
- {
- Uart_SendByte(0xaa);
- }
-
- for(j = 0; j < 100; j++)
- {
- Uart_SendByte(0xaa);
- }
- __NOP();
- OSTimeDlyHMSM(0, 0, 0, 20);
- }
- }
复制代码 串口发送一个字节的函数
- void Uart_SendByte(u8 data)
- {
- u8 buff;
- //USART_ClearFlag(USART2, USART_FLAG_TXE); //清除中断标志位
- USART_SendData(USART2,data);
- while(1)
- {
- buff = USART_GetFlagStatus(USART2, USART_FLAG_TC);
- if(buff == SET)
- break;
- }
-
- //while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);
- USART_ClearFlag(USART2, USART_FLAG_TC); //清除中断标志位
- }
复制代码
|
|