FreeRTOS任务无法调度


问题:在STM32F103VET6平台上移植的FreeRTOS,一开始跑得好好的,添加了一个小任务,然后程序无法正常运行

调试过程:

1.断点调试,程序死在了调度上面,if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( UBaseType_t ) 1 )
2.分析可能是分配的堆栈空间不够,加了堆栈空间之后还是不行,
3.后来在网上查找,有网友说是内存不够
4.把其中几个任务的堆栈空间改小了
5.调试OK
6.提出疑问,那到底一个任务分配多少堆栈空间呢,那么总大小不能超过多少呢,后来看到两篇文章
得出几点:
1启动任务中的Stack_Size和任务堆栈没关系,它是提供给普通函数用来存放临时变量用的,比如中断处理函数
2任务堆栈是从TOTAL_HEAP_SIZE这个值中分配来的,虽然我的任务总堆栈空间还是小于这个值,但是还是崩溃了,这点还需要进一步研究
3如果任务堆栈无法再缩小,那就把这个值增大
4任务的堆栈空间是4字节的,所以一般不需要很大的空间,一般任务控制块需要70-80个字节,再加上临时变量就差不多了,
注意:static修饰的临时变量是放在静态存储区的,一般栈区就存临时变量,堆区主要存放分配的内存,静态存储区存放静态变量,全局变量,常量等一般编译的时候就分配好了
 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM