【GCC-RT-Thread】gcc交叉编译 STM32 - RT-Thread

【GCC-RT-Thread】gcc交叉编译 STM32 - RT-Thread

最近在公司实习,公司想将原来在Windows keil上开发的项目移到Linux,并上RTT操作系统,最近就被安排做了这件事。

首先

下载
RT-Thread Nano内核

我使用的交叉编译器:gcc-arm-none-eabi-10.3-2021.10
编译器下载地址
gcc-arm-none-eabi 介绍及安装步骤
注:选择合适的gcc交叉编译器很重要,最早踩坑rtt不启动,就是因为gcc交叉编译器版本所致

正式移植开始

1.首先在工程目录下建立RT-Thread文件夹

2.在下载好的Nano内核文件中拷贝

include libcpu src components 四个文件 到工程RT-Thread下

3.删除掉libcpu中没用的文件

eg:我使用F429 所以只保留 arm 文件下 的 cortex-m4
注意:在移植contex-m4中 context_gcc.S文件时需要将此文件重命名为context_gcc.s。
启动文件一般是由汇编写成,此处需要注意的是,汇编文件的格式有.S和.s之分:
.S:表明文件中含有预处理指令(比如#define),需要先进行处理;
.s:表明文件不需要处理,可以直接编译;
之前我们添加的启动文件是小写.s,所以直接进行编译,
另外说一下,如果使用的是.S文件,那么需要带上-x assembler-with-cpp参数。

4.拷贝内核bsp文件夹下的 board.c rtconfig.h 文件 到工程RT-Thread下

如下图:
在这里插入图片描述

5.将文件添加到工程目录,添加头文件包含

gcc编译包含c文件:
RT-Thread/board.c \
RT-Thread/src/clock.c \
RT-Thread/src/components.c \
RT-Thread/src/cpu.c \
RT-Thread/src/idle.c \
RT-Thread/src/ipc.c \
RT-Thread/src/irq.c \
RT-Thread/src/kservice.c \
RT-Thread/src/mem.c \
RT-Thread/src/memheap.c \
RT-Thread/src/mempool.c \
RT-Thread/src/object.c \
RT-Thread/src/scheduler.c \
RT-Thread/src/slab.c \
RT-Thread/src/thread.c \
RT-Thread/src/timer.c \
RT-Thread/components/device/device.c \
RT-Thread/libcpu/arm/cortex-m4/cpuport.c   
include文件:
-IRT-Thread \
-IRT-Thread/include \
-IRT-Thread/include/libc \
-IRT-Thread/libcpu/arm/cortex-m4 
汇编文件:
RT-Thread/libcpu/arm/cortex-m4/context_gcc.s

6.Makefile中修改 FLOAT-ABI = -mfloat-abi=soft

在这里插入图片描述

7.编译 ----> 报错 重复定义

在 it.c 文件下注释掉 HardFault_Handler、PendSV_Handler和SysTick_Handler
在这里插入图片描述
在这里插入图片描述

8.startup()程序跳转:

芯片在 KEIL MDK 与 IAR 下的启动文件不用做修改,
会自动转到 RT-Thread 系统启动函数 rtthread_startup() 。
GCC 下的启动文件需要修改,
让其跳转到 RT-Thread 提供的 entry() 函数,
其中 entry() 函数调用了
RT-Thread 系统启动函数 rtthread_startup()。
/修改前:
bl SystemInit
bl main

//修改后:
bl SystemInit
bl entry /* 修改此处,由 main 改为 entry */
在这里插入图片描述

然后rtt 就可以正常的启动了,接下来需要做的就是在 board.c中初始化时钟 以及 system tick,并将硬件初始化移到 board.c中,在main.c中创建线程。

具体操作详见 rtt 官网手册 线程静态、动态创建

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值