EIDE + STM32cubeMX RT-Thread nano 移植教程MDK版+GCC版

0. 声明

本系列文章禁止搬运/转载至CSDN, 禁止基于内容衍生的任何收费行为!!! 请各位遵守开源免费之精神.

stm32cubeMX工程创建

RTOS是基于 systick 做系统心跳, 为了避免存在debug时的灵异现象,最好给这边换一个timebase

RT-thread nano 选择

RT-thread nano 配置

外设初始化

工程生成小技巧

EIDE工程导入MDK 版

EIDE工程导入GCC 版

接下来开始GCC工程移植教程;

1.同样重新导入一个新的MDK文件工程

可能存在的报错:

若 你使用的是 arm-gcc v10.3 ; 可能会有报错:

error: unknown type name 'clock_t'

这个时候你可以打开time.h 并添加以下代码:

(比较建议的方式是升级你的默认gcc编译器版本)实测13 和14版都能正常编译,以下为升级指南教程:
https://www.cnblogs.com/waterguy/p/18905749

#if defined(__GNUC__) 
typedef long long time_t;
typedef long suseconds_t;
#endif/* arm-none-eabi-gcc */

临门一脚的补充(FinSH组件)

到上面一步后, 你会发现FinSH 组件无法正常使用, 这是因为.ld 文件还得加点料
在大概第91行的位置加入如下代码:
alt text

/*RT-thread GCC Add start*/    
    /* section information for finsh shell */
    . = ALIGN(4);
    __fsymtab_start = .;
    KEEP(*(FSymTab))
    __fsymtab_end = .;
    . = ALIGN(4);
    __vsymtab_start = .;
    KEEP(*(VSymTab))
    __vsymtab_end = .;
    . = ALIGN(4);

    /* section information for initial. */
    . = ALIGN(4);
    __rt_init_start = .;
    KEEP(*(SORT(.rti_fn*)))
    __rt_init_end = .;
    . = ALIGN(4);
/* RT-thread GCC Add end */

重新编译再下载(记得把while循环打印的代码注释掉, 否则串口会一直打印用不了FinSH)
下载后你就可以正常使用FinSH了
输入help命令可以查看支持什么命令:
alt text

posted @ 2025-06-01 00:00  划水佬  阅读(318)  评论(0)    收藏  举报