嵌入式软件架构篇

合集下载

嵌入式开发中的软件架构设计

嵌入式开发中的软件架构设计

嵌入式开发中的软件架构设计嵌入式开发是现代科技领域中的重要一环,它涉及到各种智能设备和嵌入式系统的开发与设计。

在嵌入式开发中,软件架构设计起着至关重要的作用。

本文将介绍嵌入式开发中的软件架构设计原则、常见的软件架构模式,以及如何选择适合的软件架构设计方案。

一、嵌入式开发中的软件架构设计原则在进行嵌入式软件架构设计时,需要遵循一些基本原则,以确保软件架构的稳定性、可靠性和可维护性。

以下是几个重要的原则:1. 模块化设计:嵌入式系统通常由多个模块组成,每个模块负责不同的功能。

模块化设计可以使系统的各个模块相互独立,易于调试和维护。

2. 可重用性:合理设计软件模块,以便于在不同的项目中重复使用。

这将提高开发效率,减少代码量,降低项目开发成本。

3. 可扩展性:嵌入式系统的需求可能会随时间不断变化。

因此,软件架构设计应具备良好的可扩展性,以便于根据实际需求进行系统的扩展和升级。

4. 可靠性和安全性:嵌入式系统通常面临着严格的可靠性和安全性要求。

软件架构设计应当考虑到系统的性能和稳定性,并采取相应的措施来确保数据的安全性。

5. 性能优化:嵌入式系统通常拥有有限的资源,包括处理能力、内存和存储空间等。

软件架构设计应当考虑到这些资源限制,并尽可能优化系统的性能。

二、常见的嵌入式软件架构模式针对不同的应用场景和需求,存在多种嵌入式软件架构模式可供选择。

以下是一些常见的模式:1. 单机框架模式:在这种模式下,嵌入式系统作为一个单一的实体存在,所有的功能模块都运行在同一台设备上。

这种模式适用于资源较为充足、功能相对简单的嵌入式系统。

2. 分布式框架模式:在这种模式下,嵌入式系统的各个功能模块分布在不同的设备上,通过网络进行通信和协作。

这种模式适用于功能复杂、需要协同工作的嵌入式系统。

3. 客户端-服务器模式:这种模式下,嵌入式系统被分为客户端和服务器两个部分。

客户端负责与用户进行交互,服务器负责处理数据和逻辑。

这种模式适用于需要与用户进行交互的嵌入式系统。

嵌入式软件架构设计之分层设计

嵌入式软件架构设计之分层设计

嵌入式软件架构设计之分层设计嵌入式软件分层设计是一种常用的软件架构设计方法,它将整个软件系统分为不同的层次,每个层次有各自的职责和功能,层之间通过接口进行通信和协作。

分层设计的优点是提高了软件系统的可维护性、可扩展性和可重用性,降低了软件模块之间的耦合度。

1.应用层:应用层是整个软件系统的最高层,负责处理用户界面和应用逻辑。

它接收用户的输入,并根据用户的操作来调用下一层的功能模块。

在分层设计中,应用层通常只包含少量的代码,主要是调用下一层的接口函数,并将结果返回给用户。

这样可以保持应用层的简洁和灵活性。

2.业务逻辑层:业务逻辑层是整个软件系统的核心层,负责实现系统的核心功能和业务逻辑。

它包含了系统的主要算法和数据处理逻辑,通过调用下一层的接口函数来实现具体的功能。

业务逻辑层的设计应该尽量遵循高内聚、低耦合的原则,将复杂的业务逻辑拆分成独立的模块或函数,提高系统的可维护性和可扩展性。

3.数据访问层:数据访问层负责与外部设备或数据库进行数据的读写操作。

它提供了统一的接口函数,隐藏了底层硬件或数据库的细节,使上层模块可以方便地访问和操作数据。

数据访问层的设计要考虑到数据的安全性和一致性,同时还要注意性能和效率的问题。

4.设备驱动层:设备驱动层负责与硬件设备进行通信和控制。

它提供了统一的接口函数,使上层模块可以方便地调用设备的功能和服务。

设备驱动层的设计要考虑到硬件设备的特性和接口规范,同时还要保证设备的稳定性和可靠性。

在嵌入式软件分层设计中,每个层次都有自己的职责和功能,层之间通过接口进行通信和协作。

这种分层结构可以将软件系统的复杂性降低到可控制的范围内,提高软件的可维护性和可扩展性。

