硬件层面的“硬骨头”被一一啃下,“蜂鸟一号”Soc的硅片本身已经证明了其强大的物理基础。然而,正如林轩反复强调的,芯片的价值最终需要通过软件来体现。特别是对于功能手机而言,那套复杂而精密的通信协议栈软件,以及运行于其上的操作系统和应用程序,才是真正决定用户体验和产品竞争力的“灵魂”。
将这套庞大而对实时性、稳定性要求极高的软件系统,完美地移植、集成并优化到全新的“蜂鸟”硬件平台上,成为了项目组下一阶段的核心任务。这项重担,主要落在了基带负责人张建华和他麾下的协议栈团队,以及小张(张明)领导的应用与嵌入式系统团队肩上。
启明芯深圳研发中心,软件实验室区域。这里的氛围与硬件测试区不同,少了几分仪器的蜂鸣和示波器的闪烁,多了键盘密集的敲击声和工程师们低声讨论代码逻辑的声音。空气中弥漫着代码编译的味道和…似乎永不枯竭的咖啡香气。
张建华团队面临的首要挑战,是如何将那套融合了收购来的以色列公司早期3G技术(可能主要是wcdmA物理层和部分协议栈Ip)和团队自主开发的GSm\/GpRS协议栈的复杂软件,高效地运行在“蜂鸟”的ARm9内核上,并与硬件基带处理器(dSp和专用加速器)实现天衣无缝的协同。
“内存!内存!还是内存!”负责协议栈底层移植的工程师小王,看着编译器报告中那超过了片上SRAm容量的代码段(code Segment)大小,痛苦地抓着本就不多的头发,“完整的L1\/L2\/L3协议栈,再加上RtoS内核和驱动,怎么塞都塞不下!必须砍功能吗?”
“不能砍核心功能!”张建华斩钉截铁地说,“GSm\/GpRS的兼容性是底线!想办法优化!把所有能优化的空间都给我榨出来!”
一场针对代码尺寸和内存占用的极致优化攻坚战开始了。
编译器优化拉满: 工程师们尝试了Gcc ARm工具链提供的所有优化选项(-os, -o2, -o3),仔细比较每种选项对代码尺寸和性能的影响,寻找最佳平衡点。 汇编级手动优化: 对于协议栈中那些被频繁调用、对性能影响最大的关键函数(如信道编译码、加密算法的核心循环),甚至不惜动用ARm汇编语言进行逐条指令的手动优化,以追求极致的代码密度和执行效率。 数据结构精简: 重新审视协议栈中使用的各种数据结构(如状态变量、消息队列、缓冲区),用位域(bit Field)、联合(Union)等技巧,将内存占用压缩到最小。 代码共享与库化: 仔细检查代码库,将重复的逻辑或功能封装成可重用的函数库,减少代码冗余。 功能裁剪的艺术: 在保证核心通信功能和标准兼容性的前提下,对一些很少使用或优先级不高的协议特性(比如某些冷门的GpRS服务等级或网络信令选项),暂时进行功能屏蔽或采用更简单的实现,待后续版本再完善。 经过数周艰苦卓绝的“抠内存”工作,协议栈软件的静态尺寸终于被成功压缩到了可以容纳进预定内存空间的范围。
解决了空间问题,接踵而来的是更严峻的实时性能挑战。移动通信协议对各种信令交互和数据处理的响应时间有着“毫秒必争”的苛刻要求。
“中断响应太慢了!”负责L1(物理层)软件的工程师报告道,“在处理高速下行数据时,如果同时有高优先级的上层信令(如切换请求)中断进来,ARm核的处理会延迟几个毫秒,可能导致错过接收窗口!” “任务调度优先级需要重新调整!”负责RtoS内核移植的工程师建议,“基带物理层的中断处理和数据搬运任务,必须拥有最高的抢占优先级!” “光靠cpU不行!必须把计算密集型任务卸载给硬件!”张建华再次强调,“卷积码\/turbo码的编解码、均衡、解扩……这些必须由dSp和硬件加速器来完成!ARm核只负责协议逻辑控制和任务调度!”
新一轮的软硬件协同设计和优化开始了。硬件团队根据软件团队提出的需求,微调了中断控制器和dmA控制器的优先级设置;dSp团队则进一步优化了提供给ARm核调用的硬件加速函数接口,使其调用开销更小,执行效率更高;协议栈软件团队则重构了任务调度模型,将实时性要求最高的任务剥离出来,用最高优先级运行,并尽可能地利用硬件加速能力。
联调过程更是充满了各种意想不到的“坑”。
“为什么手机在弱信号下尝试发起GpRS连接时,总是失败?”——排查半天,发现是软件在读取硬件提供的信号强度指示(RSSI)时,算法存在缺陷,导致在高误码率情况下对信号强度的估计不准,从而错误地放弃了连接尝试。 “为什么进行长时间GpRS下载时,偶尔会出现数据包丢失或乱序?”——检查发现是RLc(无线链路控制)层的滑动窗口确认机制,在处理高速、不连续数据流时,存在一个罕见的逻辑漏洞。 “为什么在进行小区重选(cell Reselection)后,手机无法立刻恢复GpRS连接?”——发现是移动性管理(mm)模块在更新路由区信息后,未能及时通知下层协议实体刷新状态。
每一个bug的定位和修复,都需要跨越硬件、底层驱动、RtoS、协议栈L1\/L2\/L3多个层面的联合调试。工程师们常常需要同时盯着逻辑分析仪的波形、JtAG调试器的代码跟踪、以及协议分析仪(连接网络模拟器)的信令流程,才能找到问题的蛛丝马迹。这个过程极其考验工程师的系统理解能力、逻辑分析能力和耐心。
林轩虽然没有直接参与编码,但他会定期参加协议栈团队的技术评审会,听取进展汇报,并针对一些关键的架构设计或性能瓶颈问题,给出指导性的意见。他常常能从更高的视角,点出团队可能忽略的潜在风险或优化方向。
例如,他提醒团队要特别关注协议栈在不同低功耗模式下的状态保存与恢复逻辑,确保手机从睡眠状态被网络寻呼(paging)唤醒时,能够快速、可靠地重建通信链路。他还建议团队研究一下当时还比较新的“非连续接收”(discontinuous Reception, dRx)技术,以进一步降低手机在待机状态下的功耗。
在功耗优化方面,小张的应用与嵌入式系统团队也与协议栈团队紧密配合。他们共同设计了一套更精细化的系统级电源管理策略。当手机处于待机状态时,不仅基带部分进入dRx模式,ARm应用处理器也会进入最低频率的休眠状态,甚至连Lcd背光、键盘扫描等外设都被完全关闭。只有当需要接听电话、接收短信或用户主动操作时,系统才会被快速唤醒到相应的活动状态。这种软硬件结合的深度优化,是“蜂鸟”能够实现超长待机和续航的关键所在。
时间在紧张而充实的调试和优化中飞速流逝。启明芯的GSm\/GpRS协议栈软件,如同一个在烈火中反复锤炼的战士,逐渐变得健壮、高效、稳定。
终于,在又经过了数周艰苦卓绝的努力之后,在一个具有里程碑意义的内部版本(可能是Firmware V0.99)中,协议栈软件在“蜂鸟一号”硬件平台上,成功地通过了所有关键的功能、性能和稳定性测试!
在实验室环境下,它能够稳定地保持GSm\/GpRS网络注册,流畅地进行语音通话,实现接近GpRS class 10理论峰值的数据传输速率(虽然绝对速度在今天看来很慢,但在当时已属不易),并且在各种模拟的恶劣网络条件下,依然能保持基本的通信能力。更重要的是,在待机状态下,整机功耗被控制在了一个极其优异的水平。
“成功了!协议栈稳定版测试通过!”当小张将最终的测试报告提交给陈家俊和张建华时,整个软件团队爆发出了一阵轻松而自豪的欢呼!他们知道,自己克服了难以想象的困难,终于为“蜂鸟”注入了稳定可靠的“通信灵魂”!
林轩在审阅了报告后,也给予了高度肯定:“老张,小张,你们和团队的工作堪称典范!你们不仅按时完成了任务,更重要的是,在资源极其有限的嵌入式平台上,将如此复杂的协议栈优化到了如此高的水准!这份功力,足以让tI、高通那些老牌厂商都感到汗颜!”
软件的灵魂已经完美融入硬件的躯体。“蜂鸟”这只蓄势待发的猛禽,终于羽翼丰满,具备了翱翔于广阔无线天空的全部能力。
现在,万事俱备,只欠最后的“东风”——将这件凝聚了启明芯最高智慧和心血的杰作,打磨封装,准备呈送给那些手握亿万订单的手机巨头们,进行最终的、决定命运的“审判”!