【小黑嵌入式系统第六课】嵌入式系统软件设计基础——C语言简述、程序涉及规范、多任务程序设计、状态机建模(FSM)、模块化设计(3)

本文介绍了嵌入式系统软件设计的基础,包括前后台多任务程序设计的原则,如任务不能阻塞CPU、关注函数重入问题以及临界代码保护。状态机建模(FSM)的概念、优势和应用也被详细阐述,指出状态机在处理并发和降低系统复杂性方面的价值。此外,还讨论了模块化程序设计的重要性,例如键盘、串口和数码管显示等模块的独立性和可移植性。文章强调了事件触发多任务程序设计的实时性和低功耗特性,以及时间触发系统在可预测性和资源管理上的优势。
摘要由CSDN通过智能技术生成

(4)更换任意层代码,上下层建筑不变


(三)版本管理、可配置

在这里插入图片描述
 
(1)尽可能减少软件副本
(2)类似的产品/设计尽可能公用同一代码
(3)利用宏定义配置功能
(4)永远在最新的代码上开发,保留最新版


三 前后台多任务程序设计

(一)前后台程序的基本概念

在这里插入图片描述
任务(Task) :指完成某一单一功能的程序
后台程序:对时间要求不严格的任务,通常在主循环内执行
前台程序:要求快速响应或者时间严格的任务,通常中断内
队列/缓冲:用于暂存后台来不及处理的前台事件


(二)前后台程序的编写基本原则
(1)任何一个任务都不能阻塞CPU。

每个任务都应主动结束,让出CPU。不能有等待、死循环、长延时等环节(对初学者来说是难点!

在这里插入图片描述

(2)关注函数重入问题

可重入(Reentrancy):函数在自己调用自己的时候,不必担心数据被破坏。

从软件工程角度对函数可重入的作用可以解释为:具有可重入性的函数能够被多个任务同时调用。在后台程序中,任务都是顺序执行的,不存在多个任务同时调用一个函数的情况。但可能出现前台中断服务程序与后台任务同时调用某个函数。

因此对于前后台公用函数,必须是可重入的

【例】:

在这里插入图片描述


(3)临界代码保护(Critical Code Protection)

临界代码:运行时不可分割的代码,这部分代码不允许被中断打断

1) 依靠软件产生时间严格时序的程序段。

/\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
\*名称: Pulse 10us()
\*功能: 产生10us脉冲
\*入门参数: 无
\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/
void Pulse\_10us()
{
	\_DINT();            // -------以下是临界代码区,不允许被中断
	IO=1;               // 置高
	\_delay\_cycles(8); 	// 高电平持续10us (O赋值身耗2us)
	IO=0;               //置低
	_EINTO0;            // -------以上是临界代码区-----------
}

2)共享资源互斥性造成的临界代码

程序中任何可被占用的实体都称为“资源”。资源可以是硬件设备,如定时器、串口、打印机、键盘、LCD显示器等,也可以是变量、数组、队列、等数据。

被一个以上任务所占用的资源叫做“共享资源”。共享资源若不能同时被多任务占用,则具有“互斥性”(Mutual Exclusive)。

【例】:前后台同时调用液晶显示函数造成花屏

在这里插入图片描述

(4)临界代码的保护方法
  • 关中断、开中断
    隐患: 如果在A函数的临界代码区调用了另一个函数B,B函数内也有临界代码区,从B函数返回时,中断被打开了,这将造成A函数后续代码失去临界保护。所以,使用该方法时,不能在临界代码区调用任何具其他有临界代码的函数!
  • 利用硬件栈保存中断使能状态
    优点:不影响函数调用
    缺点:很多单片机的C语言不支持操作硬件栈
  • 利用变量保存中断使能状态
    缺点:每一段临界代码要消耗2-4字节内存
  • 利用模拟栈保存中断使能状态
    缺点:速度慢

典型错误1:在临界代码区调用其他临界代码

A()
{	
	int\_Disable();	
	B();	// 这期间中断是开的,所执行的代码不被临界保护
	int\_Enable();
}


B()
{
	int\_Disable();	
	// ...
	int\_Enable();
}

典型错误2:在主函数和中断中都调用LCD操作函数

  • LCD操作耗时长,不应放在中断中。
  • LCD操作是临界代码,LCD是互斥性共享资源,LCD操作函
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值