日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RT-Thread OS的启动流程

發布時間:2024/1/17 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RT-Thread OS的启动流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、RT進入main之前,

SystemInit函數初始化時鐘。

2、main函數位于startup.c文件中。進行兩個工作

系統開始前,rt_hw_interrupt_disable關閉所有中斷。

之后使用rtthread_startup啟動RTThread

3、函數rtthread_startup()完成的工作:

1、調用函數rt_hw_board_init 完成板子初始化工作

2、顯示版本信息:rt_show_version

3、初始化系統滴答:rt_system_tick_init

4、系統內核對象初始化:rt_system_object_init

5、定時器初始化:rt_system_timer_init

6、系統堆棧初始化rt_system_heap_init

7、任務調度器初始化:rt_system_scheduler_init

8、rt_application_init //加入用戶自定義的任務

9、FINSH模塊初始化 ,

10、定時器線程初始化:rt_system_timer_thread_init

11、空閑任務初始化rt_thread_idle_init

12、開始任務調度,OS接管MCU:rt_system_scheduler_start

任務調度開始之后,OS就算是啟動好了。之后的東西都是在OS的管理下運行了。

4、在RTT示例工程中添加外設驅動的方法:

  驅動頭文件加入board.h

RT-thread系統的main函數位于startup.c文件中。

/*** This function will startup RT-Thread RTOS.*/ void rtthread_startup(void) {/* init board */rt_hw_board_init();//NVIC_config, SysTick_config, serial_device register, set CONSOLE for output(rt_kprintf(...)) in board.c/* show version */rt_show_version(); //show the version of rtthread by serial device(set to be console-device in board.c) in kservice.c /* init tick */rt_system_tick_init(); //empty fucntion(since 1.1.0) in clock.c/* init kernel object */rt_system_object_init();//empty fucntion(since 0.3.0) in object.c/* init timer system */rt_system_timer_init(); //init rt_timer_list[0].next=rt_timer_list[0].prev=rt_timer_list[0](means rt_timer_list is empty) in timer.c rt_system_heap_init((void*)STM32_SRAM_BEGIN, (void*)STM32_SRAM_END);//init system heap in mem.c/* init scheduler system */rt_system_scheduler_init();//init the system scheduler, and init rt_thread_defunct(dead thread list) to be empty in scheduler.c/* init application */rt_application_init(); //init all defined thread in application.c//#ifdef RT_USING_FINSH //replace finsh_set_device() after the function of rt_components_init() in rt_init_thread_entry() of application.c/* init finsh *///finsh_system_init(); //INIT_COMPONENT_EXPORT(finsh_system_init) in shell.c, so it needn't finsh_system_init here//finsh_set_device( FINSH_DEVICE_NAME );//sets the input device of finsh shell(rt_device_open(dev, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX | RT_DEVICE_FLAG_STREAM) in shell.c //#endif/* init timer thread */rt_system_timer_thread_init();//init system software timer thread(opened by #define RT_USING_TIMER_SOFT in rtconfig.h) in timer.c/* init idle thread */rt_thread_idle_init(); //init idle thread(cleanup all dead thread), then start to be ready in idle.c/* start scheduler */rt_system_scheduler_start(); //startup scheduler(first swith to the highest priority thread and enable interrupt )in scheduler.c/* never reach here */return ; } int main(void) {/* disable interrupt first *///enable interrupt(CPSIE I) when the first thread switch(rt_hw_context_switch_to) in lipcpu/cortex-m4/context_rvds.S rt_hw_interrupt_disable();/* startup RT-Thread RTOS */rtthread_startup();return 0; }

?

總結

以上是生活随笔為你收集整理的RT-Thread OS的启动流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。