此外,分层设计还可以促进模块的重用和共享,提高开发效率和软件质量。

但是,在进行嵌入式软件分层设计时,需要注意以下几点:1.合理划分层次:层次划分要合理,避免层次之间的功能重复或交叉。

每个层次应该具有清晰的职责和功能,遵循单一职责原则和层次内聚原则。

嵌入式系统架构:CISC家族之X86架构

嵌入式系统架构:CISC家族之X86架构

嵌入式系统架构:CISC家族之X86架构X86 处理器应用在嵌入式系统的历史相当悠久,以Intel 为例,其Pentium3 时代的处理器与芯片组,至今仍活跃在许多工控电脑产业中。

而随着两大X86 厂商放弃RISC 产品线,并积极规划移动应用产品,X86 进入到消费性电子嵌入式市场就不再只是传言。

当然,X86 处理器普遍都还是有功耗过高,且芯片数量庞大的缺点,不适合应用在要求精简省电的嵌入式架构中,但随着发展,这一切都有了根本上的改变。

尽管Pentium4 是Intel 相对失败之作,但Pentium3 依旧是市场的最爱,就连Intel 本身也舍不得放弃Pentium3 的微架构,如今已经经过数次的翻新与修改,即便是最新的4 核心产品,依然有Pentium3 的影子存在。

卖旧式架构产品,对Intel 来说,其实不无小补,由于旧架构经过长久验证,不需重新设计,且在生产上的成本非常低,制程提升还可以进一步拉抬芯片产量,但不止Intel 有旧架构产品,AMD 其实也运用同样的手法来经营其AthlonXP 处理器,但是Intel决心要让对手难以追赶,因此规划了一系列以移动产品应用为主的嵌入式处理器。

Intel 过去在X86 产品规划上,其实几乎从未接触过移动通讯应用,即便是雷声大雨点小的UMPC 产品,也都不含移动通讯功能,在这边我们指的是诸如3G、3.5G 的通讯能力,而当Intel 主推的WiMAX 正式被纳入3G 标准之一,也让Intel 重新考虑该公司的移动应用产品。

在最近的技术展示中,即便是最接近手机设计的MID(Mobile Intel Device)装置,也都仅定位于移动上网工具,而非行动通讯系统。

但是根据Intel 的最新规划,MID平台已经从单纯的行动上网,转而将会跨进现有的BlackBerry(黑莓)及I-Phone的相同市场,前者拥有强大的网际网络通讯能力,而I-Phone则是拥有强大的多媒体能力,但是Intel 的MID 平台基本上是一部微型X86 计算机系统,在功能性可以达到相当全面的地步,且具备了ARM、MIPS 等处理器架构难以满足的X86 软件兼容资源,导入移动通讯只不过是在目前的硬件规划基础上,进行软件模块的增加而已。

嵌入式单片机三种应用程序架构

嵌入式单片机三种应用程序架构

嵌入式单片机三种应用程序架构嵌入式单片机是一种集成了处理器、存储器、输入输出接口等功能的微型计算机系统,广泛应用于各种电子设备中。

针对不同的应用需求,嵌入式单片机可以采用不同的应用程序架构。

下面将介绍三种常见的嵌入式单片机应用程序架构,包括单任务、多任务和事件驱动架构。

一、单任务架构在单任务架构下,嵌入式单片机只能执行一项任务,也就是一次只能处理一个事件。

程序代码是按照顺序执行的,没有并行处理的能力。

在单任务架构下,主程序中通常包含一个主循环,通过循环不断地检测各种外部事件的发生并作出相应的处理。

例如,一个简单的嵌入式系统可能需要周期性地读取传感器数据并进行处理,然后将处理结果输出到显示屏上。

单任务架构的优点在于编程简单,逻辑清晰,适用于单一功能较简单的场景。

同时,由于不需要考虑并行处理的复杂性,系统资源的管理也相对简单。

然而,单任务架构的缺点在于不能同时进行多个任务处理,效率较低,且无法处理实时性要求较高的应用场景。

二、多任务架构多任务架构是一种支持多个任务并发执行的应用程序架构。

在多任务架构下,嵌入式单片机可以同时处理多个任务,提高系统的处理效率。

每个任务都有自己的代码段和数据段,并且任务之间可以实现相互通信和数据共享。

实现多任务的方法有多种,最常见的是利用操作系统的支持。

