面向接口的编程——平台技术、开关量信号
其目的是不依赖于具体的底层硬件,实现"一次编程、终生使用"和"跨平台",通过高度复用应用软件组件,从而将程序员从苦海中释放出来,使之聚焦于更有竞争力的需求分析、算法和用户体验等业务逻辑上。行业合作伙伴可以在该平台上开发各种应用,通过有线接入和无线接入收集、管理和处理数据。
由于AWorks 提供的所有组件均使用静态内存,不使用malloc()等动态内存分配函数,彻底避免了内存泄漏。且程序编译完成后,即可知道系统运行需要占用多大的内存。AWorks是轻量级的实时系统,所有组件对初始化都进行了优化,系统能以极短的时间启动,因此在绝大部分项目中,启动时间<1s。显然系统运行时的实时性,确定性得到了最大的保障。
2. AMetal 的特点
AMetal 是AWorks 的子集,它是以API 的形式提供的,但不依赖AWorks。即:
-
将外设操作标准化,无需再次开发上层软件、驱动;
-
AMetal 作为AWorks 标准化的外设功能补充,可以直接调用;
-
可作为独立发布的软件包。
其特点为:
-
能独立运行的AMetal,提供工程模板与demo,在此基础上开发应用程序;
-
不依赖操作系统服务,将外设的所有特性开放出来;
-
封装时将效率和变化部分放在第一位,用户不看手册也能使用。
AMetal 在嵌入式软件开发中的位置详见图4.3,它位于底层硬件和上层软件之间,可以被应用程序与操作系统直接调用。AMetal 包括两部分,即AMetal API 和AMetal 组件。
图4.3 AMetal 在嵌入式软件开发中位置
AMetal API 重在抽象MCU 本身的功能部件,比如,GPIO、SPI、UART、I2C 等,程序员再也不用查看芯片手册就能编写外围器件驱动程序。AMetal 组件重在抽象外围扩展接口器件,比如,E2PROM、SPI NOR Flash、PCF85063 RTC、zigbee、BLE、键盘扫描与LED显示器电路等,程序员再也不用看原理图和编写外围器件驱动程序。
AMetal 提供的不仅仅是某个MCU 的软件包,而是一套接口规范,因此只要遵循AMetal 标准化接口函数规约,无论所用的MCU 是ARM还是DSP 或其它的内核,则应用软件均可实现复用。
如图4.4 所示的AMetal 框架分为硬件层、驱动层和标准接口层,上层软件根据需求调用合适的API 接口。三层都有对应的头文件和用户配置文件,供用户引用相应的接口。虽然各大半导体公司针对各自的MCU,提供了类似AMetal 这样的裸机API,但每个新的MCU,其API 的差异很大,因此很难做到复用应用软件。
图4.4 AMetal 框架
这里以GPIO 为例,给出相应的的文件结构图,详见图4.5,AMetal 其相应的文件有:HW 层文件、驱动层文件和用户配置文件。通常情况下,HW 层提供了直接操作硬件寄存器的接口,接口实现简洁,往往以内联函数的形式放在.h 文件中,因此,HW 层通常只包含.h文件,但当某些硬件功能设置较为复杂时,也会提供对应的非内联函数,存放在.c文件中。驱动层作为中间层,其使用HW 层接口,实现了标准接口层中定义的接口,以便用户使用标准API 访问GPIO。用户配置文件完成了相应驱动的配置,如引脚数目等。
图4.5 GPIO 文件结构
标准接口层对常见外设的操作进行了抽象,提出了一套标准API 接口,可以保证在不同的硬件上,标准API 的行为都是一样的。用户使用一个GPIO 的过程:先调用驱动初始化函数,后续在编写应用程序时仅需直接调用标准接口函数即可。可见,应用程序基于标准API 实现的,标准API 与硬件平台无关,使得应用程序可以轻松的在不同的硬件平台上运行。
4.2 开关量信号
>>> 4.2.1 I/O 输入输出
嵌入式系统的主要功能就是要实现对现实事件的监控,如同没有配置显示器、打印机或键盘的台式计算机一样,嵌入式系统必须具备输入输出(I/O)数字信号和模拟信号的能力。LPC824 系列MCU 可用的GPIO 数目,具体取决于芯片的封装类型,详见表4.1。
表4.1 GPIO 引脚
其特性为:
(1)每个GPIO 引脚均可通过软件配置为输入或输出;
(2)复位时所有GPIO引脚默认为输入;
(3)引脚中断寄存器允许单独设置;
(4)可以独立配置每个引脚的置高和置低。
当LPC824 系列MCU 的I/O 口作为数字功能时,可配置为上拉/下拉、开漏和迟滞模式。在输出模式下,无论配置为哪种模式,I/O 口都可输出高/低电平。在输入模式下,且引脚悬空时,I/O 口设置为不同模式时,其情况为:
(1)设置为高阻模式时,读取引脚的电平状态不确定;
(2)设置为上拉模式时,读取引脚的电平状态为高电平;
(3)设置为下拉模式时,读取引脚的电平状态为低电平;
(4)设置为中继模式时,如果引脚配
编程 相关文章:
- 基于单片机的可编程直流稳压电源设计(08-17)
- 利用可编程电源平衡输入纹波电流的解决方案(09-11)
- 可编程电源设计(01-12)
- NXP (Freescale) i.MX7 96Board(05-17)
- 可编程逻辑控制器(PLC)基本操作及功能简介(03-07)
- 分析机器人离线编程误差来源(06-28)