电子发烧友App

硬声App

扫码添加小助手

加入工程师交流群

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>嵌入式开发>三种单片机应用程序的架构的利弊和适应范围资料下载

三种单片机应用程序的架构的利弊和适应范围资料下载

2021-04-17 | pdf | 134.27KB | 次下载 | 2积分

资料介绍

工作中经过摸索实验,总结出单片机大致应用程序的架构有三种: 1、简单的前后台顺序执行程序,这类写法是大多数人使用的方法,不需用思考程序的具体架构,直接通过执行顺序编写应用程序即可。 2、时间片轮询法,此方法是介于顺序执行与操作系统之间的一种方法。 3、操作系统,此法应该是应用程序编写的最高境界。 下面就分别谈谈这三种方法的利弊和适应范围等。 一、顺序执行法 这 种方法,这应用程序比较简单,实时性,并行性要求不太高的情况下是不错的方法,程序设计简单,思路比较清晰。但是当应用程序比较复杂的时候,如果没有一个 完整的流程图,恐怕别人很难看懂程序的运行状态,而且随着程序功能的增加,编写应用程序的工程师的大脑也开始混乱。即不利于升级维护,也不利于代码优化。 本人写个几个比较复杂一点的应用程序,刚开始就是使用此法,最终虽然能够实现功能,但是自己的思维一直处于混乱状态。导致程序一直不能让自己满意。 这种方法大多数人都会采用,而且我们接受的教育也基本都是使用此法。对于我们这些基本没有学习过数据结构,程序架构的单片机工程师来说,无疑很难在应用程序的设计上有一个很大的提高,也导致了不同工程师编写的应用程序很难相互利于和学习。 本人建议,如果喜欢使用此法的网友,如果编写比较复杂的应用程序,一定要先理清头脑,设计好完整的流程图再编写程序,否则后果很严重。当然应该程序本身很简单,此法还是一个非常必须的选择。 下面就写一个顺序执行的程序模型,方便和下面两种方法对比: 代 码 /************************************************************************************** * FunctionName : main() * Description : 主函数 * EntryParameter : None * ReturnValue : None **************************************************************************************/ int main(void) { uint8 keyValue; InitSys(); // 初始化 while (1) { TaskDisplayClock(); keyValue = TaskKeySan(); switch (keyValue) { case x: TaskDispStatus(); break; ... default: break; } } } 二、时间片轮询法 时间片轮询法,在很多书籍中有提到,而且有很多时候都是与操作系统一起出现,也就是说很多时候是操作系统中使用了这一方法。不过我们这里要说的这个时间片轮询法并不是挂在操作系统下,而是在前后台程序中使用此法。也是本贴要详细说明和介绍的方法。 对于时间片轮询法,虽然有不少书籍都有介绍,但大多说得并不系统,只是提提概念而已。下面本人将详细介绍这种模式,并参考别人的代码建立的一个时间片轮询架构程序的方法,我想将给初学者有一定的借鉴性。 在这里我们先介绍一下定时器的复用功能。 使用1个定时器,可以是任意的定时器,这里不做特殊说明,下面假设有3个任务,那么我们应该做如下工作: 1、 初始化定时器,这里假设定时器的定时中断为1ms(当然你可以改成10ms,这个和操作系统一样,中断过于频繁效率就低,中断太长,实时性差)。 2、定义一个数值: 代 码 #define TASK_NUM (3) // 这里定义的任务数为3,表示有三个任务会使用此定时器定时。 uint16 TaskCount[TASK_NUM] ; // 这里为三个任务定义三个变量来存放定时值 uint8 TaskMark[TASK_NUM]; // 同样对应三个标志位,为0表示时间没到,为1表示定时时间到。 3、在定时器中断服务函数中添加: 代 码 /************************************************************************************** * FunctionName : TimerInterrupt() * Description : 定时中断服务函数 * EntryParameter : None * ReturnValue : None **************************************************************************************/ void TimerInterrupt(void) { uint8 i; for (i=0; i{ if (TaskCount[i]) { TaskCount[i]--; if (TaskCount[i] == 0) { TaskMark[i] = 0x01; } } } } 代码解释:定时中断服务函数,在中断中逐个判断,如果定时值为0了,表示没有使用此定时器或此定时器已经完成定时,不着处理。否则定时器减一,知道为零时,相应标志位值1,表示此任务的定时值到了。 4、在我们的应用程序中,在需要的应用定时的地方添加如下代码,下面就以任务1为例: 代 码
单片机 mcu 嵌入式 STM
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1冷柜-电气控制系统讲解
  2. 13.68 MB  |  4次下载  |  10 积分
  3. 2安川A1000变频器中文版说明书
  4. 20.16 MB  |  3次下载  |  3 积分
  5. 3直流电路的组成和基本定律
  6. 1.67 MB   |  2次下载  |  免费
  7. 4丹佛斯2800系列变频器说明书
  8. 8.00 MB  |  1次下载  |  5 积分
  9. 5PC8011同步开关型降压3.5A单节锂电池充电管理电路技术手册
  10. 0.74 MB   |  1次下载  |  免费
  11. 6ES7243E+ES8311音频录制与播放电路资料
  12. 0.06 MB   |  1次下载  |  5 积分
  13. 7SDM02 激光测距模块产品手册
  14. 0.43 MB   |  1次下载  |  免费
  15. 8SDFM 激光测距模块模组手册
  16. 0.54 MB   |  1次下载  |  免费

本月

  1. 1CH341编程器软件NeoProgrammer_2.2.0.10
  2. 20.47 MB   |  170次下载  |  1 积分
  3. 22025智能家居传感器市场分析及创新应用
  4. 3.11 MB  |  43次下载  |  免费
  5. 3RV1126B系列开发板产品资料
  6. 4.19 MB  |  18次下载  |  免费
  7. 4CH341编程软件下载
  8. 2.50 MB   |  16次下载  |  5 积分
  9. 5全志系列-米尔基于T153核心板开发板 四核异构、3路千兆网,赋能多元化工业场景
  10. 3.05 MB  |  12次下载  |  免费
  11. 6【开源】60余套STM32单片机、嵌入式Linux、物联网、人工智能项目案例及入门学习资源包
  12. 10.55 MB  |  8次下载  |  免费
  13. 7冷柜-电气控制系统讲解
  14. 13.68 MB  |  4次下载  |  10 积分
  15. 8特斯拉MODEL S车载充电机主电路回路原理图
  16. 0.81 MB   |  4次下载  |  3 积分

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935137次下载  |  10 积分
  3. 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
  4. 1.48MB  |  420064次下载  |  10 积分
  5. 3Altium DXP2002下载入口
  6. 未知  |  233094次下载  |  10 积分
  7. 4电路仿真软件multisim 10.0免费下载
  8. 340992  |  191448次下载  |  10 积分
  9. 5十天学会AVR单片机与C语言视频教程 下载
  10. 158M  |  183356次下载  |  10 积分
  11. 6labview8.5下载
  12. 未知  |  81604次下载  |  10 积分
  13. 7Keil工具MDK-Arm免费下载
  14. 0.02 MB  |  73824次下载  |  10 积分
  15. 8LabVIEW 8.6下载
  16. 未知  |  65991次下载  |  10 积分