RT-Thread 的 CPU 固件移植理解

博主介绍

🌊 作者主页:苏州程序大白

🌊 作者简介:🏆CSDN人工智能域优质创作者🥇,苏州市凯捷智能科技有限公司创立人,目前合作公司富士康、歌尔等几家公司
💬如果文章对你有帮助,欢迎关注、点赞、收藏(一键三连)和C#、Halcon、python+opencv、VUE、各大公司面试等一些订阅专栏哦
💅 有任何问题欢迎私信,看到会及时回复

RT-Thread 的 CPU 抽象层

在嵌入式领域有多重不同的 CPU 架构,我们知道 RT-Thread 是支持不同架构的嵌入式操作系统,我们先来大概看一下 RT-Thread 的架构。
在这里插入图片描述
可以看到 RT-Thread 提供了一个 libcpu 抽象层来适配不同的 CPU 架构, libcpu 向上对内核提供统一的接口,包括全局中断的开关,线程栈的初始化,上下文切换等。

RT-Thread 的 libcpu 抽象层向下提供了一套统一的 CPU 架构移植接口,这部分接口包含了全局中断 开关函数、线程上下文切换函数、时钟节拍的配置和中断函数、Cache 等等内容。

接下来让我们一起看看 RT-Thread 嵌入式系统的文件目录:(https://github.com/RT-Thread/rt-thread)

在这里插入图片描述
我手头的开发板是潘多拉物联网开发版,CPU 是 STM32L475VET6,去官网找到对应的文档可以得知 CPU 架构为 Cortex-M4 架构:
在这里插入图片描述
打开 rt-thread\libcpu\arm\cortex-m4 目录会发现有如下几个文件:

libcpu\arm\cortex-m4 目录下文件

  • context_gcc.S

  • context_iar.S

  • context_rvds.S

  • cpuport.c

  • SConscript

其中上面的 context_rvds.S 文件就是 RT-Thread 的对该 CPU 提供的移植接口,相关 API 如下:

函数和变量描述
rt_base_t rt_hw_interrupt_disable(void);关闭全局中断
void rt_hw_interrupt_enable(rt_base_t level);打开全局中断
rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter, rt_uint8_t *stack_addr, void *texit);线程栈的初始化,内核在线程创建和线程初始化里面会调用这个函数
void rt_hw_context_switch_to(rt_uint32 to);没有来源线程的上下文切换,在调度器启动第一个线程的时候调用,以及在signal 里面会调用
void rt_hw_context_switch(rt_uint32 from, rt_uint32 to);从 from 线程切换到 to 线程,用于线程和线程之间的切换
void rt_hw_context_switch_interrupt(rt_uint32 from, rt_uint32 to);从 from 线程切换到 to 线程,用于中断里面进行切换的时候使用
rt_uint32_t rt_thread_switch_interrupt_flag;表示需要在中断里进行切换的标志
rt_uint32_t rt_interrupt_from_thread, rt_interrupt_to_thread;在线程进行上下文切换时候,用来保存 from 和 to 线程

具体的如何去移植,如何去修改对应参数,建议参考《RT-Thread 编程指南》的内核移植部分内容。

STM32CubeMX 固件工具

STM32CubeMX 是一个图形化的工具,可以使用该工具来很方便的配置 STM32 微处理器的相关硬件并生成底层驱动(Low-layer APIs(LL))硬件抽象层接口(Hardware abstraction layer APIs(HAL))板级支持包(Board Support Package(BSP))

在这里插入图片描述
概括的说,STM32CubeMX 图形界面可以完成以下功能:

  • 快速简便地配置所选外设和中间件的MCU引脚、时钟树和工作模式。

  • 为开发板设计人员生成引脚配置报告。

  • 生成一个完整项目,包含所有必需的库和初始化C代码,以在用户定义的工作模式下设置设备。可以在选定的应用开发环境中直接打开项目(适用于一系列支持的IDE),以继续进行应用程序开发。

在这里插入图片描述
下载安装 CubeMX

这里需要注意的是,该工具依赖 Java 环境,需要具备 Java 8.0 的环境,并配置环境变量,否则安装失败。

RT-Thread 的 BSP

前面我们已经看到 RT-Thread 的目录中有一个 bsp 文件夹,BSP 框架结构如下图所示:
在这里插入图片描述
每一个 STM32 系列的 BSP 由三部分组成,分别是通用库、BSP 模板和特定开发板 BSP,下面的表格以 F1 系列 BSP 为例介绍这三个部分:

