问题概述:使用RT_thread操作系统注册设备后,使用时rt_thread_control操作,但程序却跑到rt_thread_read的底层函数中。
问题描述:环境:RT_thread操作系统,芯片:STM32F407zgt6,使用设备方式创建一个驱动文件,用keil将该驱动文件连接为.lib,使用.lib文件进行操作,设备注册成功且能够find到,使用rt_thread_control操作驱动时,发现执行的是rt_thread_read的内容,使用rt_thread_write时,指向NULL,这导致程序运行不正常,如果将.lib文
rt_err_t rt_mvb_device_init(struct rt_device *dev, const char *name)
{
dev->init = RT_NULL;
dev->open = RT_NULL;
dev->close = RT_NULL;
dev->read = recv_data;
dev->write = put_data;
dev->control = control;
/* register to device manager */
return rt_device_register(dev, name, RT_DEVICE_FLAG_RDWR);
}
根据你提供的信息,问题可能出现在驱动程序的控制函数(control function)中。当你使用 rt_thread_control() 操作时,实际上是在调用驱动程序的控制函数。如果控制函数没有正确实现,则会导致程序运行不正常。
请检查你的控制函数是否正确实现,并且在函数中判断传入的控制命令,以便正确处理命令。同时,确保在注册设备时正确设置了控制函数指针。
另外,你提到使用 rt_thread_write() 时指向 NULL,这可能是因为你没有为设备设置 write() 函数。请确保在注册设备时正确设置了 write() 函数指针。
最后,建议你使用调试工具(如printf)来进一步定位问题,并且参考RT_thread操作系统文档进行排查。