Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
PIN_GPIO通用驱动
AT32F437-START开发板采用RT-Thread5.0.0版本,发现PIN设备驱动操作方法与实现函数参数不匹配的问题?
发布于 2023-03-01 14:04:33 浏览:514
订阅该版
[tocm] #### 问题简述 下载2023-3-1日github仓库master分支的版本,在AT32F437-START开发板上使用IAR编译project工程会报“结构体类型不匹配的问题”,定位原因到drv_gpio.c与pin.h文件中。 #### 详细说明 下载github仓库上master最新分支,时间为2023年3月1日09:53。   使用`scons --dist`生成工程,在env工具中设置好IAR和MDK5的路径,只开启了内核+shell+pin,如下图所示。设置好template工程的参数后,编译project工程。    产生如下报错。 ```Plain Error[Pe144]: a value of type "void (*)(rt_device_t, rt_base_t, rt_base_t)" cannot be used to initialize an entity of type "void (*)(struct rt_device *, rt_base_t, uint8_t)" C:\Users\JinHuan\Desktop\dist\project\libraries\rt_drivers\drv_gpio.c 482 ```  #### 问题定位 报错位于drv_gpio.c文件中,代码部分为: ```C const static struct rt_pin_ops _at32_pin_ops = { at32_pin_mode, at32_pin_write, at32_pin_read, at32_pin_attach_irq, at32_pin_dettach_irq, at32_pin_irq_enable, at32_pin_get, }; ``` 查看pin.h文件中`struct rt_pin_ops` 原型: ```C struct rt_pin_ops { void (*pin_mode)(struct rt_device *device, rt_base_t pin, rt_uint8_t mode); void (*pin_write)(struct rt_device *device, rt_base_t pin, rt_uint8_t value); rt_int8_t (*pin_read)(struct rt_device *device, rt_base_t pin); rt_err_t (*pin_attach_irq)(struct rt_device *device, rt_base_t pin, rt_uint8_t mode, void (*hdr)(void *args), void *args); rt_err_t (*pin_detach_irq)(struct rt_device *device, rt_base_t pin); rt_err_t (*pin_irq_enable)(struct rt_device *device, rt_base_t pin, rt_uint8_t enabled); rt_base_t (*pin_get)(const char *name); }; ``` 查看drv_gpio.c文件,上述操作方法中的实现函数原型如下: ```C static void at32_pin_mode(rt_device_t dev, rt_base_t pin, rt_base_t mode) static void at32_pin_write(rt_device_t dev, rt_base_t pin, rt_base_t value) static int at32_pin_read(rt_device_t dev, rt_base_t pin) static rt_err_t at32_pin_attach_irq(struct rt_device *device, rt_int32_t pin, rt_uint32_t mode, void (*hdr)(void *args), void *args) static rt_err_t at32_pin_dettach_irq(struct rt_device *device, rt_int32_t pin) static rt_err_t at32_pin_irq_enable(struct rt_device *device, rt_base_t pin, rt_uint32_t enabled) static rt_base_t at32_pin_get(const char *name) ``` 可以看到有以下不匹配的地方: 2. `at32_pin_mode`其中的`mode`参数类型不一致,一个是`rt_uint8_t` ,一个是`rt_base_t`。 3. `at32_pin_write`其中的`value`参数类型不一致,一个是`rt_uint8_t` ,一个是`rt_base_t`。 4. `at32_pin_read`返回值不一样,一个是`rt_int8_t`,一个是`int`。 5. `at32_pin_attach_irq` 其中的`pin`参数类型不一致,一个是`rt_base_t`,一个是`rt_int32_t`。其中的`mode`参数类型不一样,一个是`rt_uint8_t` ,一个是`rt_uint32_t` 。 6. `at32_pin_dettach_irq`其中的`pin`参数类型不一样,一个是`rt_base_t`,一个是`rt_uint32_t` 。 7. `at32_pin_irq_enable`其中的`enabled参数`类型不一样,一个是`rt_uint8_t` ,一个是`rt_uint32_t` 。 rt_def.h文件中有关RT-Thread变量类型定义如下: ```C /* RT-Thread basic data type definitions */ typedef int rt_bool_t; /**< boolean type */ typedef signed long rt_base_t; /**< Nbit CPU related date type */ typedef unsigned long rt_ubase_t; /**< Nbit unsigned CPU related data type */ typedef signed char rt_int8_t; /**< 8bit integer type */ typedef signed short rt_int16_t; /**< 16bit integer type */ typedef signed int rt_int32_t; /**< 32bit integer type */ typedef unsigned char rt_uint8_t; /**< 8bit unsigned integer type */ typedef unsigned short rt_uint16_t; /**< 16bit unsigned integer type */ typedef unsigned int rt_uint32_t; /**< 32bit unsigned integer type */ ``` #### 问题解决 目前把drv_gpio.c中下列函数的形参或返回值修改为跟`rt_pin_ops`操作方法中的成员形参与返回值一致。重新修改之后的drv_gpio.c中函数原型如下: ```C static void at32_pin_mode(rt_device_t dev, rt_base_t pin, rt_uint8_t mode) static void at32_pin_write(rt_device_t dev, rt_base_t pin, rt_uint8_t value) static rt_int8_t at32_pin_read(rt_device_t dev, rt_base_t pin) static rt_err_t at32_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 at32_pin_dettach_irq(struct rt_device *device, rt_base_t pin) static rt_err_t at32_pin_irq_enable(struct rt_device *device, rt_base_t pin, rt_uint8_t enabled) static rt_base_t at32_pin_get(const char *name) ``` #### 工程源码 project_0为未修改的工程,project_1为修改drv_gpio.c中相关函数类型的工程。 - [project_0.7z](https://club.rt-thread.org/file_download/b19564e53172970d) - [project_1.7z](https://club.rt-thread.org/file_download/08df2d5f2ef79e01)
查看更多
0
个回答
默认排序
按发布时间排序
暂无答案,快来添加答案吧
撰写答案
登录
注册新账号
关注者
0
被浏览
514
关于作者
JinHuan
这家伙很懒,什么也没写!
提问
1
回答
0
被采纳
0
关注TA
发私信
相关问题
1
PIN绑定引脚中断回调函数没有反应
2
rtthread PIN设备
3
关于引脚宏定义的一些疑惑
4
关于gpio引脚实在不懂了,求大家帮助
5
GET_PIN(A, 1) 提示 'A' 未定义
6
关于4.0.2版本中STM32的PIN设备外部中断的相关问题
7
自己按照官方手册 在drv_gpio.c里面找不到PIN脚信息
8
关于多个PIN设备同时读写的问题
9
翻车在一个GPIO上 开启pin中断 导致程序卡死
10
外部中断回调函数执行问题
推荐文章
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组件
最新文章
1
ART-Pi2快速上手--点灯
2
ART-Pi2移植CMSIS-DAP(基于CherryUSB协议栈)
3
RT-thred的stm32h723对应bsp包CubeMX添加其他外设报错
4
RT-Thread中的time溢出问题,时间戳溢出,解决方法
5
ART-PI使用env驱动ETH网卡,pc和板子可以ping通
热门标签
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
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
10
个答案
2
次被采纳
xiaorui
3
个答案
2
次被采纳
winfeng
2
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
KunYi
8
个答案
1
次被采纳
本月文章贡献
lizimu
2
篇文章
7
次点赞
catcatbing
2
篇文章
5
次点赞
swet123
1
篇文章
4
次点赞
Days
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部