上一篇 整理了CuRT從硬體上電後到跳入C function前所作的事情,本篇文章則會紀錄CuRT如何準備multitasking環境,以及CuRT於執行期的行為分析。 在app/shell/main.c中,我們可以看到main()的開頭為: int main() { SerialInit(); init_interrupt_control(); init_curt(); ... SerialInit()只是把UART port初始化,方便printf()可以正常運作。init_interrupt_control()則設定pxa255的interrupt controller可以接收外部的interrupt sources,稍後啟動的timer就會發出定期的interrupt驅動scheduling。init_curt()作的事情就比較多了點,讓我們進去瞧一瞧: void init_curt() { int i; for (i = 0; i < MAX_PRIO; i++) { prio_exist_flag[i] = false; init_list(&ready_list[i]); } init_list(&delayed_list); init_list(&blocked_list); init_list(&termination_wait_list); for (i = 0; i < MAX_THREAD; i++) thread_table[i] = NULL; is_start_os = false; interrupt_nesting = 0; os_time_tick = 0; current_top_prio = MAX_PRIO; total_csw_cnt = 0