当前位置:网站首页>一些嵌入式软件设计经验
一些嵌入式软件设计经验
2022-08-03 17:08:00 【李肖遥】
关注、星标公众号,直达精彩内容
来源:CSDN
作者 | twx11213030422
1、什么是框架?
程序框架其实就类似一个文件大纲或者模板。因为写程序就和类似于写文章,如果没有大纲或者模板那么你写起来就会比较费劲。
2、为什么要有框架?
节约时间,减少错误。因为对于一种类型的程序它们代码结构体逻辑是一样的,同时有大量相似或者共同的地方。我们可以将这些共同的地方抽出来形成一个固定的程序框架,那么我们再开发新的同一种类型的程序时就可以套用这套框架。
这样会大大提高我们的开发效率,同时由于这个框架是一套公众的大家都在使用的与维护的,使用它会使代码逻辑更不容易出错。
3、嵌入式系统组成
嵌入式控制系统基本都是由普通任务和中断任务组成。
普通任务:指对时间响应要求不高或者说是那种周期性执行的任务;
中断任务:指对时间响应要求高,必须立刻处理的任务;
4、常见的框架
4.1、轮询无中断
说明:所有的任务都是按照顺序执行,为了减少整个系统的响应时间有两种方法:
任务中不要使用等待式的延时函数;
任务无法一次执行完的情况下应该将任务分解成若干个小任务每次执行一个小任务循环直到任务完成;
上述两种方法都会消耗内存,本来局部变量可以解决的事,现在只能用静态或者全局变量来处理。

优点:程序执行流程简单清晰;
缺点:对于系统修改功能非常不方便,同时如果任务数量增加的话会影响整个系统的响应时间,就会显得系统卡顿;
伪代码实现:
int main(void)
{
while(1)
{
doSomething_1(); //任务1
doSomething_2(); //任务2
doSomething_3(); //任务3
/*其他各种任务*/
}
return 0;
}4.2、只有中断
说明:在“只有中断“的系统中,主函数main的循环中是不做任何操作的。
优点:可以实时响应异常的任务(事件)
缺点:中断资源有限,当任务过多时会响应不及时。
伪代码实现:
int main(void)
{
while(1)
{
;
}
}
/*中断服务函数1*/
void ISR1_IRQHandler(void)
{
doSomething_1();
}
/*中断服务函数2*/
void ISR2_IRQHandler(void)
{
doSomething_2();
}4.3、只有中断框架的变种
说明:采用状态机的机制来执行任务。中断函数中设置状态机的状态,而main函数主循环中根据不同的状态值执行不同的任务。这个其实不属于真正只有中断的形式。
int main(void)
{
while(1)
{
if(flag_1)
{
doSomething_1();
}
if(flag_2)
{
doSomething_2();
}
if(flag_3)
{
doSomething_3();
}
/*其他各种任务*/
}
return 0;
}
/*********中断服务函数1************/
void ISR1_IRQHandler(void)
{
flag_1 = ~flag_1;
}
/*********中断服务函数2************/
void ISR2_IRQHandler(void)
{
flag_2 = ~flag_2;
}
/*********中断服务函数3************/
void ISR3_IRQHandler(void)
{
flag_3 = ~flag_3;
}4.4、轮询有中断
说明:将一些周期性的任务放置在main函数中的主循环中执行:

优点:合理的利用资源,将常规任务与紧急任务分开来了。
缺点:程序结构与逻辑比较复杂,在任务分配以及协作之间需要花费很大精力。
伪代码实现:
int main(void)
{
while(1)
{
if(flag_1)
{
doSomething_1();
}
if(flag_2)
{
doSomething_2();
}
if(flag_3)
{
doSomething_3();
}
/*其他各种任务*/
}
return 0;
}
/*********定时器中断服务函数************/
void ISR1_IRQHandler(void)
{
}4.5、轮询有中断——虚拟定时器

说明:利用不同的”虚拟定时器“的定时时间来调用不同任务,当定时器的定时时间到时则执行回调函数或者调用任务函数。
这对于一些周期性运行的任务是非常适合的,同时中断可以应对外界的突发事件。这样实时性也可以得到保障,但要注意不要使用等待式延时。一般虚拟定时器的时基为1ms。
优点:任务的时间间隔可以相对精确的控制,同时由于中断使用整个系统的实时性也很不错。
缺点:任务的执行时间无法掌控,当定时任务执行时间过长时会影响到虚拟定时器的定时精度。
虚拟定时器实现代码:
https://codeload.github.com/0x1abin/MultiTimer/zip/master
4.6、非抢占式实时操作系统

