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

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

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、扩展

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/225361.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解析和存储优化的批量爬虫采集策略

如果你正在进行批量爬虫采集工作,并且想要优化解析和存储过程,提高采集效率和稳定性,那么本文将为你介绍一些实用的策略和技巧。解析和存储是批量爬虫采集中不可忽视的重要环节,其效率和质量对整个采集系统的性能至关重要。在下面…

【TinyALSA全解析(三)】tinyplay、tincap、pcm_open源码解析

tinyplay、tincap、pcm_open源码解析 一、本文的目的二、tinyplay.c源码分析三、tinycap.c源码分析四、pcm.c如何调度到Linux Kernel4.1 pcm_open解析4.1.1 pcm_open的主要流程4.1.2 流程说明4.1.3 调用方法 4.2 pcm_write解析 /*********************************************…

C语言:编程实现1!+2!+3!+4!+……+n!

分析&#xff1a; #include<stdio.h>//这是一个预处理指令&#xff0c;将stdio.h头文件包含到程序中&#xff0c;以便使用输入输出函数。 int main()//这是程序的主函数&#xff0c;是程序执行的入口点。 int i, a 1, t 0, n;//定义了整型变量i、a、t和n。其中&#x…

本机putty无法连接到虚拟机中kali操作系统

sudo apt-get install -y openssh-server安装一下软件&#xff0c;我这里已经安装好了&#xff0c;所以没有安装过程了。 firewall-cmd --zonepublic --remove-port22/tcp --permanent想要打开22端口&#xff0c;发现报错如下&#xff1a; Could not find command-not-found…

在线陪诊系统: 医疗科技的崭新前沿

在医学科技的快速发展中&#xff0c;在线陪诊系统正成为医疗服务领域的创新力量。通过结合互联网和先进的远程技术&#xff0c;这一系统为患者和医生提供了更为便捷、高效的医疗体验。本文将深入探讨在线陪诊系统的技术背后的核心代码和实现原理。 技术背后的关键代码 在线陪…

Linux文件与路径

Linux文件与路径 1、文件结构 ​ Windows和Linux文件系统区别 ​ 在windows平台下&#xff0c;打开“此电脑”&#xff0c;我们可以看到盘符分区 ​ 每个驱动器都有自己的根目录结构&#xff0c;这样形成了多个树并列的情形 ​ 但是在 Linux 下&#xff0c;我们是看不到这些…

C++:对象模型和this指针

对象模型&#xff1a; 成员变量和成员函数分开存储 在C中&#xff0c;类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 空对象占用空间&#xff1a; 1字节 C编译器会给每个空对象也分配一个字节空间&#xff0c;是为了区分空对象占内存的位置 每个…

C++不同平台下的RTTI实现

给定一个含有虚函数的对象的地址&#xff0c;找到对应的类名&#xff0c;不同平台下方法也不同&#xff0c;这是由于RTTI实现并没有统一的标准。 Linux&#xff1a; #include <iostream> #include <typeinfo>class Person { public:virtual void func(){std::cout…

2023.11.28-电商平台建设03 - 大数据调优手段

1.优化手段 1.1分桶表 HIVE的分桶本质上就是MR的分区操作 建表语句: create table 表名(字段 类型,.... ) clustered by(分桶字段) [sorted by (字段 [asc | desc])] into N buckets --- 定义分桶表核心语句 row format...... 分桶的作用 1) 进行数据采样工作 1.1) …

C++ Boost 异步网络编程基础

Boost库为C提供了强大的支持&#xff0c;尤其在多线程和网络编程方面。其中&#xff0c;Boost.Asio库是一个基于前摄器设计模式的库&#xff0c;用于实现高并发和网络相关的开发。Boost.Asio核心类是io_service&#xff0c;它相当于前摄模式下的Proactor角色。所有的IO操作都需…

STM32CubeIDE(CUBE-MX hal库)----串口通信

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、CUBE-MX可视化配置二、发送数据和接收数据1.HAL库串口的阻塞模式和非阻塞模式2.HAL库串口阻塞模式数据发送函数3.HAL库串口阻塞模式数据接收函数4.HAL库串口…

氯碱工业盐水精制除钙镁树脂

#氯碱工业盐水精制除钙镁树脂 ​氯碱工业是生产烧碱、氯气、氢气及其衍生产品的基础化工工业之一&#xff0c;在经济发展中具有重要地位&#xff0c;对国防建设和经济具有重要作用。 目前&#xff0c;氯碱工业是采用电解饱和食盐水的方法来制取&#xff0c;无论氯碱工业采用何种…