操作系统可以为每个任务分配独立的时间片,并负责任务的切换和调度。

常见的嵌入式操作系统有uc/OS、FreeRTOS等。

多任务架构的优点在于可以提高系统的并发处理能力,适用于多任务、复杂功能的应用场景。

同时,多任务架构可以实现任务间的相互独立,提高系统的可维护性和可重用性。

然而,多任务架构在设计和开发过程中需要考虑任务间的调度、通信、同步等问题,复杂度较高。

三、事件驱动架构事件驱动架构是一种基于事件触发的应用程序架构。

在事件驱动架构下,嵌入式单片机依据外部事件的发生而作出相应的响应,而非简单的按序执行代码。

事件可以是外部信号(如按键输入、传感器数据等)、定时器中断、通信中断等。

嵌入式架构设计文档模板

嵌入式架构设计文档模板

嵌入式架构设计文档模板一、项目概述。

1. 项目背景。

咱这个项目呢,就是为了解决[具体问题]而诞生的。

比如说,就像我们每天都觉得找东西很麻烦,那这个嵌入式设备就像是一个超智能的小管家,能帮我们快速搞定那些让人头疼的事儿。

2. 目标。

咱这个嵌入式系统的目标呀,就是要又快又稳又聪明!具体来说呢,就是要在[规定的时间内]完成[任务1]、[任务2]这些事儿,而且不能出岔子,得像老黄牛一样踏实可靠。

同时,还得有那么点“小机灵鬼”的感觉,能够根据不同的情况做出正确的反应。

二、硬件架构设计。

1. 处理器选型。

我思来想去啊,最后选了[处理器型号]这个家伙。

为啥呢?它就像一个超级大脑,运算速度那叫一个快,就像闪电侠一样。

而且它的功耗还特别低,就像一个很会过日子的小能手,不会一下子就把电量给耗光光。

另外呀,它的接口特别丰富,就像一个有好多口袋的神奇背包,能轻松连接各种各样的设备。

2. 存储系统。

存储这一块也很重要呢。

我们采用了[存储类型,如闪存或者DDR内存等]。

闪存就像是一个超级记忆大师,断电了也不会把数据忘掉,而DDR内存呢,速度快得像火箭,能让数据快速地跑来跑去。

它们两个搭配起来,就像是一对好搭档,一个负责稳稳地保存数据,一个负责快速地处理数据的临时周转。

3. 外设接口。

外设接口那可真是五花八门呀。

有像[接口1名称,如USB接口]这样的大众明星接口,大家都认识它,能方便地连接各种外部设备,像鼠标、键盘这些小伙伴。

还有[接口2名称,如SPI接口]这种比较专业的接口,它就像是一个幕后英雄,默默地连接着一些特殊的传感器或者芯片,让整个系统能够获取更多的信息。

三、软件架构设计。

1. 操作系统选择。

操作系统这事儿我可琢磨了好久。

最后决定用[操作系统名称]。

这个操作系统就像是一个超级大管家,把所有的软件和硬件资源都管理得井井有条。

它比较小巧玲珑,不会占用太多的资源,就像一个很会节省空间的小房子。

而且它的实时性很强,就像一个严格遵守时间的小闹钟,什么时候该做什么事儿,都安排得明明白白的。

嵌入式系统的软件架构设计

嵌入式系统的软件架构设计

嵌入式系统的软件架构设计一、嵌入式系统软件架构设计的原则1.单一职责原则:模块化设计,每个模块负责独立的功能或任务,使得系统具有高内聚性和低耦合性,易于维护和拓展。

2.低功耗原则:嵌入式系统通常运行在资源受限的环境中,所以在设计过程中应考虑功耗的优化,如合理使用睡眠模式、降低组件工作频率等。

3.实时性原则:对于需要实时响应的系统,需要保证任务的实时性和可靠性。

可以使用实时操作系统,合理分配任务优先级,提供正确的调度机制。

4.可靠性原则:嵌入式系统通常运行在无人值守的环境中,对于需要长时间运行的系统,需要考虑到系统的稳定性和错误处理机制,如保证数据一致性、异常处理等。

二、常用的嵌入式系统软件架构模式1.分层结构:将系统划分为若干层,每一层负责特定的功能或任务。

上层可以调用下层的服务,实现系统的复用和模块化设计。

常见的分层结构有应用层、服务层、驱动层等。

