嵌入式技术论坛
直播中

糖栗子

8年用户 666经验值
擅长:MEMS/传感技术
私信 关注
[问答]

rt_pin_get()这个返回的引脚号不对不知道为什么

如图,rt_pin_get();这个返回的引脚号不对,不知道为什么,#define LED_PIN GET_PIN(E,2),这么获取的引脚号是对的。

1.jpg

2.jpg

回帖(5)

李俊

2022-9-26 14:22:16
mark,坐等原因
250 -6 这俩数看着不一样,但极有可能是一样的,只不过,第二次把 250 先转换成有符号 char 整型了,然后再扩展到有符号 int 整型,打印出来的值就变负数了。

那么,为什么是 250(-6) ?

rt_base_t rt_pin_get(const char *name)
{
    RT_ASSERT(_hw_pin.ops != RT_NULL);
    RT_ASSERT(name[0] == 'P');
    if(_hw_pin.ops->pin_get == RT_NULL)
    {
        return -RT_ENOSYS;
    }
    return _hw_pin.ops->pin_get(name);
}
RT_ENOSYS 定义的值就是6。return -RT_ENOSYS 返回的就是 -6。还真的是没实现这个接口。
你用的版本很早了吧。 drv_gpio.c 文件第一个函数 stm32_pin_get 就是实现。
举报

李俊

2022-9-26 14:22:26
从这个问题,又可以看出来,返回值的处理是迷惑的。
返回非负数时表示引脚号。返回负数时,表示函数执行错误了。

个人认为 rt_pin_get 的实现是可以与芯片无关的,rt-thread 使用宝典(2021-1210更新) 这里提到的计算 pin 号的心算公式,可以适用到绝大多数的芯片上。
举报

刘桂英

2022-9-26 14:22:44
在drv_gpio.c驱动里面添加对应的pin_get操作
举报

李玉兰

2022-9-26 14:22:50
调试状态下,单步执行就可以知道哪里有问题了
举报

陈杰

2022-9-26 14:22:57
你看一下gpio的驱动是否支持这个方法,目前这个方法只支持了stm32等少数系列bsp
举报

更多回帖

发帖
×
20
完善资料,
赚取积分