物联网概论 第2版
上QQ阅读APP看书,第一时间看更新

4.5 嵌入式系统的开发

嵌入式系统的应用开发按其硬件的不同主要分为单片机平台上的应用开发与智能操作系统上的应用软件开发。单片机上的应用开发更贴近于对底层硬件的直接操作,主要使用汇编语言或C语言进行开发。智能系统上的开发近似于PC上应用软件的开发,使用的开发语言更为高级,底层功能的操作也比较少。

4.5.1 单片机平台上的嵌入式系统应用开发

单片机是无线传感器设备的重要组成部分,其典型的特点是功耗低、成本低、体积小和自组网等,充分适用于小型控制与监控系统的运行与应用。基于单片机上的嵌入式系统开发涉及硬件和软件两个方面。

1.硬件设备

嵌入式设备中最常见的单片机是MCS-51系列单片机。51系列单片机具有标准化的设计体系,拥有完备的地址总线和数据总线,便于外部扩展,其指令处理方式与Intel推出的高端处理器处理方式基本相同。51系列单片机具有一套完整的位处理器,也可称为布尔处理器。在处理数据时,处理的对象不是字或字节,而是位。因此,51系列单片机可以高效地对片内具有特殊功能的寄存器进行置位、复位、传输、测试及逻辑运算等操作,提高了单片机的处理效率。目前,很多嵌入式系统的专用核心芯片在其芯片内部集成了MCS-51微处理器。

AVR系列单片机是Atmel公司推出的一款单片机,主要特点是高性能、高速度和低功耗。它通过用时钟周期替代机器周期,作为指令周期,采用流水化作业模式,大大缩小了指令执行的平均时间,提高了数据运算的速度。与MCS-51系列单片机相比,AVR单片机仅有32个通用寄存器,而51系列单片机有128个通用寄存器,AVR在处理复杂程序时性能有所降低。AVR单片机大部分的指令都是单周期指令,通常时钟范围为4~8 MHz,被广泛应用于无线传感器网络结点设备上。

2.软件环境

单片机的软件开发涉及开发环境和开发语言的选择。结合所使用的单片机产品,选择一个合适的开发工具能够达到事半功倍的效果。早期的单片机使用汇编语言进行开发,再通过汇编软件把程序员的汇编程序转换为单片机可以识别并执行的机器语言(常保存为bin或hex格式)。常见的MCS-51单片机的汇编软件是A51。

使用汇编语言开发单片机应用是一个比较冗繁的工作,往往一个简单的乘除法需要大块的代码才能够实现,极大地影响了软件开发的效率。随着单片机技术的发展,高级语言逐渐被引用到了单片机应用开发中,目前C语言已成为单片机开发的主要编程语言。与汇编语言相比,C语言具有较高的可读性和可维护性,在功能和结构上也有比较大的优势,当然,C语言程序在效率上往往低于汇编程序,同样功能的总代码生成量,汇编程序会比C语言程序低20%左右。

选择一种开发语言后,接下来需要选择一个开发平台。开发平台能够提供源代码的编译、链接和目标代码生成等功能,并将目标代码下载到指定单片机或接口上,同时提供仿真及目标调试功能。常见的单片机开发平台有ICC、CVAVR、GCC和Keil uVersion等。

ICC集成开发环境包括一个Application Builder的代码生成器,可以设置微处理器(MCU)所具有的中断、内存、定时器、I/O端口、异步串口(UART)和SPI等外围设备,从而自动生成初始化外围设备的代码,简化了程序的初始配置功能的开发。此外,ICC通过环境中所带的一个终端程序,可以发送和接收ASCII码,提供了对设备的调试功能。

CVAVR是一个针对AVR单片机的集成开发环境,内带一个CodeWizard代码生成器,可以生成外围器件的相应初始化代码,风格类似于Keil C51代码。CVAVR集成了较多常用的外围器件操作函数和一个代码生成向导,同时集成了串口/并口AVRISP等下载烧写功能,简化了开发工作。

3.开发实例

下面以IOT-SCMMB型单片机开发板为例,使用WinAVR集成开发环境,介绍基于单片机的嵌入式应用软件的开发流程。

单片机开发板IOT-SCMMB的构造如图4-3所示,它基于低功耗微处理器芯片ATmega128A,射频部分提供统一射频接口,可支持CC1000与CC2420射频模块,极大地方便了不同用户的需求。另外,开发板上集成了步进电动机、数码管、USB口、串口、LCD液晶、蜂鸣器、LED小灯和传感器板接口等。整个系统采用了通用的接口插槽,将传感、处理和通信等模块分离开,可以按照不同的应用需求进行不同的扩展。

图4-3 IOT-SCMMB型单片机开发板结构实物图

IOT-SCMMB开发板的参数特征主要包括:8位RISC结构的处理器ATmega128A;存储芯片为128K闪存、4K EEPROM、4K内部SRAM;支持可替换的CC1000与CC2420射频模块,方便不同应用的需求(433 M、2.4 G频段开发);支持高精度温湿度、三轴加速度和陀螺仪等传感器,可方便用于环境监测、定位等应用;配有带中文字库的LCD,支持LCD液晶屏实时显示功能;支持USB与UART等串口,方便笔记本计算机等的调试;供电方式为+9V电源适配器。

开发应用软件的步骤如下。

1)在计算机上安装软件开发环境WinAVR和AVRStudio软件,以便进行程序的编译和调试。