2.客户端-服务器模式:将系统拆分为客户端和服务器,客户端负责用户界面和输入输出处理,服务器负责核心业务逻辑和数据处理。

这种模式适用于需要分布式处理和网络通信的系统。

3.事件驱动模式:通过订阅和发布机制,实现模块之间的高效通信和数据传递。

当一个模块触发一个事件时,相关的订阅者可以接收并处理这个事件。

这种模式适用于需要实现松耦合的模块间通信的系统。

4.状态机模式:系统根据不同的状态进行不同的处理,通过定义状态转换规则,可以实现系统的复杂逻辑控制。

这种模式适用于需要根据不同状态处理不同事件的系统,如自动控制系统。

三、嵌入式系统软件架构设计的指导1.准确定义需求:在设计阶段之前,清楚地定义系统的功能需求、性能需求、可靠性需求等,并根据需求确定软件架构的基本模型和模式。

2.模块化设计和接口定义:将系统划分为若干独立的模块,并定义模块之间的接口和通信机制。

模块化设计可以提高系统的复用性、拓展性和维护性。

3.确定关键任务:对于需要实时响应的系统,需要确定关键任务,并按照优先级进行调度。

嵌入式软件架构分层的内涵与优缺点

嵌入式软件架构分层的内涵与优缺点

嵌入式软件架构分层的内涵与优缺点作者:蒙晓燕来源:《无线互联科技》2021年第21期摘要:文章首先从架构分层内涵出发,阐述了多层软件开发模型,然后分析了嵌入式软件架构分层优点和缺点,最后探讨了嵌入式软件架构分层设计方式与实现举措,希望以此为研究相同问题的人士提供有价值的参考,继而有效提高软件的实用性与经济效益。

关键词:嵌入式软件;架构分层;内涵;优缺点0引言嵌入式系统关键是以应用为主,将计算机技术作为基础,充分满足用户对成本与功能、体积与功耗等多方面要求的系统。

但在过去开发嵌入式系统软件的时候,全部软件涵盖操作系统、应用程序与硬件底层,是共同开发的,不能分开。

伴随嵌入式系统软件规模越来越复杂,越来越庞大,该种开发模式愈发暴露出更多的缺点和不足。

由于该模式针对不一样的硬件平台需要重新开始,接着开发出新的软件就其要实现的功能大部分相差无几甚而相同,但限制了软件的反复使用,与此同时还增加了开发时间与开发成本。

1架构分层内涵伴随社会经济的持续发展与进步,开始涌现出了各种各样的高新技术,这些高新技术在很大程度上有效改善了传统劳动力生产的模式,促使人们在工作岗位上可以更好地释放出自己的潜在能力。

与此同时,流水线形式的生产模式能够大大提高相关人员工作熟练程度,有效地减少了在实际工作中不必要出现的经济损失,不仅提高了生产力,还提升了经济效益与社会效益。

分工合作这一概念同样适用于嵌入式软件开发领域。

首先,相邻的两个软件模块可以彼此紧密联系;其次,好似金字塔结构,下层软件层并不了解还存在高层次软件层。

因此,仅需要满足上述两个特点,即为架构分层,此为软件架构分层思想基础。

软件架构分层发挥着重要作用,特别是在开发阶段,采取架构分层理念,可以发挥出显著的优势,因此需要相关人员做出更加深入的研究和探讨。

2多层软件开发模型分析2.1软件开发分层技术在软件开发中运用分层技术,实则是合理对用户的一切需求展开分析与梳理,把软件系统内每一个功能领域抽象化,明确系统内部每一个层次间的关系,继而简化模块开发过程,把系统开发问题变成了简单软件设计方面的问题。

嵌入式系统体系结构

嵌入式系统体系结构

嵌入式系统体系结构嵌入式系统体系结构:嵌入式系统的组成包含了硬件层、中间层、系统软件层和应用软件层。

1、硬件层:嵌入式微处理器、存储器、通用设备接口和I/O接口。

嵌入式核心模块=微处理器+电源电路+时钟电路+存储器Cache:位于主存和嵌入式微处理器内核之间,存放的是最近一段时间微处理器使用最多的程序代码和数据。

它的主要目标是减小存储器给微处理器内核造成的存储器访问瓶颈,使处理速度更快。

2、中间层(也称为硬件抽象层HAL或者板级支持包BSP).它将系统上层软件和底层硬件分离开来,使系统上层软件开发人员无需关系底层硬件的具体情况,根据BSP层提供的接口开发即可。

