嵌入式技术论坛
直播中

fansz

9年用户 1315经验值
擅长:制造/封装
私信 关注
[问答]

RTT系统初始化后_hw_pin指针总是为空这是为什么呢

用RTT Studio建立项目,设备是STM32WB55 Nucleo。

按照RTT的流程,在rtthread_startup()函数中已经有对board的各种接口的初始化。

main()函数中,直接开展应用操作。

其中rt_hw_board_init()函数(文件 drv_common.c中)已经是改写成STM32对应的函数。

宏定义RT_USING_PIN在rtconfig.h文件中也已经定义。

继续调用rt_hw_pin_init(void)(drv_gpio.c文件中),这个函数中,根据配置打开各个端口,并注册硬件pin设备。

rt_device_pin_register("pin", &_stm32_pin_ops, RT_NULL);

这个函数注册pin设备时,传递了_stm32_pin_ops 结构地址,这个是在这个文件中定义的局部变量。

再下层函数将这个ops地址付给_hw_pin.ops.

一切看起来都非常OK。

但是,main()函数里,执行rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);

也就是调用

void rt_pin_mode(rt_base_t pin, rt_base_t mode)

{

RT_ASSERT(_hw_pin.ops != RT_NULL);

_hw_pin.ops->pin_mode(&_hw_pin.parent, pin, mode);

}

发现_hw_pin.ops是空(RT_NULL)

我觉得最大可能性,前面初始化函数就没有执行。

可惜我没能在初始化部分单步跟踪,断点调试。

百思不得其解!

继续求教!请多指导!

更多回帖

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