系统线程
系統(tǒng)線程
? ?系統(tǒng)線程指的是在系統(tǒng)初始化期間有內(nèi)核自動派生的線程
系統(tǒng)線程相關(guān)概念
? ?內(nèi)核會派生出兩個(gè)系統(tǒng)線程,它們分別是主線程和空閑線程
? ?主線程:
? ?這個(gè)線程在執(zhí)行完內(nèi)核初始化后調(diào)用應(yīng)用程序的主函數(shù)mian()(如果定義了主函數(shù))
? ?默認(rèn)情況下,主線程是優(yōu)先級最高的搶占式線程。如果內(nèi)核配置為不支持搶占式線程,那么主線程會被配置為優(yōu)先級最低的協(xié)作式線程
? ?主線程在執(zhí)行內(nèi)核初始化或調(diào)用應(yīng)用程序的主函數(shù)main()時(shí)是一個(gè)至關(guān)重要的線程。這意味著如果線程被異步中止就出現(xiàn)了一個(gè)致命的系統(tǒng)錯(cuò)誤,如果主函數(shù)main()沒被定義,或者執(zhí)行了主函數(shù)main()時(shí)在主函數(shù)mian()中正常返回了(同步的方式),那么主線程會以同步終止的方式結(jié)束,不會出現(xiàn)任何錯(cuò)誤
? ?空閑線程:
? ?空閑線程會在系統(tǒng)沒有其他工作執(zhí)行時(shí)運(yùn)行,如果可以的話可以在空閑線程中啟動電源管理來節(jié)省功耗。否者的話空閑線程會一直做空循環(huán)操作。只要系統(tǒng)運(yùn)行,那么空閑線程就會一直運(yùn)行永遠(yuǎn)不會結(jié)束
? ?空閑線程總是被配置成優(yōu)先級最低的線程。如果它是一個(gè)協(xié)作式線程,空閑線程會周期性的讓出CPU,這樣其他線程在需要的時(shí)候就可以運(yùn)行了
? ?空閑線程也是至關(guān)重要的線程,所以在線程被異步中止時(shí)會出現(xiàn)一個(gè)致命的系統(tǒng)錯(cuò)誤
? ?或許還會有其他的系統(tǒng)線程被派生出來,這是由應(yīng)用程序指定的內(nèi)核和板級配置選項(xiàng)決定的。例如,使能系統(tǒng)工作隊(duì)列時(shí)將會派生出一個(gè)提交工作項(xiàng)服務(wù)的線程
系統(tǒng)線程的實(shí)現(xiàn)
寫一個(gè)主函數(shù)功能
? ?一個(gè)應(yīng)用程序會提供一個(gè)主函數(shù)main()功能在內(nèi)核初始化完成后被調(diào)用。內(nèi)核不會傳任何參數(shù)給它
? ?下面的代碼大概描述了主函數(shù)main()的功能。在真正應(yīng)用時(shí)這個(gè)函數(shù)功能復(fù)雜度會根據(jù)需求變化而變化
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 */...} }推薦用法
? ?在應(yīng)用程序中通過主線程執(zhí)行只需要一個(gè)單一線程的處理,不需要應(yīng)用程序指定額外的線程
配置選項(xiàng)
? ?相關(guān)的配置選項(xiàng)如下:
? ?CONFIG_MAIN_THREAD_PRIORITY
? ?CONFIG_MAIN_STACK_SIZE
? ?CONFIG_IDLE_STACK_SIZE
APIs
? ?無
? ?
總結(jié)