单片机软件设计思路
交流会
前言
这里主要是和大家交流一下单片机模块化设计思路以及一些心得和体会,也是大家互相学习,共同提高的一个平台。在软件设计中,只有把思路理顺了,我们才可以从具体的程序之中跳出来设计程序。站得高才能看得远。
如果有哪些不足,就请各位多多指教。
主题概述:
主题一软件结构整体划分
清楚你写的软件部分在程序中的地位,哪个部分该怎么调用另一个部分的功能,该怎么调用。
主题二模块文件组成
规范的文件结构让你很清楚知道本文件的作用,提供给外部的接口。
主题三状态转移思想(多任务设计)
怎样具体去有目的的去规划去写一个程序,怎样最大效率去控制一个程序。
主题四中断、缓冲的作用和地位
讲述怎样控制实时事件,怎样协调程序的流程。
主题五消息驱动
信息在各个任务之间互相流动的保证,让模块功能独立,是模块化设计的基础。
主题六模块的层次关系及模块化设计
模块的调用关系及怎样模块化。
主题七程序的测试和可测试性
如何在模块化设计下测试模块程序。
主题八杂谈
谈设计的一些理论和方法,思想等等。
主题一软件结构整体划分
按照模块的特性来分的话,大概可以分为五种:
系统模块,驱动模块,功能模块,综合模块,资源模块。
驱动模块:是最低层的模块,主要是硬件的驱动,大体有:定时器硬件部分驱动,串口驱动,I2C驱动,SPI驱动,LCD驱动,LED驱动,键盘扫描的IO 硬件扫描部分驱动,AD驱动,DA驱动,……。其它模块,即使是系统模块,也要使用一部分驱动模块的内容。
系统模块:这个内容很广泛,是建立在驱动模块基础上的资源管理及信息管理部分,具有承上启下,连接功能模块和驱动模块的作用。大体有:内存分配管理,消息分发,系统时间管理,算法库,菜单管理,窗口管理,串口协议解析,资源管理等等。
综合模块,主要是多个主任务综合功能的任务。比如:综合计算,数据分析处理等。主要特点就是它的信息必须从各功能模块中提取,再集中处理。
功能模块:基本上按一个主任务来划分,主要是用户操作和显示部分,比如:按键处理,各个参数显示,
设置,报警信息显示,波形显示,菜单显示,设置,打印,历史记录,趋势图…..,要实现功能的任务几乎可以单独看待为一个任务或几个子任务合并的主任务都可以看作一个功能模块。
资源模块:顾名思义就是集中包含系统使用的资源部分(数据),主要在有图形系统中起作用,把字符串,窗口,按纽,图片,字库等作为单独资源文件来管理,可以随时修改资源文件来修改界面效果。
在CPU中的地位和关系大致如下:
*至于这些模块或任务之间如何通信,如果不需要即时处理或需要延时处理的,主要靠发送消息来处理,否则的话直接调用。
注:
1.将操作和显示部分划为功能模块主要是从用户使用的角度出发,要具有哪些功能,这样划分更清晰,简单。不然的话,功能模块,系统模块,综合模块将很难划分。模块化设计的产品举例
2.建议将系统模块,综合模块合二为一,这样划分更容易:
底层(驱动模块)
中层(系统模块,资源模块)
上层(功能模块)
主题二模块文件组成
一个模块文件可以只包含一个任务文件,也可以包含N个任务文件。
一个任务就是一个C文件,有任务的完整结构。
一个任务C文件的结构
一个完整的任务C文件结构应该包含:
初始化函数:主要是本任务使用的资源初始化。比如:该任务定义的全局变量初始化,各类指针初始化,硬件初始化。提供开始工作的条件。
销毁函数:类似C++中的析构函数,将初始化函数中分配的资源和硬件撤消,为恢复系统初始状态的工作。在有节电处理的结构中极其重要。
消息处理函数:处理消息模块传来的消息处理的函数。在初始化函数中向消息模块申请了要处理的消息范围和返回的函数指针。
循环函数:提供主循环调用的函数,主要和各种时间有关系的。比如闪烁控制,秒,分,系统时间到达后要发生的事件处理。
公用函数:提供外部使用的子函数。
内部函数:内部使用的函数。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论