发布时间:2022-07-07 07:22:02 来源:kok下载官网app 作者:KOK官方合作伙伴
,程序设计工作量也不小。如何方便快捷的移植、开发调试以及维护,可以实现是程序设计人员追求的缩短设计周期的目标。
跑系统的单片机可以更有效支持多任务,完成更加复杂的任务,但需要更大的存储空间用于系统程序和用户程序;裸跑的单片机只能进行单任务,对存储空间需求较低。在这里主要研究一种多任务程序框架设计,让裸奔的单片机跑出操作系统的感觉,单片机虽然是裸机奔跑,但是往往现实的需要决定了我们必须跑出操作系统的姿态——多任务程序。
系统实现多任务,最重要的特点是分时和消息传递与处理。引用一个网友的总结:stateMachine +timerTick + queue。
queue,在设计框架时需要设计一个消息队列贯穿整个系统,把这个队列机制做成通用模块,在不同的程序执行模块中调用。消息队列用于缓冲事件,事件不知道什么时候会到来,也不能保证来了就能迅速得到处理,使用消息队列,可以保证每个事件都能处理到。消息通常分为两种类型:①外部事件收集,然后存储到队列,如按键、IO 中断、时钟任务等硬件发出;②在任务处理过程中,一个任务触发新的任务,例如在蓝牙遥控器中,接收解析串口数据的任务中发出按键消息。timerTick,系统的时钟基准。用一个定时器来建立通用定时器任务,管理不同任务相关的多个定时器,在定时到达时,由定时器任务发出消息。
stateMachine,任务收到消息后,根据当前状态决定如何处理消息。
我们以包含按键开关一个定时1 s 的LED 灯闪烁为例,示例包含框架的全部内容。
1)顶层主程序设计,系统开始进行硬件初始化、任务初始化、时钟初始化;然后在1 个循环中不停地进行循环事件收集、时间事件收集和处理、消息队列时间处理。
2)在时钟基准的设置上,建立1 个1 ms 的定时器,在定时器中断里判断开启的定时任务是否发生,满足条件设置定时标志,同时关闭此项定时任务。
3)循环事件收集:在循环中判断是否有按键按下,如有按键按下,发送按键消息。
1)添加消息定义:在消息定义enumEventList 里面加入串口功能定义。
2)添加消息收集程序:在串口中断里接收数据,并把数据写到串口数据缓冲器,在循环事件收集里面进行串口数据分析,根据收到的数据完整性和协议分析,发出串口功能的消息到消息队列。
整体看来我们的程序框架就成了通用的模板了,根据自己选定的MCU,选个定时器,再添加自己的事件收集、事件处理以及时间任务即可,非常灵活方便实用。
[1] 李宁.基于MDK的STM32处理器开发应用[M].北京:北京航空航天大学出版社,2008.
[3] 孙涵芳,徐爱卿.MCS-51/96系列单片机原理与应用[M].北京:北京航空航天大学出版社,1988.
[4] 郭天祥.新概念51单片机C语言教程:入门、提高、开发、拓展全攻略.北京:电子工业出版社,2009.
[5] 徐爱钧.Keil C51单片机高级语言应用编程技术.北京:电子工业出版社,2015.
子公司网站链接
重庆西部汽车试验场 |国家机动车质量监督检验中心(重庆) |汽车噪声振和安全技术国家重点实验室 |重庆凯瑞汽车试验设备开发有限公司 |苏州凯瑞测试研发有限公司 |浙江分公司 |汽车工程学报
行业链接
节能汽车网 |国务院国有资产监督管 |国家科学技术部 |国家发展和改革委员会 |中国实验室国家认可委 |重庆市科学技术局 |重庆市政府公众信息网 |中国汽车工程学会 |中国汽车工业协会 |中国机械工业联合会
业务伙伴