RT-Thread學習筆記【RTT系統啟動】
阿新 • • 發佈:2021-01-24
RT-Thread啟動流程
rtthread_startup()是RTT規定的同意啟動入口
啟動順序:
-
從啟動檔案開始執行
-
進入rtthread_startup()
-
進行RTT系統功能初始化
-
進入使用者入口main()
components.c
int $Sub$$main(void)
{
rt_hw_interrupt_disable();
rtthread_startup();<-----------------------
return 0;
}
/*省略其他程式碼*/
int rtthread_startup (void)
{
rt_hw_interrupt_disable();//關閉中斷
/* 板級初始化:需要在該函式內部進行系統堆的初始化*/
rt_hw_board_init();
/* 列印RTT版本資訊 */
rt_show_version();
/* 定時器初始化 */
rt_system_timer_init();
/* 排程器初始化 */
rt_system_scheduler_init();
#ifdef RT_USING_SIGNALS
/* 訊號初始化 */
rt_system_signal_init();
#endif
/* 建立一個使用者main執行緒 */
rt_application_init();
/* 定時器執行緒初始化 */
rt_system_timer_thread_init();
/* 空閒執行緒初始化 */
rt_thread_idle_init();
/* 啟動排程器 */
rt_system_scheduler_start();
/* 不會執行至此 */
return 0;
}
啟動排程器之前,系統建立的執行緒在執行rt_thread_startup()後並不會馬上執行,而是處於就緒狀態等待系統排程,啟動排程器後系統才轉入第一個執行緒開始允許,根據排程規則,選擇的是就緒佇列中優先順序最高的執行緒
rt_hw_board_init()中完成了系統時鐘設定、串列埠初始化、將系統輸入輸出繫結到串列埠
使用者在main()函式內新增自己的應用
主執行緒經過以上流程進入使用者應用