项目文件夹说明
通用库stm32/libraries用于存放 HAL 库以及基于 HAL 库的多系列通用外设驱动文件
F1 系列 BSP 工程模板stm32/libraries/templates/stm32f10xF1系列 BSP 模板,可以通过修改该模板制作更多 F1系列 BSP
特定开发板 BSPstm32/stm32f103-atk-nano在 BSP 模板的基础上修改而成

例如我手头的这个潘多拉 STM32L4 开发版,在 bsp\stm32\stm32l475-atk-pandora 目录下,我们可以在该目录看到 board\CubeMX_Config 目录中的 STM32CubeMX 工程,双击可以直接打开。
在这里插入图片描述
提示,建议复制一个 CubeMX_Config 目录再修改,可以对照前后变化。

当然,一般情况下我们不必要修改具体开发板下面的CubteMX,因为已经和开发板配套设置好了,如果我们手头有一款开发板还没有纳入 bsp 目录,此时我们可以去 bsp\stm32\libraries\templates\下面寻找对应系列的模板并打开进行修改。

在这里插入图片描述
在 CubeMX 工程中将芯片型号为修改为实际型号,例如: STM32F103RBTx 。

打开外部时钟、设置下载方式、打开串口外设(注意只需要选择串口外设引脚即可,无需配置其他参数):

在这里插入图片描述
配置系统时钟:

在这里插入图片描述
设置项目名称,并在指定地址重新生成 CubeMX 工程:
在这里插入图片描述
最终 CubeMX 生成的工程目录结构如下图所示:
在这里插入图片描述
这里你是不是就有疑问了,生成的其余的文件夹为什么可以删除,那是因为在 bsp\stm32\libraries\STM32L4xx_HAL\ 已经包含了 STM32 的公共固件库(系列通用 HAL 库)。
在这里插入图片描述
而在 bsp\stm32\libraries\HAL_Drivers\ 存放的是对应的驱动文件(连接 RT-Thread 内核HAL 之间的桥梁) 例如我们 gpio 的驱动 drv_gpio.c
在这里插入图片描述

在 CubeMX 生成的文件中除了上面提到的 HAL 库外还有一个叫 CMSIS 的文件夹。

CMSIS(微控制器软件接口标准,Cortex Microcontroller Software Interface Standard)是 ARM 官方设计的驱动包,框图如下:

在这里插入图片描述
ARM 推出 CMSIS 软件包意在统一各大芯片厂商的外设驱动,DSP 数字信号处理,下载器和各个主流 RTOS 的 API 统一。几年下来,各个厂商一直是各自为战,所以 CMSIS 的驱动一直没有被各个芯片厂商采用。

💫点击直接资料领取💫

在这里插入图片描述

这里有各种学习资料还有有有趣好玩的编程项目,更有难寻的各种资源。 ​ ​

❤️关注苏州程序大白公众号❤️

👇 👇👇

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
STM32F103是意法半导体(STMicroelectronics)生产的一款32位嵌入式微控制器,具有高性能和低功耗的特点。RT-Thread Nano是RT-Thread实时操作系统的一个轻量级版本,适用于资源受限的嵌入式系统。 在将RT-Thread Nano移植到STM32F103上之前,需要先了解RT-Thread Nano的架构和STM32F103的硬件特性。 首先,需要确保RT-Thread Nano的源代码和STM32F103的开发环境已经准备好。接着,根据STM32F103的芯片手册和引脚映射表,需要对RT-Thread Nano的硬件抽象层进行适配,确保操作系统可以正确地访问外设和中断。 其次,需要根据STM32F103的内存和存储器大小来合理配置RT-Thread Nano的内存管理器和文件系统。可以根据实际需求对系统进行裁剪,移除不必要的模块和功能,以减小系统的内存占用和代码体积。 然后,需要配置STM32F103的系统时钟和中断向量表,并在启动代码中初始化硬件资源和系统任务。可以参考RT-Thread Nano的官方文档和示例代码,根据具体的硬件平台和应用需求进行相应的设置和调试。 最后,进行系统的编译、烧录和调试。可以使用STM32F103的开发工具链和调试器,对编译后的固件进行烧录和调试,确保系统能够正确地启动和运行。 总结来说,将RT-Thread Nano移植到STM32F103上需要进行硬件适配、内存管理和系统配置等工作,最终通过编译、烧录和调试来验证移植的正确性。这样可以使得STM32F103可以运行使用RT-Thread Nano操作系统的应用程序,实现更灵活和可靠的嵌入式系统设计。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏州程序大白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值