FreeRTOS任务⽆法调度
意外怀孕的补救措施问题:在STM32F103VET6平台上移植的FreeRTOS,⼀开始跑得好好的,添加了⼀个⼩任务,然后程序⽆法正常运⾏
一次风机调试过程:
三元猪1.断点调试,程序死在了调度上⾯,if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( UBaType_t ) 1 )
美女与野兽2017
2.分析可能是分配的堆栈空间不够,加了堆栈空间之后还是不⾏,
3.后来在⽹上查找,有⽹友说是内存不够
4.把其中⼏个任务的堆栈空间改⼩了
5.调试OK
稻草人全文
6.提出疑问,那到底⼀个任务分配多少堆栈空间呢,那么总⼤⼩不能超过多少呢,后来看到两篇⽂章
得出⼏点:组训
1启动任务中的Stack_Size和任务堆栈没关系,它是提供给普通函数⽤来存放临时变量⽤的,⽐如中断处理函数
2任务堆栈是从TOTAL_HEAP_SIZE这个值中分配来的,虽然我的任务总堆栈空间还是⼩于这个值,但是还是崩溃了,这点还需要进⼀步研究
3如果任务堆栈⽆法再缩⼩,那就把这个值增⼤
bootymusic歌词
4任务的堆栈空间是4字节的,所以⼀般不需要很⼤的空间,⼀般任务控制块需要70-80个字节,再加上临时变量就差不多了,
注意:static修饰的临时变量是放在静态存储区的,⼀般栈区就存临时变量,堆区主要存放分配的内存,静态存储区存放静态变量,全局变量,常量等⼀般编译的时候就分配好了
青山菜