每个传感器都会创建一个任务,在每个传感器的驱动文件的最末尾(在每个传感器对应的Init函数中),传感器的驱动文件的大部分就是这个任务的执行函数。
我随便拿一个传感器驱动文件出来,比如这是光流的驱动文件。
然后所有传感器的Init函数在drv_Main.cpp的init_drv_Main()函数中被调用,也就是调用init_drv_Main()这个函数就可以把所有的传感器任务都创建起来。
而init_drv_Main()函数又是在DriverInit_task()中被调用,在main.cpp里面
而DriverInit_task()又是一个任务的执行函数,而且这个任务是main函数里面唯一一个被创建的任务。!!!!!!!
控制的任务在这里 ctrl_Main.cpp的init_ControlSystem()函数里创建,而且这个任务的执行函数也在 ctrl_Main.cpp里面,感觉布局和传感器的驱动文件类似。
init_ControlSystem()函数又是在main.cpp里面的DriverInit_task()函数被调用,这个函数也即是main函数里面创建的唯一一个任务的执行函数。
我想起来了,传感器的值是通过传感器更新函数传给那个不开源的部分(叫姿态解算?)了,所以你找不到他通过什么在任务间传递传感器数据的。包括我再控制任务里面似乎也没有找到这方面获取数据的函数。
我怀疑那个传感器更新函数就是封装的一个消息发送函数,发送给对应的任务去处理的,我怀疑是这样的。
我还有一点不明白的地方就是串口驱动那里为什么会有那么多信号量的操作,难道操作系统下的串口程序也得改么。