RT_thread之系统启动过程

注意:个人学习记录,如有不对敬请指正
环境:stm32F767,RTOS:rt_thread v4.1.1
1.STM32启动过程
startup_stm32f767xx.s中
后续添加
会从这里跳转到我们定义的main函数中,这是裸机的逻辑
2.RT_Thread系统启动
首先补充个知识点
使用keil编译代码是用到的ARM编译器会预定义宏__ARMCC_VERSION(我傻逼了,代码里面找半天,找不到这个宏,这是编译器自己定义的)
官方说明
意思就是
先执行*.s中 的 __main 指向了
$Sub$$main而$Super$$main会指向原来的main
在这里什么意思呢
这里是rt_thread 启动后会去创建第一个线程然后,在这个线程里面会去调用我们最开始的main函数。
回到开头
在这主要会
硬件初始化,系统时钟,主线程初始化,idle初始化,系统调度启动
例如freeRTOS
例如ucOS-II
不过ucOS-II和FReeOS  RT_thread有点不一样,ucOS-III 好像大差不差(改天看看)
 
3.系统启动相关函数
rt_hw_board_init // hal库初始化,硬件驱动等
rt_system_timer_init();//初始化一个定时器链表 
rt_system_scheduler_init();//初始化系统调度的链表,链表节点个数 32
rt_application_init //创建1号线程 并放入就绪队列
rt_thread_idle_init //创建idle空闲线程,线程优先级最低 31 ,放入就绪队列
rt_system_scheduler_start // 切换到就绪队列中优先级最高的,当然就是main函数了,就又回来了,妙
rt_hw_context_switch_to // 汇编实现,着实没看明白
其实接下来如果要多线程,就在这创建就OK
系统tick 在这个函数里初始化
 
 
posted @ 2023-07-07 23:00  三分书生气  阅读(68)  评论(0)    收藏  举报