RT_Thread_内核包版本与芯片包版本不一致的编译报错排查

本文讲述了在升级STM32F4的SDK到5.0.2过程中遇到的两个问题:structserial_configure的flowcontrol成员缺失和RT_WEAK的编译错误。作者提供了修改代码和更新内核版本的解决方案,以及如何查找和适应新的内核包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

按时间线写的,建议看完,因为中间有的步骤不必重蹈覆辙。

1、安装RT_Thread Studio、STM32F4的SDK,新建工程编译报错error: 'struct serial_configure' has no member named 'flowcontrol'

1.1、报错含义

结构体struct serial_configure没有flowcontrol成员。

1.2、报错分析

报错代码所属的文件是STM43F4芯片SDK,但是类型定义struct serial_configure属于内核代码,内核的版本太低了。

1.3、解决方案

1.3.1、修改代码

不需要串口流控,注释掉报错的这段。(可以但不想这么做)

 1.3.2、更新内核版本

打开SDK管理器,找到“RT-Thread_Source_Code”,可以看到默认安装的是4.0.3和4.0.2版本,然后下载最新版5.0.2.

2、使用最新内核5.0.2,报错error: expected '=', ',', ';', 'asm' or '__attribute__' before 'void'

2.1、报错含义

void前有错误,缺少=,;asm __attribute__

2.2、报错分析

void前是RT_WEAK,编译器不认识,所以报错。

对比刚才的工程却没报这个错,现在内核是5.0.2,说明啥,内核又太新了,这个RT_WEAK在5.0.2中有改动。

2.3、解决方案

2.3.1、修改代码1——去掉RT_WEAK

RT_WEAK代表的是弱定义的函数,如果用户在别的地方重写就不调用RT_WEAK的这个函数,如果没有重写,因为有弱定义的函数也不会报错;

去掉RT_WEAK,需要自定义函数的时候就注释掉原来的,重新写,不冲突就行。

2.3.2、修改代码2——找到现在内核的弱定义

Ctrl+H,在工程中直接搜索“RT_WEAK”试试看,这个操作不一定成功,因为不知道改动成什么了,如果“RT_WEAK”搜不到我可能会尝试搜索“weak”。

可以看到内核中使用的是小写的rt_weak,但是芯片SDK使用的是大写的RT_WEAK,这就是错误的原因。

不想去修改内核的代码,那么可以:

  • 直接将报错的RT_WEAK改为小写的rt_weak;
  • 或者再加一个宏定义,#define RT_WEAK rt_weak,可以放在头文件board.h里;

2.3.3、找到匹配的内核包

其实在芯片SDK的“描述”里有写,只是没看英文,使用STM32F4_0.2.3需要更新内核为4.1.0;

3、扩展

更新是有规范的,官网能找到更新的记录,顺便也可以看看别的地方的更新内容,为下次报错做准备。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值