【飞控】DAY1飞控文件 、程序调度学习
作者:互联网
第一天记录做飞控的过程,以后打算做飞行控制的毕业设计。在这里记录学习的过程吧
飞控文件作用解析
下面是匿名飞控的几个主要文件
Startup : stm32的启动文件
main : 主程序
CMSIS :
HAL_Library :
FreeRTOS :
Drivers :
USBDevice :
FatFs :
Math :
Communication :
MeasurementSystem :
Filters : 这里主要是滤波处理,如卡尔曼滤波等等
DataStructure :
Modes : 模式
ControlSystem : 控制系统
任务调度模式
采用的是OS伪调度模式,根据定时器计数标志去安排飞行任务。
摘自知乎across:
刚接触飞控的时候,实验室在设计之初,为了方便快捷,软件系统的编写采用前后台操作的方式。这个方式的应用程序是在放在main主函数里面无限循环,调用相应的处理子函数。这称为后台程序。而前台程序指的就是中断程序处理异步触发事件的程序。故前台程序称为中断级程序,而后台程序称为任务级程序。因此有些固定周期执行的任务都要靠中断服务程序来完成,以保证时间的精确性。但是在中断处理程序中只标记事件的发生,不做任何处理,转而由后台系统调度处理,这是为了避免在中断程序执行时间过长影响后续和其他中断事件。
由于是用在飞行控制系统中,对整个系统的实时性有着很高的要求,如果逻辑和时序出现偏差,将出现无法估计的严重后果。而在初始开发过程中,发现采用此前后台系统带来两大问题:
1、设计不当的话,比如某个周期的函数执行超时,后面所有的程序都会受到影响。如果飞控程序执行时间变得不够准确,不利于对飞行器的控制,严重时发生飞机失控的现象。
2、移植性和扩展性差,给整个程序后续改动和维护带来不便,由于各种任务都是相关的子函数,往往一个任务需要调用多个子函数。在程序改动或者维护的时候变得非常繁琐复杂。经常由于忽略某一细节而导致功能无法实现,最后导致程序的可读性降低,不利于他人做程序修改。
最近几年也接触了一些开源飞控,看了有关带OS的飞控设计。这种设计方法是在某一操作系统上进行二次开发,OS通过一个内核的调度来管理CPU,使得所有的模块也就是任务都能正常运行,达到相对意义的“并行”。同时采用基于优先级的可剥夺性调度算法来保证实时性。RTOS 将应用层软件分成多个任务,简化了应用软件的设计,同时使得飞行控制的实时性得到保证。
个人偏好,其实比较喜欢裸机的方案。飞控其实说到底不是一个软件功能特别复杂的产品,所以从开发角度来讲,事先定义好相应的功能,没必要经常的扩展设计,裸机代码在平时的调试也有一定的优势。飞控在整个飞行平台的开发中,可以专注于负责飞行部分,可与其他设备进行通信,接收飞行指令即可。
作者:across
链接:https://zhuanlan.zhihu.com/p/24154083
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
例如:将程序的执行周期分为5ms, 10ms, 25ms, 50ms, 100ms的任务。
如果
标签:中断,程序,调度,DAY1,任务,飞行,子函数,飞控 来源: https://blog.csdn.net/weixin_42106287/article/details/110005042