Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread Studio
RT-Thread studio的驱动5.1.0报错修改
发布于 2025-05-03 13:48:03 浏览:32
订阅该版
[tocm] RT-Thread studio的驱动5.1.0报错修改 --- # 前言 我发现,好像很多芯片使用最新的驱动包5.1.0都会有报错和警告(5以上好像都有些问题),于是参考多方资料,终于修改成功。 --- # 开始修复  接着点击重新构建项目会有如下报错  我们定位到第一个报错  先不管错误信息,这个好像有点不准,看官方手册,将变量RT_WEAK 改成了小写,而这里没有更改,那我们改成小写再编译一下。 > 5.0.0 RT_WEAK 改为 rt_weak ALIGN 改为 rt_align 新增 driver.c 文件 scheduler.c 分为 scheduler_mp.c(SMP 相关) 和 scheduler_up.c(单核) 这里我们要用重新构建,也就是锤头图标那一个,。 在RT-Thread Studio中,构建(Build)和重新构建(Rebuild)是两个不同的操作,它们的主要区别在于执行的操作范围和目的。 **1. 构建(Build):** 构建操作会编译整个工程,但不会重新编译那些没有发生变化的文件。这意味着,如果某些源文件或头文件没有被修改,构建过程会跳过这些文件的编译,从而节省时间和资源。构建操作通常用于在开发过程中,当你修改了部分代码并希望快速看到结果时。 **2. 重新构建(Rebuild):** 重新构建操作会强制编译整个工程,无论文件是否发生变化。这意味着,它会重新编译所有的源文件和头文件,确保生成的可执行文件是最新的。重新构建操作通常用于以下情况: - 初次编译整个工程 - 需要确保所有文件都是最新版本时 - 需要清除旧的编译结果,避免潜在的编译错误 排查警告需要用重新构建,否则不会显示警告,结果如下  可以看到错误信息没有了,只剩警告了,看警告信息,警告几乎都是函数未声明,经过我对很多函数的溯源,发现文件rtsched.h(RT_derive5.1.0\rt-thread\include\rtsched.h)里有一段预处理指令没有编译  而这里面包括了很多前面警告没有声明函数的声明,那我们通过定义__RT_KERNEL_SOURCE__或者__RT_IPC_SOURCE__宏就能编译这一段代码,于是我在rtsched.h加入了一句预定义`#define __RT_KERNEL_SOURCE__`,如下。  编译后发现警告大幅度减少  接着继续定位,发现这里的报错是类型不兼容  我们找到结构体rt_pin_ops的声明,然后也看一下第一个警告函数的声明  ```c static void stm32_pin_mode(rt_device_t dev, rt_base_t pin, rt_base_t mode) ``` 发现函数stm32_pin_mode第三个新参类型与rt_pin_ops定义的函数新参类型确实不同,那我们就保持一致就行。rt_base_t 与rt_uint8_t保留哪一个都行,在这里我是保留rt_pin_ops结构体的声明,改变了_stm32_pin_ops里的函数声明。应为我发现函数声明的形参需求的内存都很大,而实际都用不了,rt_pin_ops结构体的声明更加贴切。结果如下 ```c static void stm32_pin_mode(rt_device_t dev, rt_base_t pin, rt_uint8_t mode) static void stm32_pin_write(rt_device_t dev, rt_base_t pin, rt_uint8_t value) static rt_err_t stm32_pin_attach_irq(struct rt_device *device, rt_base_t pin, rt_uint8_t mode, void (*hdr)(void *args), void *args) static rt_err_t stm32_pin_irq_enable(struct rt_device *device, rt_base_t pin, rt_uint8_t enabled) ``` 继续编译,警告更少了,而且还是同样问题,  经过查看发现,下面的返回类型不一样。经过查找发现,rt_size_t 与rt_ssize_t 类型就是有无符号的区别,这里我保留了rt_size_t ,因为这个定义使用面更广 ```c static rt_size_t stm32_dma_transmit(struct rt_serial_device *serial, rt_uint8_t *buf, rt_size_t size, int direction) rt_ssize_t (*dma_transmit)(struct rt_serial_device *serial, rt_uint8_t *buf, rt_size_t size, int direction); ``` ```bash rt_size_t = long unsigned int rt_ssize_t = signed long ``` 索引的时候会发现有两个文件serial.h与serial_v2.h都有rt_uart_ops的声明,这两个文件工程会根据使用的串口版本是v1还是v2声明其中一个,默认v1,也就是声明serial.h,那这里我们两个都该就行。 继续编译  这行代码#pragma GCC diagnostic ignored “-Wimplicit-fallthrough” 的用途是让 GCC 编译器忽略 switch 语句里隐式贯穿(fallthrough)所产生的警告。隐式贯穿指的是在 switch 语句中,某个 case 分支结束时没有 break 语句,从而导致程序流程直接进入下一个 case 分支。 注释掉这一句//#pragma GCC diagnostic ignored "-Wimplicit-fallthrough"整个工程0错误0警告了 
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
20101150108
这家伙很懒,什么也没写!
文章
2
回答
0
被采纳
0
关注TA
发私信
相关文章
1
rt_thread studio 啥时候能用呢
2
RT_Thread使用反馈帖子
3
RTT studio 下的 AT指令问题。
4
什么时候RTT Sdudio支持Ubuntu,Deepin和UOS操作系统
5
rt thread Studio 关于J-LINK下载问题
6
RT-Thread studio 调试设置问题
7
RTT-Studio 如何设置调试配置参数?
8
rt_thread studio 软件包配置
9
RT-Studio目前只能开发STM32的项目吗?
10
rtt studio 生成hex名字修改
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
cubemx
I2C_IIC
UART
ESP8266
WIZnet_W5500
BSP
ota在线升级
PWM
flash
packages_软件包
freemodbus
潘多拉开发板_Pandora
ADC
GD32
定时器
flashDB
编译报错
keil_MDK
socket
中断
rt_mq_消息队列_msg_queue
Debug
ulog
SFUD
msh
C++_cpp
at_device
本月问答贡献
出出啊
1524
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
818
个答案
179
次被采纳
crystal266
555
个答案
162
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
3
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
10
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部