BSP有两个特点:硬件相关性和操作系统相关性。

设计一个完整的BSP需要完成两部分工作:A、嵌入式系统的硬件初始化和BSP功能。

片级初始化:纯硬件的初始化过程,把嵌入式微处理器从上电的默认状态逐步设置成系统所要求的工作状态。

板级初始化:包含软硬件两部分在内的初始化过程,为随后的系统初始化和应用程序建立硬件和软件的运行环境。

系统级初始化:以软件为主的初始化过程,进行操作系统的初始化。

B、设计硬件相关的设备驱动。

3、系统软件层:由RTOS、文件系统、GUI、网络系统及通用组件模块组成。

RTOS是嵌入式应用软件的基础和开发平台。

4、应用软件:由基于实时系统开发的应用程序组成。

嵌入式芯片体系结构介绍1.嵌入式微处理器(Micro Processor Unit,MPU)嵌入式微处理器是由通用计算机中的CPU演变而来的。

它的特征是具有32位以上的处理器,具有较高的性能,当然其价格也相应较高。

但与计算机处理器不同的是,在实际嵌入式应用中,只保留和嵌入式应用紧密相关的功能硬件,去除其他的冗余功能部分,这样就以最低的功耗和资源实现嵌入式应用的特殊要求。

和工业控制计算机相比,嵌入式微处理器具有体积小、重量轻、成本低、可靠性高的优点。

目前主要的嵌入式处理器类型有Am186/88、386EX、SC-400、Power PC、68000、MIPS、ARM/ StrongARM系列等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

模块划分
模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。

C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了相对论),C语言模块化程序设计需理解如下概念:
(1)模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对于该模块接口的声明;
(2)某模块提供给其它模块调用的外部函数及数据需在.h中文件中冠以extern关键字声明;
(3)模块内的函数和全局变量需在.c文件开头冠以static关键字声明;
(4)永远不要在.h文件中定义变量!定义变量和声明变量的区别在于定义会产生内存分配的操作,是汇编阶段的概念;而声明则只是告诉包含该声明的模块在连接阶段从其它模块寻找外部函数和变量。

如:
以上程序的结果是在模块1、2、3中都定义了整型变量a,a在不同的模块中对应不同的地址单元,这个世界上从来不需要这样的程序。

正确的做法是:
这样如果模块1、2、3操作a的话,对应的是同一片内存单元。

一个嵌入式系统通常包括两类模块:
(1)硬件驱动模块,一种特定硬件对应一个模块;
(2)软件功能模块,其模块的划分应满足低偶合、高内聚的要求。

多任务还是单任务
所谓"单任务系统"是指该系统不能支持多任务并发操作,宏观串行地执行一个任务。

而多任务系统则可以宏观并行(微观上可能串行)地"同时"执行多个任务。

多任务的并发执行通常依赖于一个多任务操作系统(OS),多任务OS的核心是系统调度器,它使用任务控制块(TCB)来管理任
务调度功能。

TCB包括任务的当前状态、优先级、要等待的事件或资源、任务程序码的起始地址、初始堆栈指针等信息。

调度器在任务被激活时,要用到这些信息。

此外,TCB还被用来存放任务的"上下文"(context)。

任务的上下文就是当一个执行中的任务被停止时,所要保存的所有信息。

通常,上下文就是计算机当前的状态,也即各个寄存器的内容。

当发生任务切换时,当前运行的任务的上下文被存入TCB,并将要被执行的任务的上下文从它的TCB中取出,放入各个寄存器中。

嵌入式多任务OS的典型例子有Vxworks、ucLinux等。

嵌入式OS并非遥不可及的神坛之物,我们可以用不到1000行代码实现一个针对80186处理器的功能最简单的OS内核,作者正准备进行此项工作,希望能将心得贡献给大家。

究竟选择多任务还是单任务方式,依赖于软件的体系是否庞大。

例如,绝大多数手机程序都是多任务的,但也有一些小灵通的协议栈是单任务的,没有操作系统,它们的主程序轮流调用各个软件模块的处理程序,模拟多任务环境。

单任务程序典型架构
(1)从CPU复位时的指定地址开始执行;
(2)跳转至汇编代码startup处执行;
(3)跳转至用户主程序main执行,在main中完成:
a.初试化各硬件设备;
b.初始化各软件模块;
c.进入死循环(无限循环),调用各模块的处理函数
用户主程序和各模块的处理函数都以C语言完成。

