- 1 -
中国科技论文在线
一种小型实时操作系统在智能支付终端上
的应用
周念东,李翔*
作者简介:周念东,嵌入式系统开发与微电子方向
(江苏东大集成电路系统工程技术有限公司,南京 210006)
摘要:随着智能支付电话终端的市场发展和商业竞争,使得低成本和高性能成为产品升级最
主要的两大需求。针对传统的基于前后台系统构架的智能支付终端的技术劣势进行了全面分
析,在原有硬件平台下移植了一种小型实时操作系统,根据产品功能需求重新划分了功能模
块,将不同功能模块定义为不同的任务,各任务看起来“并发”运行,使得系统构架更清晰,
简化了应用开发和代码维护工作量。将内存预分配为大小不同的内存块,并采用了动态内存
管理技术,实现了内存优化,提高了智能支付终端性价比。
关键词:嵌入式系统;实时操作系统;uC/OS-II;智能支付终端;任务调度
中图分类号:
Application of A Mini Real-time Operating System to
Intelligent Payment Terminal
Zhou Niandong, Li Xiang
(Jiangsu Dongda Integrated Circuit System Engineering Technology Co.,Ltd.,NanJing 210006)
Abstract: With the market development and business competition of intelligent payment terminal
device, low-cost and high-performance become the two major requirments. The technology
disadvantages of traditional payment terminal based on foreground-background system architecture are
analyzed in this essay, working on original hardware platform it proposes a renovation method for the
application of a mini real-time operating system, and according to product requirements the essay
divides out function modules and defines every function module as different task, all tasks run as
parallel processing. This will make system archtecture clear, application developing and code
management simply. Using different size memory buffer and dynamic memory management
technology to optimize memory, and all these improve the performance price ratio of intelligent
payment terminal.
Keywords:Embedded system;Real-time operating system;uC/OS-II;Intelligent payment terminal;Task
scheduling
0 引言
智能支付电话终端是在电话机外形基础上,增加磁条卡刷卡器、IC 卡读卡器、加密芯
片和热敏打印机等功能模块,依托于公共电话网络和银行内部以太网络,实现转账、余额查
询、代理缴费、贷记卡还款等金融服务功能的智能自助设备。近年来,随着银行卡应用的推
广和用卡环境的改善,人们越来越热衷于持银行卡购物和消费,使得这种具有金融支付功能
的智能支付设备越来越受到青睐。据不完全统计,截止到 2009 年底,智能支付终端需求的
年均增长率超过 30%,预计在未来 2-3 年,终端投放数量仍将保持高速增长。另一方面,随
着行业市场的成熟,越来越多的研发企业和终端厂商加入到这个行业,面对越来越激烈的商
业竞争,在功能、性能的提升和价格的降低方面对产品进行更新换代的要求也越来越强烈。
因此,在现有的硬件资源条件下,充分挖掘软件的技术潜力提升产品性价比显得尤为重要。
- 2 -
中国科技论文在线
1 传统智能支付终端的技术不足
传统的智能支付终端采用前后台系统构架应用软件。前台为应用处理系统,包含一个
While 循环语句,通过不同的事件轮询函数检测不同的事件标志,以获得某时刻发生的外部
设备事件,然后调用事件处理函数进行处理。后台一般体现为中断服务例程,在外部设备事
件发生时触发硬件中断产生,使得对应的中断向量表指向的中断服务例程执行,在中断服务
例程中设置事件标志。前台处理程序调用多个轮询检测函数读取到事件标志和设备数据,这
些事件标志和设备数据被缓存到一个全局的消息缓冲区中。前台处理函数根据消息缓冲区中
事件消息类型调用对应的功能模块函数,同时使得更多的处理函数被执行。
采用这种前后台系统构架的应用软件有较多弊端。首先,每一个事件检测函数处理时间
是不确定的,也就是说大循环执行一次的时间是不可预期的,这导致事件的检测周期是不固
定的。较长的检测周期容易漏掉重要事件,这在某些时候是很危险的。其次,每次循环可能
会检测到多个消息却只处理一个消息,这使得生产者和消费者的效率不一致。对于这种情况,
有两种策略经常被采用:一种是消息缓冲区写指针对读指针覆盖,这会导致早期发生的而没
有来得及被处理的事件被当前新写入消息覆盖;另外一种处理是将当前的消息抛弃,直到消
息缓冲区中的消息在后面的处理循环中被处理掉,但是,当中断连续发生消息不断产生时,
情况就变得非常糟糕,这对于一些重要事件,比如刷卡或网络数据到来时,这种不断抛弃消
息的做法是不被允许的。再次,如果事件是在该事件检测函数刚执行过就发生,它必须等到
函数再执行时才会被检测到,这几乎没有实时性可言。最后,某一个事件检测函数的程序改
动会对其它事件检测函数的执行产生时域上的关联,代码的维护变得尤为复杂。
采用基于任务调度的小型实时操作系统可以解决上述问题。将各个功能模块和检测函数
用独立运行的任务来实现,根据任务的紧急程度和重要性分配不同的优先级,采用合理的任
务调度机制,使得多个任务看起来在“并发”运行,功能模块的独立性和运行的实时性能得
到很好的保证,多任务“并发”执行更能发挥 MCU 内核的处理性能。另外,采用实时操作
系统的内存管理技术可以实现内存的动态管理,对 RAM 的利用效率会更高,相同的功能需
求下对 RAM 空间的需求可以降低,某些时候能通过降低芯片配置来降低 BOM 成本。同时,
采用操作系统支持的文件系统可以很方便的进行文件存储管理,可提高数据存取的安全性和
便捷性。最后,在实时操作系统支持下,采用任务同步和通信的事件操作函数可以很好的将
应用层程序同慢速的外部设备访问分离,系统性能和用户体验能得到较大提升。
2 实时操作系统 uC/OS-II 介绍
目前,应用于嵌入式设备的操作系统有 RT-Linux、LynxOS、VxWorks、WinCE、PalmOS、
Symbian、pSoS、uClinux、QNX、eCos、uC/OS-II,品种相当多,尤其是后面的四种小型实
时操作系统在很多低端处理器平台产品上得到了广泛应用,这其中又以 uC/OS-II 用户最多,
被移植到了包括 51 在内的单片机和 ARM 核的微处理器平台上。因此,笔者将 uC/OS-II 这
种小型实时操作系统应用到了智能支付终端上。
uC/OS-II 的前身是 uC/OS,在 1992 年由美国 Jean 在杂志《嵌入式系统编程》
上公开的一种开放源代码的实时操作系统,它给任务分配不同的优先级,根据资源到来时依
赖此资源的任务的优先级高低不同进行任务调度,使得最高优先级的任务得到执行,实现了
一种基于优先级的可抢占的实时操作系统内核。在操作系统内核实现的基础之上,uC/OS-II
提供了诸如信号量、邮箱、消息队列、内存管理、中断管理等系统服务。绝大部分代码由 C
- 3 -
中国科技论文在线
语言写成,汇编代码大约在 200 行,这使得 uC/OS-II 在不同 MCU 平台上移植较为方便。另
外,uC/OS-II 最小的内核配置编译小至 2KB,具有代码量少、结构小巧和生成的可执行镜
像文件小等特点。将 uC/OS-II 实时操作系统应用于智能支付终端以改造目前的前后台系统
构架,对优化应用软件设计、提高系统的响应速度、减小应用开发复杂度和降低产品成本等
方面具有可行性。
3 基于 uC/OS-II 的应用设计
系统功能
智能支付终端除了具有普通电话机功能外,还具有短消息收发、电话簿、来电号码显示、
通话记录、呼叫限制、液晶对比度调节、分机预拨号设置、时钟和日期、特色铃声以及闹铃
等功能。支付终端需要存储服务中心号码和终端编号。通过串口可以向 ESAM 卡发放密钥,
交易时通过 ESAM 卡完成随机数生成和数据加密,通过刷卡器完成磁条卡轨道信息读取,
并具有热敏式打印机,可打印交易凭条。通过 FLASH 存储器可存储 GB2312 汉字字库和系
统配置参数。具有防入侵功能,当发现有外部侵入时(如非法打开机具外壳或电磁探测),
主动销毁加密密钥等敏感信息,并使终端处于锁定状态。
智能支付终端由刷卡器、液晶显示屏、矩阵键盘、ESAM 卡加密、热敏打印和无线通信
Modem 等硬件功能模块组成,硬件框图如图 1 所示。
图 1 硬件系统框图
应用设计
1)任务定义与资源变量声明
根据系统功能需求,将应用系统分成包括主应用处理任务在内的 6 任务。其中,在主应
用处理任务中实现电话和短消息等功能。按模块划分任务如下:
(1) 主应用处理任务 AppHandlerTask
(2) 液晶显示任务 LCDTask
(3) 键盘扫描任务 KpdScanTask
(4) ESAM 卡加密任务 ESAMTask
(5) 刷卡器任务 MagCardTask
(6) 通信数据接收任务 ModemCommTask
(7) 为了便于任务间通信,创建系统服务如下:
微处理器 MCU
刷卡器
热敏打印机 ESAM 加密芯片
键盘
RTC
FLASH 存储器 Modem
通信串口
入侵监测
- 4 -
中国科技论文在线
(1)应用消息邮箱 AppMsgMbox
(2)液晶显示信号量 LCDSem
(3)键盘扫描信号量 KpdSem
(4)ESAM 卡指令请求消息邮箱 ESAMReqMbox
(5)ESAM 卡指令返回消息邮箱 ESAMResultMbox
(6)ESAM 卡资源互斥信号量 ESAMMutex
(7)刷卡器信号量 MagCardSem
(8)Modem 数据消息队列 ModemCommQbox
(9)Modem 数据接收信号量 ModemCommSem
(10)Modem 通道资源互斥信号量 ModemCommMutex
定义全局的数据结构体如下:
typedef enum {
APP_KEY = 0,
APP_MAGCARD,
APP_ESAM,
APP_MODEM,
APP_PRINTER
} APP_MSG_T;
typedef enum {
MODEM_ATRESP,
MODEM_RING,
MODEM_SMS,
MODEM_STATUS,
MODEM_IPDATARCV
} MODEM_MSG_T;
typedef struct {
MODEM_MSG_T type;
INT8U *buf;
INT16U len;
} Modem_Comm_T;
typedef struct {
APP_MSG_T type;
INT16U value;
INT32U mParam;
INT32U wParam;
} App_Handler_T;
2) 主应用处理任务
主处理任务模块通过 AppMsgMbox 邮箱接收其它任务发送的消息,这些消息包括按键、
刷卡、串口数据接收等,根据消息数据结构体和当前的功能模块,将消息分发给相应的处理
函数。在处理函数中,根据消息数据结构体中的数据做更新显示界面或数据逻辑处理等操作。
处理函数是各个功能模块工作的主体,它总是在等待自己期待的事件消息到来。主处理任务
模块进行消息的接收和消息分发,系统声明一个全局的功能模块数据结构体指针,总是指向
当前的功能模块数据结构体,消息分发时主处理任务模块根据该指针将消息分发给该功能模
块数据结构体指向的功能操作函数,并调用该操作函数运行。系统定义有消息发送操作函数、
- 5 -
中国科技论文在线
功能模块注册函数。
3) 液晶显示任务
MCU通过模拟 SPI接口读写 128×64分辨率的液晶显示屏。液晶显示任务等待LCDSem
消息的到来,当写信号量消息到来时,将显示缓冲区数据写到 LCD 液晶屏,完成全屏数据
的显示刷新。功能模块向 LCD 写数据时仅将内容发送到显示缓冲区,只有在需要更新屏幕
显示时才发送 LCDSem 写 LCD 信号量,以调度液晶显示任务执行一次。
4) 键盘扫描任务
设计有 4×5矩阵键盘,通过占用 9个 GPIO 口的四行五列矩阵键盘实现 20个功能按键。
四根行线作为输入中断脚接入 MCU,当有按键按下时触发中断,在中断例程子函数中发出
KpdSem 键盘消息信号量。键盘任务接收到该信号量执行键盘扫描函数经过去抖和行列扫描
获得键值后,将按键消息类型和键值封装成一个 AppMsgMbox 邮箱消息投送,主应用程序收
到该邮箱消息后,将其转发给当前显示界面。
5) ESAM 卡处理任务
ESAM 卡芯片接收 MCU 发过来的处理指令,并将处理结果返回,由于处理过程需要一定
的时间,这里将 ESAM 卡这种慢速设备的服务函数也设计成任务形式,可以改善主处理程序
的实时性。定义 ESAM 卡指令请求消息邮箱和 ESAM 卡指令返回消息邮箱,当需要加密时,首
先通过加密资源互斥信号量申请加密器资源,当资源可用时将加密数据缓冲区指针和数据长
度封装到邮箱投送,并等待加密结束邮箱事件到来。ESAM 卡加密任务接收到加密启动邮箱,
会从邮箱中取出加密明文数据缓冲区指针和明文长度,调用 TPDU 加密指令完成加密,密文
数据放置到动态申请到的内存缓冲区,并将缓冲区指针和密文数据长度通过加密结束邮箱投
送,主处理任务接收到加密结束邮箱,将密文收下并释放加密资源互斥信号量,以便其它任
务申请加密器。这样,一次完整的加密过程完成。
6) 刷卡器任务
当用户刷磁条卡时,磁头会产生电平变化触发中断,在中断服务例程中发出 MagCardSem
信号量,并将中断标志清除,在中断返回时,进行任务调度,刷卡器任务得到该信号量进行
对磁条卡磁道信息的扫描,获得轨 2轨 3的数据,当经过数据校验之后向主应用处理任务发
送 AppMsgMbox 邮箱消息,该邮箱消息体内带有消息类型(刷卡消息)和指向轨 2轨 3数据
结构体指针。
7) 通信数据接收任务
通信数据接收任务配合 Modem 中断服务例程接收网络上来的数据和电话短信等通信事
件。定义通信数据消息邮箱 Modem_Comm_T,包括数据类型、数据缓冲区指针和数据长度。
当有电话或短信来时,模块的 RING 脚会由高电平变低,产生一次硬件中断,通信中断子例
程被调用,在该函数中发送信号量 ModemCommSem,通信数据接收任务在收到 ModemCommSem
后,从数据寄存器中读取数据并清除中断标志,读取到的数据保存到全局的数据缓冲区。
Modem 向 MCU发送的数据应该是以 0x0d,0x0a 开始并 0x0d,0x0a 结束的,这里将依据该格式
判断数据的有效性。根据数据报文 0x0d,0x0a 之后的从第三个字节开始的数据引导头将数据
分为三类:(1)以"+IPD"为引导头的数据为数据业务返回的报文;(2)以“AT”为引导头
的数据为 AT 指令返回码;(3)以“+”开始但不是“+IPD”则认为是模块事件通知消息,
如来电、新短信等。将消息类型和数据正文封装为 ModemCommQbox 消息队列发送。主应用程
序(任务)或数据发送函数被调用的程序(任务)得到该消息队列而被调度到运行态,将数
据拷贝下来并通过互斥信号量释放通信模块资源 ModemCommMutex,这时通信数据接收任务
- 6 -
中国科技论文在线
再次得以调度执行,并等待下一个 ModemCommSem 到来。
4 基于 uC/OS-II 的内存优化
在 ANSI C 中是使用 malloc 和 free 两个函数来动态分配和释放内存。但在嵌入式实时系
统中,多次这样的操作会导致内存碎片,且由于内存管理算法的原因,malloc 和 free 的执行
时间也是不确定。系统总的 RAM 大小为 16KB,6 个任务占用的栈内存大约为 512Bytes,
通信模块全局数据缓冲区大小定义为 1KBytes,在余下的内存中预定义 4 种大小不一样的二
维静态数组,大小分别为 16×16Bytes,8×64Bytes、8×256Bytes 和 4×1KB,这四个内存
块共用掉 9KB 内存,剩下的内存用于其它全局变量和数组。在涉及到内存操作时,尽量定
义数据指针,并采用内存动态申请的办法,从前面预定义的内存中申请指定大小的内存,在
使用完毕之后记得释放它们。为了防止指定大小的内存块全部被其它任务申请完毕而导致申
请失败,这里对内存设置信号量控制,每次申请内存时首先请求信号量,当指定数量的信号
量用完时则等待其它任务释放内存后再继续运行。采用这种办法可避免申请内存失败。实践
证明,基于 uC/OS-II 内存管理函数对内存进行动态管理,可以有效利用内存,内存利用率
得到了提高。
5 结论
现代嵌入式系统产品开发理念是融合计算机技术、微电子技术、通信技术和网络技术,
将操作系统和应用软件集成于硬件系统中,综合考虑功能、性能、功耗和成本等因素,将软
件代码最少化、功能智能化和响应实时化,以提供性能最优、功能最全而成本最低的产品实
施方案。本文探讨了在智能支付终端上应用一种小型实时操作系统的技术和方法,分析了功
能模块划分和多任务通信管理,完成了小型实时操作系统在低端微处理器上的技术分析和实
现,对于其它同类产品的技术改造和产品升级具有一定的参考价值。
[参考文献] (References)
[1] ANDREW ALBERT 著,王鹏,尤晋元,朱鹏,敖青云译校,操作系统:设计
与实现(第二版)(上、下册)[M].电子工业出版社,2004,(2).
[2] Jean J. Labrosse 著,uC/OS-II-源码公开的实时嵌入式操作系统[M].劭贝贝译.北京:中国电力出版
社,2001.
[3] 任哲.嵌入式实时操作系统 uC/OS-II 原理及应用[M].北京:北京航空航天大学出版社,2005.
[4] uC/OS-II[OL].