系统线程
系統線程
? ?系統線程指的是在系統初始化期間有內核自動派生的線程
系統線程相關概念
? ?內核會派生出兩個系統線程,它們分別是主線程和空閑線程
? ?主線程:
? ?這個線程在執行完內核初始化后調用應用程序的主函數mian()(如果定義了主函數)
? ?默認情況下,主線程是優先級最高的搶占式線程。如果內核配置為不支持搶占式線程,那么主線程會被配置為優先級最低的協作式線程
? ?主線程在執行內核初始化或調用應用程序的主函數main()時是一個至關重要的線程。這意味著如果線程被異步中止就出現了一個致命的系統錯誤,如果主函數main()沒被定義,或者執行了主函數main()時在主函數mian()中正常返回了(同步的方式),那么主線程會以同步終止的方式結束,不會出現任何錯誤
? ?空閑線程:
? ?空閑線程會在系統沒有其他工作執行時運行,如果可以的話可以在空閑線程中啟動電源管理來節省功耗。否者的話空閑線程會一直做空循環操作。只要系統運行,那么空閑線程就會一直運行永遠不會結束
? ?空閑線程總是被配置成優先級最低的線程。如果它是一個協作式線程,空閑線程會周期性的讓出CPU,這樣其他線程在需要的時候就可以運行了
? ?空閑線程也是至關重要的線程,所以在線程被異步中止時會出現一個致命的系統錯誤
? ?或許還會有其他的系統線程被派生出來,這是由應用程序指定的內核和板級配置選項決定的。例如,使能系統工作隊列時將會派生出一個提交工作項服務的線程
系統線程的實現
寫一個主函數功能
? ?一個應用程序會提供一個主函數main()功能在內核初始化完成后被調用。內核不會傳任何參數給它
? ?下面的代碼大概描述了主函數main()的功能。在真正應用時這個函數功能復雜度會根據需求變化而變化
void main(void) {/* initialize a semaphore */.../* register an ISR that gives the semaphore */.../* monitor the semaphore forever */while (1) {/* wait for the semaphore to be given by the ISR */.../* do whatever processing is now needed */...} }推薦用法
? ?在應用程序中通過主線程執行只需要一個單一線程的處理,不需要應用程序指定額外的線程
配置選項
? ?相關的配置選項如下:
? ?CONFIG_MAIN_THREAD_PRIORITY
? ?CONFIG_MAIN_STACK_SIZE
? ?CONFIG_IDLE_STACK_SIZE
APIs
? ?無
? ?
總結