说明:任务之间没有优先级之分,每个任务都是依次执行。但是任务的执行时间是由操作系统严格控制的。即使任务没有执行完,当时间片时间达到时任务便会被挂起。
优点:不用再处心积虑的减少任务中的延时,我们只需要将精力放置在业务逻辑上。
缺点:任务之间是平级的,这就会导致有些任务无法得到紧急处理。
伪代码实现:
https://blog.csdn.net/twx11213030422/article/details/104637273
4.7、抢占式实时操作系统
说明:每个任务之间是一个“死循环”同时任务都有一个优先级。高优先级的任务可以打断低优先级的任务,这个就类似于中断一样。所以整个系统的实时性就非常好,同时每个任务都还受时间片的控制也就是说它们的执行时间是可以预测的。它也支持中断可以响应紧急的事件。

优点:实时响应,工程师只需要将精力放置在业务逻辑的实现上
缺点:需要移植且对单片机硬件资源有一定要求;使用比较复杂。
常用的抢占式实时操作系统:Keil RTX、FreeRTOS、uCosII/III等等。
4.8、回调函数
什么是回调函数?
答:函数指针作为函数的形参,然后函数的调用通过此函数指针来实现。
回调函数中注册与回调是什么?
答:注册其实就是使用一个全局的函数指针,然后给此函数指针赋值(将我们自定义的函数名称赋值给它)。然后在中断或者其他地方通过此全局的函数指针来调用我们原先自定义的函数且这个自定义的函数我们也叫回调函数。

版权声明:本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。
‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧
关注我的微信公众号,回复“加群”按规则加入技术交流群。点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。边栏推荐
- 多表查询最值
- 工程仪器设备在线监测管理系统常见问题和注意事项
- 数据万象内容审核 — 共建安全互联网,专项开展“清朗”直播整治行动
- CC2530_ZigBee+华为云IOT:设计一套属于自己的冷链采集系统
- 为何微博又双叒叕崩溃了?
- [redis] cache penetration and cache avalanche and cache breakdown solutions
- [Unity Starter Plan] Making RubyAdventure01 - Player Creation & Movement
- 广告电商系统开发之会员系统板块
- 我想请问下,我们的数据库是在亚马逊,Dataworks 连不通,怎么办?
- C专家编程 第3章 分析C语言的声明 3.9 轻松一下---驱动物理实体的软件
猜你喜欢

Detailed explanation of setting HiSilicon MMZ memory and OS memory

IP属地如何高效率识别

学会 Arthas,让你 3 年经验掌握 5 年功力!

Interviews are no longer hanged!This is the correct way to open the seven schemes of Redis distributed locks

FinClip | 2022 年 7 月产品大事记

设置海思芯片MMZ内存、OS内存详解

为何微博又双叒叕崩溃了?

大型企业数据治理的现状和解决方案有哪些参考?_光点科技

面试突击71:GET 和 POST 有什么区别?

CC2530_ZigBee+华为云IOT:设计一套属于自己的冷链采集系统
随机推荐
【目标检测】Focal Loss for Dense Object Detection
uniapp 切换 history 路由模
C专家编程 第3章 分析C语言的声明 3.7 typedef struct foo{... foo;}的含义
B站回应HR称核心用户是Loser;微博回应宕机原因;Go 1.19 正式发布|极客头条
[Unity Getting Started Plan] Basic Concepts (6) - Sprite Renderer Sprite Renderer
多表查询最值
【数仓】数据质量监控
附录A 程序员工作面试的秘密
LeetCode·899.有序队列·最小表示法
怎么在opengauss中进行测试自己添加的新函数的性能(循环n次的运行时间)?
九种方法!教你如何读取resources目录下的文件路径
融云「音视频架构实践」技术专场【内含完整PPT】
C专家编程 第1章 C:穿越时空的迷雾 1.9 阅读ANSI C标准,寻找乐趣和裨益
Understand the recommendation system in one article: Outline 02: The link of the recommendation system, from recalling rough sorting, to fine sorting, to rearranging, and finally showing the recommend
2022爱分析· 银行数字化厂商全景报告
超分重建数据集
最强分布式锁工具:Redisson
高效的组织信息共享知识库是一种宝贵的资源
【数据库数据恢复】SqlServer数据库无法读取的数据恢复案例
华为、联想、北汽等入选工信部“企业数字化转型和安全能力提升”首批实训基地
