問題:在STM32F103VET6平台上移植的FreeRTOS,一開始跑得好好的,添加了一個小任務,然后程序無法正常運行
調試過程:
1.斷點調試,程序死在了調度上面,if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( UBaseType_t ) 1 )
調試過程:
1.斷點調試,程序死在了調度上面,if( listCURRENT_LIST_LENGTH( &( pxReadyTasksLists[ tskIDLE_PRIORITY ] ) ) > ( UBaseType_t ) 1 )
2.分析可能是分配的堆棧空間不夠,加了堆棧空間之后還是不行,
4.把其中幾個任務的堆棧空間改小了
5.調試OK
6.提出疑問,那到底一個任務分配多少堆棧空間呢,那么總大小不能超過多少呢,后來看到兩篇文章
得出幾點:
1啟動任務中的Stack_Size和任務堆棧沒關系,它是提供給普通函數用來存放臨時變量用的,比如中斷處理函數
2任務堆棧是從TOTAL_HEAP_SIZE這個值中分配來的,雖然我的任務總堆棧空間還是小於這個值,但是還是崩潰了,這點還需要進一步研究
3如果任務堆棧無法再縮小,那就把這個值增大
4任務的堆棧空間是4字節的,所以一般不需要很大的空間,一般任務控制塊需要70-80個字節,再加上臨時變量就差不多了,
注意:static修飾的臨時變量是放在靜態存儲區的,一般棧區就存臨時變量,堆區主要存放分配的內存,靜態存儲區存放靜態變量,全局變量,常量等一般編譯的時候就分配好了