第一章:POS机系统概述

大家好,我是老张。做嵌入式这行十几年了,POS机这块我摸得最久。今天咱们聊聊POS机里的实时操作系统——说白了,就是让机器在关键时刻不掉链子的那套东西。

你想想看,POS机要是卡了,顾客等着付钱,那场面多尴尬。所以实时操作系统(RTOS)在这里就是命根子。

1.1 实时操作系统在POS机中的应用

POS机不是一台简单的计算器。它要同时干好几件事:

  • 刷银行卡、读IC卡、NFC支付
  • 打印小票(热敏打印机驱动)
  • 触摸屏交互(用户点来点去)
  • 网络通信(4G/WiFi/蓝牙)
  • 电源管理(电池电量监控)

这些任务如果串着来,用户按一下按钮等半天,谁受得了?所以必须用RTOS来调度。我做过一个项目,客户要求刷卡到出票不能超过2秒。嗯,这里要注意,不是所有任务都同等重要——刷卡响应必须最高优先级,打印可以稍微等等。

核心要点:POS机的实时性要求是硬性的。支付超时,交易失败,用户投诉,老板骂人。所以RTOS的选择和配置,直接决定了产品能不能用。

1.2 常见RTOS对比

市面上RTOS不少,但POS机领域常用的就那三四个。我一个个说。

特性 FreeRTOS uCOS-II/III RT-Thread
内核大小 极小(4-9KB) 中等(10-20KB) 中等(8-15KB)
任务数量 无限制 有限(可配置) 无限制
优先级 支持(可配置) 支持(256级) 支持(256级)
抢占式调度
商业许可 免费(MIT) 商业收费 免费(Apache 2.0)
POS机适用性 高(轻量、灵活) 中(稳定但贵) 高(生态好、组件多)

FreeRTOS:我个人习惯用这个。为什么?轻啊!POS机主控芯片往往资源有限,Cortex-M3/M4上跑FreeRTOS,省下来的RAM可以给应用层用。我在一个低端POS机项目里,RAM总共才64KB,FreeRTOS只占了不到5KB,剩下的全给UI和通信栈了。

uCOS:这玩意儿稳定,但贵。我记得有个客户非要指定用uCOS,说通过了什么认证。结果买许可证花了好几万。说实话,对于普通POS机,没必要。

RT-Thread:最近几年火起来的。我建议大家可以试试。它自带文件系统、网络协议栈、甚至还有GUI框架。对于功能复杂的POS机(比如带安卓系统的),RT-Thread能省不少开发时间。

我的建议:如果做低端、成本敏感的POS机,选FreeRTOS。如果做高端、功能复杂的,RT-Thread更合适。uCOS嘛...除非客户掏钱,否则别碰。

1.3 POS机任务模型分析

POS机的任务模型,说白了就是「谁先干、谁后干、谁可以等」。我一般把任务分成三类:

1. 硬实时任务(必须准时)

  • 刷卡数据采集(ISO 7816协议时序严格)
  • NFC通信(13.56MHz射频响应)
  • 安全模块交互(加密运算不能被打断)

这些任务如果延迟超过1ms,交易就可能失败。我曾经遇到一个bug,刷卡时打印任务抢了CPU,结果卡片数据读不全。后来把刷卡任务优先级提到最高,问题解决。

2. 软实时任务(可以稍微等等)

  • 触摸屏响应(用户按了按钮,100ms内反馈就行)
  • 网络心跳包(几秒发一次,延迟点没事)
  • 日志记录(写SD卡,慢点无所谓)

3. 非实时任务(后台慢慢跑)

  • 固件升级检查
  • 电量统计
  • 历史交易数据整理

你想想看,如果所有任务都抢优先级,系统就乱了。所以任务模型设计是第一步。我一般会画一个任务优先级表:

任务优先级分配示例(数字越小优先级越高):
0: 安全模块中断(硬实时)
1: 刷卡/NFC数据采集(硬实时)
2: 触摸屏输入(软实时)
3: 打印任务(软实时)
4: 网络通信(软实时)
5: 日志记录(非实时)
6: 空闲任务(最低)

避坑指南:我曾经犯过一个错误——把打印任务优先级设得太高。结果打印时刷卡数据丢失,交易记录不全。后来才明白,打印可以等,但支付数据一秒都不能丢。所以优先级分配要按「业务重要性」来,不是按「代码复杂度」。

好了,第一章就聊这么多。记住一句话:POS机的实时性不是靠硬件堆出来的,是靠任务调度设计出来的。下一章咱们深入讲讲FreeRTOS在POS机上的具体移植和配置。


公众号:蓝海资料掘金营,微信deep3321