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

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

3天内不再提示

手把手教你单片机程序框架 几种常见的单片机编程框架解析

fcsde-sh 2023-07-17 19:55 次阅读

什么是框架?

程序框架其实就类似一个文件大纲或者模板。因为写程序就类似于写文章,如果没有大纲或者模板那么你写起来就会比较费劲。

为什么要有框架?

节约时间,减少错误。因为对于一种类型的程序它们代码结构体逻辑是一样的,同时有大量相似或者共同的地方。我们可以将这些共同的地方抽出来形成一个固定的程序框架,那么我们再开发新的同一种类型的程序时就可以套用这套框架。

这样会大大提高我们的开发效率,同时由于这个框架是一套公众的大家都在使用的与维护的,使用它会使代码逻辑更不容易出错。

嵌入式系统组成

嵌入式控制系统基本都是由“普通任务”和“中断任务”组成。

  • •普通任务:指对时间响应要求不高或者说是那种周期性执行的任务;

  • •中断任务:指对时间响应要求高,必须立刻处理的任务;

常见的框架

1、轮询无中断

说明:所有的任务都是按照顺序执行,为了减少整个系统的响应时间有两种方法:

  1. 1. 任务中不要使用等待式的延时函数;

  2. 2. 任务无法一次执行完的情况下应该将任务分解成若干个小任务每次执行一个小任务循环直到任务完成;上述两种方法都会消耗内存,本来局部变量可以解决的事,现在只能用静态或者全局变量来处理。

1b95ffea-2496-11ee-962d-dac502259ad0.png

优点:程序执行流程简单清晰;

缺点:对于系统修改功能非常不方便,同时如果任务数量增加的话会影响整个系统的响应时间,就会显得系统卡顿;

伪代码实现:

intmain(void)
{
while(1)
{
doSomething_1();//任务1
doSomething_2();//任务2
doSomething_3();//任务3
/*其他各种任务*/
}
return0;
}

2、只有中断

说明:在“只有中断“的系统中,主函数main的循环中是不做任何操作的。

优点:可以实时响应异常的任务(事件)

缺点:中断资源有限,当任务过多时会响应不及时。

伪代码实现:

intmain(void)
{
while(1)
{
;
}
}

/*中断服务函数1*/
voidISR1_IRQHandler(void)
{
doSomething_1();
}

/*中断服务函数2*/
voidISR2_IRQHandler(void)
{
doSomething_2();
}

3、只有中断框架的变种

说明:采用状态机的机制来执行任务。中断函数中设置状态机的状态,而main函数主循环中根据不同的状态值执行不同的任务。这个其实不属于真正只有中断的形式。

intmain(void)
{
while(1)
{
if(flag_1)
{
doSomething_1();
}
if(flag_2)
{
doSomething_2();
}
if(flag_3)
{
doSomething_3();
}
/*其他各种任务*/
}
return0;
}

/*********中断服务函数1************/
voidISR1_IRQHandler(void)
{
flag_1=~flag_1;
}

/*********中断服务函数2************/
voidISR2_IRQHandler(void)
{
flag_2=~flag_2;
}

/*********中断服务函数3************/
voidISR3_IRQHandler(void)
{
flag_3=~flag_3;
}

4、轮询有中断

说明:将一些周期性的任务放置在main函数中的主循环中执行,

1ba81a2c-2496-11ee-962d-dac502259ad0.png

优点:合理的利用资源,将常规任务与紧急任务分开来了。

缺点:程序结构与逻辑比较复杂,在任务分配以及协作之间需要花费很大精力。

伪代码实现:

intmain(void)
{
while(1)
{
if(flag_1)
{
doSomething_1();
}
if(flag_2)
{
doSomething_2();
}
if(flag_3)
{
doSomething_3();
}
/*其他各种任务*/
}
return0;
}

/*********定时器中断服务函数************/
voidISR1_IRQHandler(void)
{

}

5、轮询有中断——虚拟定时器

1bbe1a48-2496-11ee-962d-dac502259ad0.png

说明:利用不同的”虚拟定时器“的定时时间来调用不同任务,当定时器的定时时间到时则执行回调函数或者调用任务函数。

这对于一些周期性运行的任务是非常适合的,同时中断可以应对外界的突发事件。这样实时性也可以得到保障,但要注意不要使用等待式延时。一般虚拟定时器的时基为1ms

优点:任务的时间间隔可以相对精确的控制,同时由于中断使用整个系统的实时性也很不错。

缺点:任务的执行时间无法掌控,当定时任务执行时间过长时会影响到虚拟定时器的定时精度。

虚拟定时器实现代码:

https://codeload.github.com/0x1abin/MultiTimer/zip/master

6、非抢占式实时操作系统

1bd31b3c-2496-11ee-962d-dac502259ad0.png

说明:任务之间没有优先级之分,每个任务都是依次执行。但是任务的执行时间是由操作系统严格控制的。即使任务没有执行完,当时间片时间达到时任务便会被挂起。

优点:不用再处心积虑的减少任务中的延时,我们只需要将精力放置在业务逻辑上。

