完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
前言
开一个专题,记录自己学习Rt-thread的过程。许多资料都是来源于之前的笔记和摘抄,有些文档和知识点具体的出处不记得了。如果有您的心血并未写明出处,请联系我。 以我自己学习Rt-thread的经历来说,这并不是一个很难的IOT-OS。只要有足够的耐心,是很容易入门的。而且对于一款国产RTOS而言。找资料是相对来说比较容易的。 这里是官网上给出的流程图 MDK 提供了扩展功能 Sub$ 和 Super$(其它平台也有类似的扩展功能,这里以最常用的MDK为例说明),可以给 main 添加 Sub$ 的前缀符号作为一个新功能函数 Sub$main,这个 Sub$main 可以先调用一些要补充在 main 之前的功能函数(这里添加 RT-Thread 系统初始化功能),再调Super$main 转到 main() 函数执行,这样可以让用户不用去管 main() 之前的系统初始化操作(详见ARM® Compiler v5.06 for µVision® armlink User Guide)。下面看RT-Thread启动过程如下图所示: 但是这里是给出的MDK环境下的流程 我使用的是RT-STUDIO IDE 直接使用GCC 编译的因此这里的起始过程有些不太一样。 我们直接打开工程的 startup_stm32f407xx.S 文件 去查看下我们的主函数入口在哪。 启动文件startup_stm32f407xx.S startup_stm32f407xx.S 如下 截取startup_stm32f407xx.S 前半段 这里是汇编语言 学过微机原理 或者自己感兴趣的话 可以去研究一下 。不过这里的注释已经写清楚了一部分内容了。 首先我们 设置栈指针 sp 接着我们把flash中的data段和bss段搬运到 sram 中 注意这个bss段的值 全部被赋值为0了。 紧接着 开始 跳转到SystemInit 初始化 在接着跳转到entry (这个也就是我们应用程序的入口函数)。 我们来看下这个SystemInit 初始化 这里最重要的一句话是 配置矢量表位置添加偏移地址 具体的含义可以去查一下SCB寄存器。 entry: 程序入口函数 接下来就是我们最为关系的程序入口函数了 接下来的流程和官网上的就一样了了 这里在放一遍 我们最为关心的 就是这里的两个函数 一个是跟底层硬件相关的rt_hw_board_init,这也是我们移植时要重点实现的函数;另一个是跟应用程序相关的rt_application_init。 rt_hw_board_init:底层硬件相关 hw_board_init(BSP_CLOCK_SOURCE, BSP_CLOCK_SOURCE_FREQ_MHZ, BSP_CLOCK_SYSTEM_FREQ_MHZ); 这一句是时钟的初始化。 F427XX 是180MHz 自己去设置一下。 rt_console_set_device(RT_CONSOLE_DEVICE_NAME); 设置控制台设备 这是就是shell 运行时的控制台。 rt_components_board_init(); RT-Thread 自动初始化机制 如果有这方面的需求可以去了解下这里做了些什么动作。 从上面的代码可以看出rt_components_init函数依次调用执行RT-Thread自定义RTI符号段SECTION(".rti_fn."level)内从__rt_init_desc_rti_board_start到__rt_init_desc_rti_board_end的命令或函数,用户可以通过调用宏定义INIT_EXPORT(fn, level)将需要在启动时进行初始化的函数指针放到该RTI符号段中,形成一张初始化函数表(可以类比STM32的中断向量表)。 rt_application_init:应用程序相关 不论开没开heap 支持 应用程序入口都是一个线程 void main_thread_entry(void *parameter) rt_application_init创建了一个主线程main_thread_entry,在该线程内部调用了组件初始化函数rt_components_init,然后进入main函数,开始执行用户代码,用户可以在main函数内添加自己的应用。 从上面的代码可以看出rt_components_init函数依次调用执行RT-Thread自定义RTI符号段SECTION(".rti_fn."level)内从__rt_init_desc_rti_board_end到__rt_init_desc_rti_end的命令或函数,用户可以通过调用宏定义INIT_EXPORT(fn, level)将需要在启动时进行初始化的函数指针放到该RTI符号段中,形成一张初始化函数表(可以类比STM32的中断向量表)。 RT-Thread还针对不同的level给出了相应的宏定义,代码如下: main() |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1602 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1536 浏览 1 评论
967 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
680 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1579 浏览 2 评论
1860浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
640浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
513浏览 3评论
527浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
500浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 11:22 , Processed in 0.967943 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号