在学习IIC的时候,使用了多个IIC设备,单独都没有问题,整合在一个项目之后就会出现程序重启的问题
运行bh1750_example实例之后
find device——>open device——>bh1750_control()——>bh1750_set_power()——>bh1750_power_on()——>bh1750_write_cmd()——>rt_i2c_transfer()——>master_xfer()——rt_i2c_bus_device_ops()——>
一直运行到这里
还没有进入到i2c_bit_send_address函数里,此时就到了下面这里:
之后就是开始自动初始化,然后重新运行。
尝试了其他两个IIC运行是没有问题的,但是一旦和BH1750一起组合就产生了这个问题。
应该是你写的自动初始化的等级问题,导致I2c还未初始化就执行了BH1750的初始化,把BH1750的初始化调成INIT_APP_EXPORT试试
初始化顺序 | API | 描述 |
---|---|---|
1 | INIT_BOARD_EXPORT(fn) | 非常早期的初始化,此时调度器还未启动 |
2 | INIT_PREV_EXPORT(fn) | 主要是用于纯软件的初始化、没有太多依赖的函数 |
3 | INIT_DEVICE_EXPORT(fn) | 外设驱动初始化相关,比如网卡设备 |
4 | INIT_COMPONENT_EXPORT(fn) | 组件初始化,比如文件系统或者 LWIP |
5 | INIT_ENV_EXPORT(fn) | 系统环境初始化,比如挂载文件系统 |
6 | INIT_APP_EXPORT(fn) | 应用初始化,比如 GUI 应用 |
非常感谢,您说的很有道理,因为在控制台看到的是输出了自动化初始的内容然后输出rt thread的标志,导致误以为是在运行过程中调用。我再看一下是不是bh1750本身特性引起的重启