浅谈嵌入式编程

本文作者分享了一年多的嵌入式编程经验,探讨了软件系统高效数据流处理、严谨逻辑控制、人性化外部接口、健壮容错管理和良性代码冗余等五大特性,并以串口通信、逻辑分区为例进行了详细阐述,旨在促进技术交流和理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从事嵌入式编程工作已有一年多了,在这里有幸分享笔者对软件系统优秀特性的看法以及在嵌入式编程实践中的感悟。全文若有疑议,欢迎同事Email至笔者的邮箱:VegaEmbed@163.com,技术交流,相互促进。

软件系统优秀特性如下:

(1)    高效合理的数据流处理;

(2)    客观严谨的逻辑控制;

(3)    人性化的外部接口;

(4)    健壮的容错管理;

(5)    良性的代码冗余。

以下从嵌入式编程的角度说明个人对上述软件系统特性的看法,文中所指的嵌入式编程按通俗的说法:即开发运行于终端设备的应用,区别于传统PC机上的软件。基于笔者的项目经历,文中观点更倾向于在裸机上自行构建与开发一套专用的软件系统,如:单片机软件系统。在软件系统优秀特性的表述方面,既有“个性”,也有“共性”。

 特性(1): 数据流处理无疑是软件系统最重要的功能需求,目的在于通过计算机实现对数据的智能管理,而嵌入式编程中处理的数据流通常是控制硬件的指令和反应硬件状态的信号,所以数据流处理是否稳妥将直接影响硬件的驱动性能。尤其在单片机有限主频和小容量存储空间情况下,数据流处理不善极有可能导致堆栈溢出,系统跑飞和死机现象。为了杜绝此类事情发生,嵌入式程序员很有必要提高数据流的处理效率,结合应用场景,灵活使用数据结构。

笔者以”串口通信”为例(如图1),结合串口本身”串入串出”的特性,引入循环队列作为其数据结构,为进一步提高串口的协议解析效率,再结合队列”先进先出”的操作特点,采用”按字节解析”算法,实时记录协议包解析状态,接收超时或者完成解析则进行清空策略,使之通过了模拟双向数据流压力测试。

图1 串口通信数据流管理

 特性(2)逻辑控制,是软件系统任务调度策略和事务运转流程的总和。当功能需求较为复杂时,软件系统的逻辑复杂度也会相应地提高。为避免软件逻辑出现“陷阱”和“炸弹”,除了反复检验程序逻辑以外,还可以通过“模块化”和“分层设计”思想使之更具条理性。

    笔者以“逻辑分区”为例,在单片机系统构建中,结合应用场景,将其FLASH (相当于PC的硬盘) 划分为4个独立逻辑分区,分别为:   

(1)    引导区,负责设备上电后代码迁移判断,程序跳转功能;

(2)    系统区,存放当前版本有效代码,完成所有系统功能;

(3)    备份区,存放本地升级更新代码,不执行可读写;

(4)    模拟区,存放模拟ROM型变量,指示升级和迁移标志。

图2 Flash逻辑分区

将单片机的SRAM (相当于PC的内存)分为5个逻辑分区加以使用,可达到节省空间,提高数据存取效率的目的。 bdata区用以存放bool型变量;其余分区根据寻址特性和变量使用频率的多寡依次存放。数据存取效率由高到低依次为:data( bdata )区> idata区 > xdata ( pdata)区。

图3 SRAM逻辑分区

 特性(3)人性化的外部接口,有两种众所周知的含义,其一是指软件本身的狭义“接口”,比如各种软件开发API等。其二则指的是人与软件之间的交互界面,即UI设计。在嵌入式编程中,外部接口是由通信协议定制的,在多个MCU协同工作的场景中,每个MCU都运行着各自独立的软件系统,它们的外部接口就是协议中所定义的各种数据格式及其所代表的功能。

特性(4)健壮的容错处理,因为软件系统从宏观上来说就是一个输入输出系统,容错即容许非法输入,且保证软件系统还能正常运行。在嵌入式编程中,非法输入可能来自用户,也可能来自硬件系统本身,如数据干扰,硬件老化,接触不良等情况。以”开关信号的检测”为例,软件除了开关正常时检测其信号并做相应处理外,同时还要考虑开关失效时,系统主逻辑的正常运行。

特性(5)良性的代码冗余,检查外部系统传入数据的合法性,方便系统调试及软件维护的冗余代码。在嵌入式编程中,笔者通常使用预编译指令管理软件的Debug版本和Release版本,相对来说Debug版本的代码冗余度高于Release版本,而它们所完成的系统功能并无差别。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值