1. 程式人生 > 其它 >RT-Thread學習筆記【RTT系統啟動】

RT-Thread學習筆記【RTT系統啟動】

技術標籤:筆記rtos嵌入式stm32rtos

RT-Thread啟動流程

rtthread_startup()是RTT規定的同意啟動入口

啟動順序:

  1. 從啟動檔案開始執行

  2. 進入rtthread_startup()

  3. 進行RTT系統功能初始化

  4. 進入使用者入口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()函式內新增自己的應用

在這裡插入圖片描述

主執行緒經過以上流程進入使用者應用