初级会员

- 积分
- 64
- 金钱
- 64
- 注册时间
- 2022-4-1
- 在线时间
- 12 小时
|
10金钱
问题及场景如下:
创建一个二值信号量;
创建一个事件组;
在创建4个任务:
Data_Process_task : 接收中断字符串信息处理任务。(等待USART串口释放二值信号量,Data_Process_task获得信号量,实现任务同步)
Data_Process_task在接收到字符串后,将事件组标志位第一位置1;
Key_Action__task : 按键处理任务,将事件组标志位第二位置1;
Mov_Action__task : 等待事件组标志位第一第二位都置一时,才执行别的操作。
Task_Running_task : 提示系统正在运行。
我在实验的时候:
串口组手发送字符串,串口接收中断接收到字符串后,系统能够正常运行,Mov_Action__task在所有标志位都置1后的操作也能正常执行,但是我在发送第五个字符串时,整个系统就会卡死,也没有断言错误。
后面我在Task_Running_task(优先级较低)中,加入了几行代码,想查看每个任务的信息,代码入如下:
char *pbuffer = (char *)calloc(1, 200);
printf("--------------- heap: ---------------------\r\n");
vTaskList(pbuffer);
printf("%s", pbuffer);
printf("----------------------------------------------\r\n");
free(pbuffer);
后面程序就可以成功进行了,也可以接收10个字符串(我的目的就是接收10个字符串)。但是注释掉上面的代码就又不行了。
我一开始是以为是任务堆栈分配的不够,但是从vTaskList的打印信息来看,任务堆栈是够的。对此我是百思不得其解。
附件中有相关代码。
|
最佳答案
查看完整内容[请看2#楼]
1、FREERTOSCONFIG.h 中堆空间用任务栈 默认为( ( size_t ) ( 17 * 1024 ) )
是否够?
2、系统栈空间是否够?
KEIL默认系统栈为200
3、每个任务分配的栈空间是否够?
打印出每个任务的堆栈信息
4、FREERTOSCONFIG.h 中 configMAX_SYSCALL_INTERRUPT_PRIORITY 默认为 191,可受FreeRTOS控制的中断优先级为11,12,13,14,15.
你的串口中断定义的中断优先 ...
|