红岗花园地下室的空气里,除了原本的霉味和烟味,现在又多了一股酸涩的电解液味道。
陈景明那块软包电池的成功,像是一针强心剂,扎进了这群快要猝死的工程师心口。
但这股兴奋劲儿没撑过十二小时。
“崩了。”
孙强把键盘一推,整个人往椅背上一瘫,椅子发出不堪重负的嘎吱声。
屏幕上是一串红得刺眼的报错代码:`StackOverflow`。
“内存溢出。”孙强抓着本来就不多的头发,指着屏幕上的数据条,“一共就512KB的内存。操作系统内核占了120K,TCP/IP协议栈占了200K,剩下的空间连加载字体库都不够,更别说跑图形界面。”
他转过头,看着坐在角落里敲代码的苏晓月。
“晓月,听我一句劝。砍掉图形界面吧。做成纯字符终端,就像DOS那样。虽然丑点,但能跑通。咱们只有二十天,现在已经过去一半了。”
苏晓月没理他。
她盯着屏幕上那个死循环的内存分配函数,眼圈黑得像被人打了两拳。
“不行。”
“为什么不行?诺基亚也是字符界面,爱立信也是!咱们凭什么非要搞图标?这硬件根本带不动!”
“因为老板说了,这是电脑,不是电话。”
苏晓月终于停下手,转过身。她手里捏着半块干硬的面包,那是昨晚剩下的。
“如果是字符界面,老百姓看不懂,那就只能卖给工程师。要想卖给所有人,就必须是图形化。”
“那是理想!”孙强急了,拍着桌子上的开发板,“物理限制摆在这儿!512KB就是512KB,你就是把这芯片磨出火星子来,它也变不成1MB!”
屋子里的气氛降到了冰点。
赵立在一旁不敢说话,他是做应用的,底层崩了,他写再好的应用也是空中楼阁。
张汉玉推门进来的时候,正好听到这句咆哮。
他手里提着一袋刚买回来的冰镇可乐,瓶壁上挂满了水珠。
“吵什么?”
张汉玉把可乐分给众人,自己拉过一把折叠椅,坐在孙强对面。
“内存不够?”
“不够。差得远。”孙强指着那个红色的报错条,“除非把协议栈砍了,或者把GUI砍了。二选一。”
张汉玉拧开盖子,喝了一口,凉气顺着喉咙冲下去,激得人一激灵。
“都不砍。”
他拿起那支黑色马克笔,走到白板前。白板上已经密密麻麻写满了待办事项,他在角落里擦出一块空白。
“孙工,你觉得内存是什么?”
“存储数据的容器啊。”
“不,是仓库。”张汉玉画了一个方框,“数据是货物。现在货物太多,仓库塞不下了。常规的思路是扩建仓库,但我们没钱,也没硬件支持。”
他在方框门口画了一个小圆圈。
“既然仓库扩不了,那就把货物变小。”
孙强愣了一下:“压缩?”
“对。动态内存压缩。”
张汉玉在圆圈里写了几个字母:`Z-RAM`。
“数据写入内存之前,先经过这个压缩算法。读取的时候,再解压。用CPU的算力,换内存的空间。”
孙强和赵立对视一眼,都从对方脸上看到了“这人疯了”的表情。
“老板,你知不知道这会增加多少CPU负担?”孙强把可乐顿在桌上,“ARM7的主频只有33MHz!它跑系统都已经气喘吁吁了,你还要让它实时压缩解压?那系统会卡成PPT的!”
“不会。”
张汉玉回答得很笃定。
“因为我们要用的数据,大部分是重复的。比如屏幕上的像素点,大片的白色背景,用行程编码(RLE)压缩,几百个字节能压成几个字节。文本数据用哈夫曼编码,也能压下去一半。”
“至于CPU负载……”张汉玉看向苏晓月,“这就看你们的代码水平了。”
“用C写肯定不行。必须用汇编。”
苏晓月突然开口。
她把手里的干面包扔进垃圾桶,拉过键盘,调出了那个黑底绿字的编辑器。
“把内存管理模块重写。每一条指令都自己扣。不走系统调用,直接操作寄存器。”
孙强张大了嘴巴:“全部?那是几千行汇编代码!容易出错不说,调试起来能要人命!”
“没别的路了。”
苏晓月已经开始敲击键盘。
“要么现在认输,去跟宋志敏低头。要么就拼一把,把这颗CPU的潜力榨干。”
键盘声变得密集起来,像骤雨打在铁皮屋顶上。
张汉玉拍了拍孙强的肩膀:“别愣着了。赵立负责把图标素材做减法,能用16色就别用256色。孙强,你配合晓月,把TCP/IP协议栈里的冗余代码剔除,只保留最核心的握手和传输功能。”
孙强看着这两个疯子,咬了咬牙,骂了一句脏话。
“妈的,干就干!大不了这二十天不睡了!”
……
红岗花园的地下室,彻底失去了昼夜的概念。
只有墙上挂钟的指针在一圈圈地转,和角落里堆积如山的空可乐瓶在无声地计数。
代码行数在疯狂增长。
苏晓月的手指上缠着创可贴,那是长时间敲击键盘磨出的水泡破了。
张汉玉不懂汇编,但他懂逻辑。他就坐在苏晓月旁边,盯着屏幕上的流程图,随时纠正逻辑错误。
“这里不行。入栈出栈太频繁,浪费时钟周期。换成寄存器直接寻址。”
“这个循环没必要。展开写,用空间换时间。”
“这里的判断逻辑反了……”
三天。
整整三天三夜。
除了上厕所和扒两口饭,所有人都没有离开过那张桌子。空气浑浊得让人窒息,每个人身上都馊了。
第三天凌晨四点。
苏晓月敲下最后一个回车键。
没有报错。
编译通过。
生成的内核文件大小:380KB。
比之前足足小了将近一半。
“刷机。”
苏晓月的声音哑得像砂纸磨过桌面。
李建国早就准备好了,颤抖着手把那块自制的开发板连上烧录器。进度条缓慢地爬升,每一格都像是在爬过众人的心尖。
滴。
烧录完成。
张汉玉深吸一口气,按下了那个微动开关。
屏幕黑了一下。
一秒。两秒。三秒。
就在孙强以为又要失败的时候,屏幕亮了。
没有乱码,没有报错。
漆黑的背景中央,一个由像素点组成的红色火焰图案,缓缓浮现。
那是星火科技的Logo。
虽然边缘还有些锯齿,虽然色彩只有简单的红黄两色,但在这一刻,它比任何高清大片都要震撼。
紧接着,火焰散去,一个蓝色的界面跳了出来。
左上角是信号格,右上角是电池图标。中间整整齐齐排列着四个图标:电话、短信、联系人、浏览器。