摘 要:介绍了智能终端的硬件和软件实现,重点说明了μCOS-II在LPC2214" title="LPC2214">LPC2214上的移植以及TCP/IP协议栈的API函数Socket API的工作流程。
关键词:家庭智能终端ARMμCOS-II嵌入实时操作系统 程序层 Socket API函数
智能家居是指利用先进的计算机技术、网络通信技术、综合布线技术,将与家居生活有关的名种子系统有机地结合,通过统筹管理,使家居生活更加舒适、安全、有效。作为小区智能化的重要组成部分,智能家居平台是通过其核心——家庭智能终端实现家居智能化。智能家居终端可实现系统信息的采集、信息输入、逻辑处理、信息输出、联动控制等功能。早期的家庭智能终端网络是基于电话网实现远程监控和远程控制。由于电话网络的带宽限制以及较高的使用成本,使得家庭智能终端无法推广。随着计算机技术和通信技术的发展,基于IP技术的远程通信已经成为家庭智能终端开发的重点。目前,基于8位单片机和TCP/IP协议的远程通信设备已大量出现。但是由于8位单片机工作频率和存储量的限制,使得操作系统和完整的IP协议无法移植,远程监控和远程控制的实时性和大数据量可靠通信难以保证,从而成为家庭智能终端开发的瓶颈。利用成熟的ARM芯片和μCOS-II操作系统,可以有效地解决这一难题。
ARM(Advanced RISC Machines)是精简指令集计算机,它集成了典型的RISC结构特性。除此之外,ARM体系结构还具有地址自动增加和自动减少的寻址模式、多寄存器加载和存储指令等特性。
从最初开发至今,ARM已经经历了5种主要的ARM指令集体系结构,以版本号V1~V5表示。常见的ARM7、ARM9、ARM10、SecurCore系列芯片都是ARM V4以上的体系结构。ARM7TDMI系列芯片是目前应用最广泛的ARM芯片。其广泛应用于多媒体和嵌入式设备,包括Internet设备、网络和调制解调设备以及移动电话、PDA等无线设备。
PLC2214是Philips公司生产的一种高性价比的ARM7TDMI(-S)芯片,主要应用于Internet网关、串行协议转换、访问控制等领域。
1 家庭智能终端的系统结构与硬件组成
1.1 家庭智能终端的系统结构
家庭智能终端是家庭智能化的核心设备,是家庭内部网络与外部网的中转站。它通过各种协议转换模块和组网方式实现各项功能。该文提出的家庭智能终端主要具有以下功能:安全防范、联动控制、远程控制和监控、信息采集、家庭信息管理。外部网络利用局域网与远程终端(用户终端、小区管理终端、收费终端等)进行信息传送。此外考虑到因特网的不稳定性,系统还预留了PSTN接口以增加系统冗余。采用RS-485总线和蓝牙技术实现家庭内部网络,将无线与有线相结合满足更多设备的需要。家庭智能终端的网络系统如图1所示。
1.2 家庭智能终端的硬件实现
本文以LPC2214-S作为中心控制芯片。LPC2214-S是基于实时仿真和跟踪的16/32位ARM7TDMI-S CPU的微控制器,并带有256KB的高速片内Flash存储器。片内128位宽度的存储器接口和加速器结构可实现高达60MHz的操作频率。LPC2214还在片内集成了16KB的SRAM,并且提供了丰富的接口资源,包括2个16C550工业标准UART异步串行口,1个高速I2C接口(400Kbps),2个SPI接口及112个GPIO口。其片内Boot装载程序可实现在系统编程(ISP)和在应用编程(IAP)。此外芯片提供空闲和掉电两种低功耗模式。
由此可以看出,LPC2214-S具有高性能、低功耗、接口资源丰富的特点。这些特点可以较好地满足基于网络的家庭智能终端的设计需要。
作为家庭自动化的控制中心,家庭智能终端除了具有局域网接口、PSTN接口、RS-485接口、蓝牙接口外,还提供音频视频接口、HUB接口、RS-232接口、报警传感器接口等。这些接口可以实现音视频自动切换、多台PC同时上网、与PC机结合完成家庭事物管理等功能。图2为家庭智能终端主控模块的硬件实现图。
1.3 家庭智能终端工作原理
利用基于蓝牙技术的遥控设备或基于RS-485总线的有线键盘,可以设置家庭智能终端的各项参数,打开或关闭485总线或具有蓝牙模块的电器设备,设置报警模块的报警方式、撤布防等。此外遥控设备和键盘上还有紧急求助按钮,可以通过电话和网络向远程管理中心发送报警信号。家庭智能终端还具有联动控制模块,当485总线或蓝牙网络上的一个设备发生某个特定的动作时,可以引发另外一些设备做设定的状态变化,从而达到方便用户和节省能耗的效果。以上介绍的是本地操作的工作原理。关于远程控制和远程监控,本文提供了两种方式:基于电话网络和基于互联网。由于基于电话网络的远程控制和远程监控已经有了大量介绍,这里主要介绍互联网方式的远程控制和监控。
家庭智能终端是通过Web技术提供远程监控和控制服务的。用户在任意一台连接到因特网的PC机上打开Windows IE,登录小区服务器,输入家庭智能终端的IP地址和相关密码,便可以看到智能终端上的Web页。在Web页上可以查看家庭内部网络各种设备的状态,并且可以改变某些设备的状态。这里利用小区网关完成小区局域网与外网的连接,小区内部局域网上的IP地址可以使用私有地址,从而节省费用。
2 家庭智能终端软件设计
嵌入实时操作系统μCOS-II是一种占先式多任务操作系统,可固化、可裁减、移植性好,具有良好的可靠性和稳定性。它支持64个任务,具有信号量、消息邮箱、消息队列等多种进程间通信机制,已经在商业领域得到了成功的应用。由于μCOS-II操作系统本身并不带TCP/IP协议栈,因此在操作系统上需要移植IP协议。本文采用μCOS-II+LWIP来实现家庭智能终端的网络通信。
2.1 家庭智能终端软件的总体规划
家庭智能终端软件部分包括远程通信模块、RS-485通信模块、无线通信模块、232通信模块、报警检测模块、联动控制模块以及电话和语音控制模块。根据以上划分,在μCOS-II操作系统中定义了远程通信任务、485通信任务、232通信任务、报警检测任务、联动控制任务、电话语音控制任务以及蓝牙通信任务。各任务的优先级和堆栈空间分配如表1。
软件设计采用模块化设计,保证程序具有良好的可移植性和可重用性,各种软件模块分别属于不同的程序层。如图3所示,笔者将软件模块分为三个程序集合,即软件的程序层。内层是μCOS-II内核,承担任务管理、内存管理和时间管理功能。应用程序层主要完成数据处理和请求内核服务的功能。中间件层移植和编写各部分通信协议和底层接口芯片的驱动程序。图3中最外围层为硬件接口层,它不是实际的软件层,并不做软件编写工作。智能终端的软件部分非常复杂,由于篇幅所限,本文重点介绍操作系统的移植和远程监控及控制。
2.2 μCOS-II操作系统在LPC2214上的移植
将μCOS-II操作系统移植到PLC2214上需要OS_CPU.H、OS_CPU_C.C、OS_CPU_A.ASM三个文件。OS_CPU.H主要定义不依赖于编译的数据类型、指定堆栈的生长方式以及定义底层接口。
为了具有良好的可移植性,μCOS-II并不使用C语言中的short、int、long等数据类型,而是以整数数据类型代替。PLC2214有四种堆栈形式:满递减、满递增、空递减、空递增,但是ADS1.2编译器只支持满递减堆栈,即选择由上向下增长方式。
定义底层接口是为了在C语言中调用汇编代码高效地完成某些系统服务功能。本文采用软中断指令实现底层接口。底层接口代码如下:
#define OS_CRITICAL_METHOD 2
/*选择开、关中断的方式*/
__swi(0x00) void OS_TASK_SW(void);
/*任务级任务切换函数*/
__swi(0x01) void _OSStartHighRdy(void);
/*运行优先级最高的任务*/
__swi(0x02) void OS_ENTER_CRITICAL(void);
/*关中断*/
__swi(0x03) void OS_EXIT_CRITICAL(void);
/*开中断*/
__swi(0x40) void*GetOSFunctionAddr(int Index);
/*获取系统服务函数入口*/
__swi(0x41) void *GetUsrFunctionAddr(int Index);
/*获取自定义服务函数入口*/
__swi(0x42) void OSISRBegin(void);
/*中断开始处理*/
__swi(0x43) int OSISRNeedSwap(void);
/*判断中断是否需要切换*/
__swi(0x80) void ChangeToSYSMode(void);
/*任务切换到系统模式*/
__swi(0x81) void ChangeToUSRMode(void);
/*任务切换到用户模式*/
__swi(0x82) void TaskIsARM(INT8U prio);
/*任务代码是ARM代码*/
__swi(0x83) void TaskIsTHUMB(INT8U prio);
/*任务代码是THUMB*/
OS_CPU_C.C文件首先根据PLC2214体系结构和ADS1.2编译器定义任务的堆栈结构。在定义堆栈结构的函数:OS_STK OSTaskStkInit(void(*task)void(*pd),void*pdata,OS_STK**ptos,INT16U opt)中定义了一个全局变量OsEnterSum,主要用于对关中断次数进行计数,这样可以实现开中断和关中断的嵌套。此文件也包括实现软中断的详细代码。
void SWI_Exception(int SWI_Num,int*Regs)
{
OS_TCB *ptcb;
switch(SWI_Num)
{
case 0x02:/*关中断函数OS_ENTER_CRITICAL()*/
__asm
{
MRS R0,SPSR
ORR R0,R0,#NoInt
MSR SPSR_c,R0
}
OsEnterSum++;
break;
case 0x03:/*开中断函数OS_EXIT_CRITICAL()*/
if (--OsEnterSum == 0)
{
__asm
{
MRS R0,SPSR
BIC R0,R0,#NoInt
MSR SPSR_c,R0
}
}
break;
……
}
此外,本文件还包括运行多任务时系统启动前调用最高优先级任务的函数void OSStartHighRdy(void)以及几个供用户编写的Hook函数。
OS_CPU_A.ASM包括四个简单的汇编语言函数:调用启动前最高优先级任务函数OSStartHighRdy( ),从低优先级任务切换到高优先级任务的函数OSCtxSw( )、OSIntCtxSw( ),时钟节拍中断处理函数OSTickISR( )。任务切换函数在任务切换之前要利用堆栈保存被切换任务的有用状态。LPC2214具有17个寄存器,但并不是所有的寄存器都需要进入堆栈。为了节省堆栈空间和减少切换时的时间开销,建立了一个任务切换时的堆栈结构,如图4所示。
2.3 远程监控和远程控制
远程监控与远程控制的软件设计采用客户端-服务器方式。TCP/IP协议的传输层有两个数据传输协议:传输控制协议TCP和用户数据报传输协议UDP,二者各有特点。UDP协议是提供最少服务和费用的协议,它不基于连接来传输数据,因此UDP的传送数据是不可靠的。TCP协议是基于连接的双向传输的可靠数据传输协议,但是TCP协议的使用费用较高。在智能终端的设计中,充分考虑了数据传输的便利性和可靠性,并且鉴于ARM系统能够提供足够的资源,根据数据的不同要求,采用了不同的传输层协议。在软件设计中使用Socket API函数来编写UDP和TCP通信任务。TCP和UDP通信时,Socket API的应用流程如图5所示。
家庭智能终端是家庭内外信息交换和家电控制的平台。本文采用Philipes公司的ARM7芯片LPC2214设计了硬件和软件,克服了8位单片机处理速度慢、接口资源和存储资源不足的限制。利用RS-485和蓝牙网络作为家庭内部网络,局域网和电话网络作为外部网络,保证了大数据量传输的稳定性和可靠性,并且兼顾了传统的电话网络远程控制方式。实践表明,系统具有良好的实时性和稳定性,在高端家庭智能终端领域具有巨大的发展潜力。
参考文献
1 周立功.ARM与嵌入式系统基础教程.北京:北京航空航天大学出版社,2004
2 Labrosse J J.μCOS-II源码公开的实时嵌入式操作系统.北京:中国电力出版社,2004
3 王田苗.嵌入式系统设计与实例开发.北京:清华大学出版社,2002
4 厉鲁卫,包建荣.基于ARM嵌入式WEB服务器的研究与设计.计算机工程与设计,2004;25(5)
5 杜春雷.ARM体系结构与编程.北京:清华大学出版社,2003