您当前的位置:首页 > 计算机 > 硬件解码

抠门的 WiFi 芯片厂家,抠门的程序员

时间:11-22来源:作者:点击数:

本文介绍了无线网卡的工作原理,强调了驱动程序和固件在其中的重要性。BCM43455芯片为例,说明了WiFi芯片如何依赖主机存储firmware并运行。同时,探讨了这种节省成本的设计思想,将程序员的“抠门”精神与技术创新相结合,创造出高效且经济的解决方案。文章以超级玛丽游戏的小体积为例,展示了抠门编程带来的极致成就。

无线网卡

下图是常见的无线网卡

在这里插入图片描述

使用方法

单单一个无线网卡是无法正常工作的,它必须插在一台主机上,并且这台主机要安装网卡对应的驱动程序,才能让它正常工作。

软硬件剖析

当我还是 WiFi 小白的时候(现在是大白😋),常常想,我手中的这张 USB 无线网卡,我不把它插在电脑上,我直接把它插在手机充电器上,它能工作吗?就像下面这样:

在这里插入图片描述

答案显然是否定的,接下来我们就一起分析下无线网卡的构造,以及其工作所需要的条件。

传统嵌入式设备硬件结构

在这里插入图片描述

CPU 将程序从 FLASH 加载到 RMA 中运行。RAM 和 FLASH 缺一不可,没有 RAM,CPU 直接从 FLASH 读取指令将会严重影响 CPU 效率,甚至有些 FLASH 无法按字节寻址,也就无法满足 CPU 取指令的要求;而没有 FLASH,设备掉电后程序和数据就丢失了,再次开机将无法正常工作,FLASH 存储的一般是这颗芯片的 firmware。

抠门的 WiFi 芯片厂家

从公司角度出发,都追求自家产品能够用最小的成本换取最大的利益,WiFi 芯片厂家也不例外,并且做到了极致。他们思索着,上面的硬件结构中,还能省去什么以节省成本呢?最后被他们想出来了:去掉 FLASH。因为他们知道,WiFi 芯片是不会用来单独工作的(没人像我上面那张图一样那么傻),必须要插在主机上进行工作,那么就砍掉 WiFi 芯片上的 FLASH,让主机帮忙存储 firmware。事实上,现在很多 WiFi 芯片都是这么干的。

BCM43455

我们以树莓派 3B+ 上的 WiFi 芯片 BCM43455 举例,其内部只有 CPU 和 RAM,没有 FLASH。而 WiFi 芯片的 firmware 是存放在主机的磁盘中,由 WiFi 芯片厂家提供,一般和驱动程序一起打包对外发布,甚至有些芯片的 firmware 是存在于驱动内部的。用户需要做的就是下载 WiFi 芯片的 firmware 和驱动程序。对于 BCM43455 而言,它们分别是 brcmfmac43455-sdio.bin、brcmfmac.ko(Linux 环境)。

在这里插入图片描述

整个工作流程是这样的,主机安装驱动 brcmfmac.ko,驱动会到指定目录下读取 brcmfmac43455-sdio.bin 文件,并将其传送给 BCM43455,BCM43455 会将其放在自己的 RAM 中去运行。对于 WiFi 芯片而言,这种方式和从自身的 FLASH 中加载 firmware 到 RAM 效果是一样的,所以索性就省掉了自身的 FLASH。而对于主机而言,由于拥有非常大的磁盘空间,存储一个几 MB 大小的 firmware 并不会产生负担。

抠门的程序员

本来还想,这些 WiFi 芯片厂家真是的,一颗 FLASH 都不想多加,还借助人家主机上的磁盘,可真抠门。但转念一想,作为程序员,特别是之前开发单片机程序,自己又何尝不抠门呢?还记得当时写程序时,能用 uint_8 类型的变量,绝不用 uint_16;数组大小能用 10 的,绝不用 15;甚至宁愿牺牲运行效率来降低代码大小,将结构体设置为按字节对齐。编译完程序后时常关注程序大小,生怕哪一天超出了单片机的 FLASH 大小范围。

抠门成就极致

但是,这种抠门并没有不好,反而是这种追求极致的思想,造就了无数不可能。举个例子,

我们都玩过超级玛丽,它有很多关卡,可以玩很久,但是它的大小只有 40KB,这就是程序员抠门所成就的极致。

例如,所有左右对称的图片都只存一半

在这里插入图片描述
在这里插入图片描述

草垛和云朵使用的是相同的图案,只是要改变下颜色就可以了。(小伙伴们直呼被骗惨了。。。😭)

在这里插入图片描述

把过关的音效快进 6 倍就是吃到蘑菇变身时的音效,等等。

正是这些抠门造就了这么多伟大的成就,不是吗?

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