缺点:任务之间是平级的,这就会导致有些任务无法得到紧急处理。

伪代码实现:

https://blog.csdn.net/twx11213030422/article/details/104637273

7、抢占式实时操作系统

说明:每个任务之间是一个“死循环”同时任务都有一个优先级。高优先级的任务可以打断低优先级的任务,这个就类似于中断一样。所以整个系统的实时性就非常好,同时每个任务都还受时间片的控制也就是说它们的执行时间是可以预测的。它也支持中断可以响应紧急的事件。

1bf28b48-2496-11ee-962d-dac502259ad0.png

优点:实时响应,工程师只需要将精力放置在业务逻辑的实现上

缺点:需要移植且对单片机硬件资源有一定要求。

常用的抢占式实时操作系统:Keil RTX、FreeRTOSuCosII/III等等。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620834
  • 嵌入式
    +关注

    关注

    4982

    文章

    18281

    浏览量

    288438
  • FreeRTOS
    +关注

    关注

    12

    文章

    473

    浏览量

    61347
  • 单片机编程
    +关注

    关注

    10

    文章

    49

    浏览量

    19994
  • 单片机程序
    +关注

    关注

    1

    文章

    11

    浏览量

    9522

原文标题:干货| 几种常见的单片机编程框架

文章出处:【微信号:fcsde-sh,微信公众号:fcsde-sh】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    手把手教你单片机之AVR入门视频教程

    按键与数码管的程序设计_手把手教你单片机之AVR入门篇第06讲 中断与定时器_手把手教你
    发表于 03-02 11:04

    手把手教你单片机c语言》视频教程

    `《手把手教你单片机C语言》视频教程电驴、优酷、迅雷等下载地址《手把手教你单片机c语言》视频
    发表于 10-26 14:14

    力天手把手教你单片机视频全集下载

    用户手册【力天电子原创】.rarhttp://115.com/file/an9yqh53#02.第一讲.个人电脑使用入门下--力天手把手教你单片机之入门篇.rarhttp://115.com
    发表于 02-14 17:06

    手把手教你学AVR单片机C程序设计实验程序

    手把手教你学AVR单片机C程序设计实验程序是一些源程序
    发表于 08-10 09:39

    手把手教你单片机

    小宋老师单片机教程手把手教你单片机 链接: http://pan.baidu.com/s/1kTvEOo3 密码: vzox
    发表于 12-07 17:59

    手把手教你学CPLD/FPGA与单片机联合设计》-周兴华

    。此外,为了帮助读者掌握单片机与CPLD/FPGA的联合设计,还介绍了51单片机的基本知识及单片机c语言编程的基础知识,并通过实例设计进行详解。《
    发表于 12-29 17:10

    手把手教你学CPLD/FPGA与单片机联合设计》-周兴华

    。此外,为了帮助读者掌握单片机与CPLD/FPGA的联合设计,还介绍了51单片机的基本知识及单片机c语言编程的基础知识,并通过实例设计进行详解。《
    发表于 01-06 17:21

    【吴坚鸿】手把手教你单片机程序框架(电子书整理)

    这本电子书资料整理的是吴老师另一个连载贴——从业将近十年!手把手教你单片机程序框架。这篇帖子连载了近两年,一共有90个章节,着实耗费了吴老师
    发表于 03-01 09:30

    吴坚鸿—手把手教你单片机程序框架 (电子版)

    结合的教学方式,并且给出了详细的代码以及清晰明了的解析。是单片机爱好者学习的实用资料!这是吴老师在电子发烧友论坛连载的帖子:https://bbs.elecfans.com/jishu_406259_1_1.html部分目录:《手把手
    发表于 11-19 14:00

    手把手教你单片机(第2版)实验程序

    手把手教你单片机(第2版)实验程序.zip,一共22个单片机实验程序
    发表于 09-24 12:27

    手把手教你单片机程序框架

    手把手教你单片机程序框架资料来自网络资源分享
    发表于 05-26 22:51

    从业将近十年!手把手教你单片机程序框架

    这个是转载的http://bbs.21ic.com/icview-691804-1-1.html[51单片机] 从业将近十年!手把手教你单片机程序
    发表于 07-01 09:21

    手把手教你单片机

    学习视频:手把手教你单片机我所学的单片机的类型以及资料STC89C52宏晶科技出品的一款 51 内核的单片机,具有标准的 51 体系结构,
    发表于 07-14 07:23

    从业将近十年!手把手教你单片机程序框架_【吴坚鸿】

    从业将近十年!手把手教你单片机程序框架。这篇帖子连载了近两年,一共有90个章节,着实耗费了吴老师很多心血。
    发表于 03-03 18:28 350次下载

    手把手教你单片机程序框架的PDF电子书免费下载

    本文档的主要内容详细介绍的是手把手教你单片机程序框架的PDF电子书免费下载
    发表于 04-22 17:24 255次下载
    <b class='flag-5'>手把手</b><b class='flag-5'>教你</b><b class='flag-5'>单片机</b><b class='flag-5'>程序</b><b class='flag-5'>框架</b>的PDF电子书免费下载