使用vscode + gcc进行 STM32 单片机开发(二)gcc环境 移植rtthread

背景

在上一篇文章:用vscode + gcc进行 STM32 单片机开发(一)编译及调试 中我们介绍了如何使用vscode进行基础的STM32 MCU程序的 工程创建、代码编译、链接、生成二进制文件,以及如何debug。

本文继续介绍如何进行rtthread RTOS 操作系统移植,当然,也是在vscode中进行。

rt-thread

rt-thread(官网链接:https://www.rt-thread.org/)是国内知名的RTOS系统,用于MCU上支持优先级多线程编程。 对于不同的MCU,需要修改一些函数,进行“移植”的操作。

相关文档请各位自行去官网上阅读,这里不做累述。




移植

准备工作

硬件:

  • STM32F103开发板,淘宝按价格倒序搜索购买
  • jlink,淘宝购买

软件:

  • 一个demo工程, 即为 用vscode + gcc进行 STM32 单片机开发(一)编译及调试 这篇文章中所描述的所有相关软件,包括: vscode、gcc编译器、stm32cubemx、cortex-debug(vscode插件)等。

第一步:下载rt-thread源码

rt-thread分为了“完整版”和“nano版”, 具体区别请自行前往官网查看。这里为了简单演示需要,我们只选择nano版本。

github上下载源码:https://github.com/RT-Thread/rtthread-nano

下载完成后,把源码拷贝到demo工程中,整个目录如下图所示:
使用vscode + gcc进行 STM32 单片机开发(二)gcc环境 移植rtthread_第1张图片

第二步:把rtthread源码添加到makefile进行编译

这一步可能需要一些makefile的基础知识,请自行百度,这里不再累述。

makefile中 加上如下几行:


#添加 rtthread *.c,*.s 源文件
RT_THREAD_SOURCES += \
$(wildcard rtthread-nano-master/rt-thread/src/*.c) \
$(wildcard rtthread-nano-master/rt-thread/libcpu/arm/cortex-m7/*.c) \
rtthread-nano-master/rt-thread/bsp/board.c

RT_THREAD_ASM = \
rtthread-nano-master/rt-thread/libcpu/arm/cortex-m7/context_gcc.S

OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(RT_THREAD_SOURCES:.c=.o)))
vpath %.s $(sort $(dir $(RT_THREAD_SOURCES)))
OBJECTS += $(addprefix $(BUILD_DIR)/,$(notdir $(RT_THREAD_ASM:.S=.o)))
vpath %.s $(sort $(dir $(RT_THREAD_ASM)))

#添加 *.h 头文件
C_INCLUDES += \
-Irtthread-nano-master/rt-thread/include \
-Irtthread-nano-master/rt-thread/bsp

#增加编译参数,否则编译不通过,详情见:https://github.com/RT-Thread/rt-thread/pull/5345
CFLAGS += -Wa,-mimplicit-it=thumb

添加完成后,输入命令make -j8,此时应该还不能通过编译,需要再进行代码级别的增删移植。




第三步:代码级别的增删移植

由于rt-thread nano是一个通用操作系统,其设计目的上是兼容尽可能多的MCU,但是实际上有一些困难,所以说就留了一些函数等,需要我们根据具体使用的MCU进行修改。

这里我使用的是STM32F103,所以需要进行的修改如下:

  1. PendSV_Handler 删除此函数,此函数由rt-thread实现
  2. SysTick_Handler删除此函数,并将函数内容复制粘贴到rtthread-nano-master\rt-thread\bsp\board.c中。
  3. HardFault_Handler删除此函数,此函数由rt-thread实现
  4. 参考此文档,修改startup_stm32h743xx.sbl main修改成bl entry
  5. 把默认的栈改大一点:rtthread-nano-master\rt-thread\bsp\rtconfig.hRT_MAIN_THREAD_STACK_SIZE

最后编译执行,即可执行。




注:这里的移植只是保证了rt-thraed的最最基本功能:多线程调度。
还有其他的一些基本功能没有移植,比如:自动初始化机制,heap内存堆机制,等机制还需要后续的更多移植

关于更多的移植,最近比较忙,这里我就不写了,有兴趣的欢迎在下面留言,要是有需要的话我再更新

你可能感兴趣的:(嵌入式,STM32,单片机,vscode,stm32)