2)利用开发环境调试C语言程序。

3)把C语言程序编译成*.hex文件,即在单片机上可执行的程序。

4)把编程器的JTAG插头插到开发板上的JTAG插口中,把JTAG插口右侧的白色开关拨到左侧,把编程器通过串口连接到计算机上。

5)利用开发环境把*.hex文件下载到开发板上。

6)测试程序在开发板上的运行情况。

4.5.2 智能终端上的嵌入式系统应用开发

智能手机、云电视、智能冰箱、智能抄表、机顶盒及导航仪等都是基于嵌入式操作系统的嵌入式设备。基于智能平台的开发主要是在嵌入式操作系统上进行的应用软件的开发,目前市场上常见的智能终端平台主要包括Windows Phone 7、iOS和Android等操作系统。

1.智能终端开发平台

每种嵌入式操作系统都有自己所特有的开发语言和开发平台。下面介绍Windows Phone 7、iOS和Android的开发环境。

(1)Windows Phone 7系统

1)Windows Phone 7系统上的应用软件主要使用C#作为其开发语言。C#是微软开发的一种计算机高级语言,它主要是从C和C++继承而来的,同其他计算机语言相比,C#更像Java,同属于面向对象的计算机编程语言。

Windows Phone 7系统上的应用开发仅能够在Windows Vista和Windows 7操作系统上进行。Windows Phone Developer Tools CTP开发组件包括调试运行的设备模拟器、基于XAML(微软公司为构建应用程序用户界面而创建的一种新的描述性语言)的事件驱动应用程序开发平台和游戏开发平台等。

Windows Phone 7系统的集成开发环境是Visual Studio 2010 Express for Windows Phone,它包括C#和XAML代码编辑功能、简单界面的布局与设计功能、编译开发程序、手机模拟器、部署程序,以及调试程序等功能。同时,微软为开发者与用户提供了免费版的Visual Studio(可视化集成开发环境)和SQL Server(数据库服务器)。

(2)iOS系统

2)iOS系统上的应用程序使用Objective-C语言编写。Objective-C简称OC,支持面向对象编程,提供了定义类、方法和属性的语法。Objective-C是C语言的超集,因此很容易将C甚至C++代码添加到iOS的应用程序里。iOS系统上的应用程序框架重用了许多Mac操作系统的成熟模式,但是它更多地专注于触摸的接口和优化,因此使得苹果手机和其他苹果智能产品获得了更为流畅的用户体验。

iOS系统上的软件开发平台主要是在安装有Mac操作系统的苹果计算机上进行,也可以在装有Windows系统的计算机上安装虚拟机(一种安装在已有的操作系统之上,用于构建其他操作系统环境的软件),通过在虚拟机上安装Mac系统来构建iOS操作系统的开发环境。

iOS系统的开发环境是Xcode,它是iOS系统的开发工具套件,支持项目管理、编辑代码、构建可执行程序、代码级调试、代码的版本管理和性能调优等。开发iOS应用首先需要下载iOS SDK(软件开发包),之后在Mac系统计算机上运行Xcode开发工具,开发好的应用既可以在苹果的智能终端上运行调试,也可以在iOS SDK提供的苹果手机模拟器上测试。

(3)Android系统

3)Android系统主要使用Java语言开发软件应用,当然,通过NDK(Android对外发布的本地开发包),开发人员也可以使用C语言进行软件应用开发。Android系统上的基于Java语言开发的应用软件不同于其他的Java程序,Android系统上使用Java开发的程序是运行在Android系统底层的Davik虚拟机上的,而其他系统平台上的Java程序主要是运行在JVM虚拟机上的。Davik虚拟机更适合于嵌入式设备,能够使嵌入式设备上的Java程序运行效率更高。

Android系统上的应用开发可以在多种操作系统上进行,如Windows、Linux等。基于Java的开发环境主要是eclipse。eclipse是一个开放源代码的、基于Java的可扩展开发平台,开发者通过各种插件组件构建相应的开发环境。在Android系统应用开发方面,开发者通过在eclipse上安装安卓开发工具(Android Developer Tool,ADT)插件,完成系统开发环境的搭建。

2.Android系统开发实例

在Android操作系统上进行嵌入式应用开发,可以通过SDK开发包使用Java语言实现,也可以通过NDK开发包使用C语言实现。本实例将采用Java语言完成实例程序开发流程的演示,具体开发步骤如下。

1)下载JDK 6 Update 27开发包(用于提供Java语言支持)、eclipse-jee-indigo-win32.zip(eclipse IDE软件开发环境)、android-sdk_r12-windows.zip(Android SDK Android系统上软件应用开发支持包),以及ADT12.0.0(用于搭建eclipse开发Android应用环境的eclipse插件),做好开发环境搭建的准备工作。

2)安装下载好的JDK 6 Update 27,搭建Java运行环境,解压eclipse-jee-indigo-win32.zip,启动Android系统集成开发工具。

3)解压android-sdk_r12-windows.zip,启动Android系统SDK开发包管理软件,在线下载Android SDK开发包。

4)安装ADT插件,启动Android系统集成开发工具eclipse,配置eclipse开发环境参数,加载Android SDK和JDK。

5)应用eclipse开发工具编写和编译Android系统应用程序。

6)启动模拟器,将应用软件发布到Android模拟器上,调试并运行应用软件。模拟器的运行效果如图4-4所示。

图4-4 Android智能系统平台实例软件运行效果