用户主程序最后都进入了一个死循环,其首选方案是:
有的程序员这样写:
这个语法没有确切表达代码的含义,我们从for(;;)看不出什么,只有弄明白for(;;)在C语言中意味着无条件循环才明白其意。

下面是几个"著名"的死循环:
(1)操作系统是死循环;
(2)WIN32程序是死循环;
(3)嵌入式系统软件是死循环;
(4)多线程程序的线程处理函数是死循环。

你可能会辩驳,大声说:"凡事都不是绝对的,2、3、4都可以不是死循环"。

Yes,you are right,但是你得不到鲜花和掌声。

实际上,这是一个没有太大意义的牛角尖,因为这个世界从来不需要一个处理完几个消息就喊着要OS杀死它的WIN32程序,不需要一个刚开始RUN就自行了断的嵌入式系统,不需要莫名其妙启动一个做一点事就干掉自己的线程。

有时候,过于严谨制造的不是便利而是麻烦。

君不见,五层的TCP/IP协议栈超越严谨的ISO/OSI七层协议栈大行其道成为事实上的标准?
经常有网友讨论:
等类似问题。

面对这些问题,我们只能发出由衷的感慨:世界上还有很多有意义的事情等着我们去消化摄入的食物。

实际上,嵌入式系统要运行到世界末日。

中断服务程序
中断是嵌入式系统中重要的组成部分,但是在标准C中不包含中断。

许多编译开发商在标准C上增加了对中断的支持,提供新的关
键字用于标示中断服务程序(ISR),类似于__interrupt、#program interrupt等。

当一个函数被定义为ISR的时候,编译器会自动为该函数增加中断服务程序所需要的中断现场入栈和出栈代码。

中断服务程序需要满足如下要求:
(1)不能返回值;
(2)不能向ISR传递参数;
(3) ISR应该尽可能的短小精悍;
(4) printf(char * lpFormatString,…)函数会带来重入和性能问题,不能在ISR中采用。

在某项目的开发中,我们设计了一个队列,在中断服务程序中,只是将中断类型添加入该队列中,在主程序的死循环中不断扫描中断队列是否有中断,有则取出队列中的第一个中断类型,进行相应处理。

在主程序循环中判断是否有中断:
按上述方法设计的中断服务程序很小,实际的工作都交由主程序执行了。

硬件驱动模块
一个硬件驱动模块通常应包括如下函数:
(1)中断服务程序ISR
(2)硬件初始化
a.修改寄存器,设置硬件参数(如UART应设置其波特率,AD/DA设备应设置其采样速率等);
b.将中断服务程序入口地址写入中断向量表:
(3)设置CPU针对该硬件的控制线
a.如果控制线可作PIO(可编程I/O)和控制信号用,则设置CPU内部对应寄存器使其作为控制信号;
b.设置CPU内部的针对该设备的中断屏蔽位,设置中断方式(电平触发还是边缘触发)。

(4)提供一系列针对该设备的操作接口函数。

例如,对于LCD,其驱动模块应提供绘制像素、画线、绘制矩阵、显示字符点阵等函数;而对于实时钟,其驱动模块则需提供获取时间、设置时间等函数。

C的面向对象化
在面向对象的语言里面,出现了类的概念。

类是对特定数据的特定操作的集合体。

类包含了两个范畴:数据和操作。

而C语言中的struct仅仅是数据的集合,我们可以利用函数指针将struct模拟为一个包含数据和操作的"类"。

下面的C程序模拟了一个最简单的"类":
我们可以利用C语言模拟出面向对象的三个特性:封装、继承和多态,但是更多的时候,我们只是需要将数据与行为封装以解决软件结构混乱的问题。

C模拟面向对象思想的目的不在于模拟行为本身,而在于解决某些情况下使用C语言编程时程序整体框架结构分散、数据和函数脱节的问题。

我们在后续章节会看到这样的例子。

总结
本篇介绍了嵌入式系统编程软件架构方面的知识,主要包括模块划分、多任务还是单任务选取、单任务程序典型架构、中断服务程序、硬件驱动模块设计等,从宏观上给出了一个嵌入式系统软件所包含的主要元素。

请记住:软件结构是软件的灵魂!结构混乱的程序面目可憎,调试、测试、维护、升级都极度困难。

相关文档
最新文档