初级会员
- 积分
- 71
- 金钱
- 71
- 注册时间
- 2017-9-11
- 在线时间
- 11 小时
|
2金钱
本帖最后由 yup1983 于 2018-7-18 15:10 编辑
大家好,目前我有一个项目,使用8266远程调试用,最近遇到一个问题,在 StartTask_main 任务运行正常的工作程序,以交流电的50HZ周期作为外部中断,一般每次运行20ms的16倍,由于对RTOS不太熟练,8266串口的接收中断里使用全局变量接收服务器发来的控制命令,然后在 StartTask_8266 任务中做解析。最近遇到的问题是,如果在 StartTask_main 中每次发送一组80~100字节的一个数据包,上位机同时下发一个控制命令,这个控制命令会通过UART1发送命令,然后写flash,然后再通过8266回复上位机,这个控制命令发送得太频繁程序就会大部分时间卡在UART接收中断里,但是也不会进入 HardFault_Handler 或者 BusFault_Handler 中,请问这是什么问题?大概要怎么尝试解决? 我 StartTask_main 任务必须以50hz这个中断作为运行起始点,每次必须运行2N个20ms时间,同时还要处理上位机发来的控制命令,处理控制命令不能干扰到 StartTask_main 的时序,应该怎么设置优先级更合理一些?有没有类似程序参考一下结构?
[mw_shl_code=c,true]/* Create the thread(s) */
/* definition and creation of defaultTask */
osThreadDef(defaultTask, StartDefaultTask, osPriorityIdle, 0, 128);
defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);
/* definition and creation of myTask_main */
osThreadDef(myTask_main, StartTask_main, osPriorityLow, 0, 512);
myTask_mainHandle = osThreadCreate(osThread(myTask_main), NULL);
/* definition and creation of myTask_8266 */
osThreadDef(myTask_8266, StartTask_8266, osPriorityNormal, 0, 512);
myTask_8266Handle = osThreadCreate(osThread(myTask_8266), NULL);[/mw_shl_code]
|
最佳答案
查看完整内容[请看2#楼]
感谢大家回复,经过仿真发现是出现了溢出错误但是HAL库没有能够自动处理,我在发送串口数据的函数里增加了HAL_UART_Receive_IT(&huart1, uart1_rx_buffer, 1)这样一条语句就好了。
|