紧急。”
“每个状态之间定义好转换条件,比如说,自检通过就进待机,待机收到起飞指令就进飞行,飞行检测到低电压就进紧急。”
林默站在他身后,低头看着那张图纸,点点头:
“不错,就是这个思路。”
“状态机的核心是三个东西,状态,事件,动作。”
“当前状态收到一个事件,执行对应的动作,然后迁移到下一个状态,你把这三个东西定义清楚了,程序就不会乱。”
李援朝连连点头,手里的笔飞快地在本子上记着。
“林默拉过一把椅子坐下,拿起桌上的一块飞控板,指着上面的主控芯片。
“还有你这程序架构,别把所有功能都塞在主循环里。”
“中断优先级要分清楚,姿态解算最高优先级,遥控指令第二,图传第三,日志记录最低。”
“姿态解算的周期要固定,比如说每十毫秒中断一次,算一次姿态,调一次PID,这样飞控的响应速度才能跟得上。”
“我之前是把所有东西都放主循环里。”
李援朝挠了挠头,有点不好意思,“跑一遍下来,姿态解算的时间不固定,有时候长有时候短,飞机就不太稳。”
“那是因为你主循环的执行时间不是恒定的。”
林默把飞控板放下,拿起笔在纸上画了一个时序图,“你设一个定时器中断,每五毫秒触发一次,中断服务程序里只做三件事。”
“读传感器,算姿态,调PID。主循环里跑那些不要求实时性的东西,比如图传,日志,遥控指令解析。”
“这样一来,姿态控制的实时性就保证了。”
李援朝盯着那个时序图看了半天,一拍大腿,“厂长,您这一说我就明白了!这就是把实时任务和非实时任务分开处理!”
林默笑了笑,“对,这叫前后台系统架构,前台是中断服务程序,处理紧急的事,后台是主循环,处理不紧急的事。”
“你把这个框架搭好了,后续加功能就不会乱。”
李援朝兴奋的手里的笔都快把本子戳穿了。
他在对微处理器和软件编程不算精通。
林默来了之后,他才开始系统地接触这些新东西
本章未完,请点击下一页继续阅读!