無線網卡
下圖是常見的無線網卡

使用方法
單單一個無線網卡是無法正常作業的,它必須插在一臺主機上,并且這臺主機要安裝網卡對應的驅動程式,才能讓它正常作業,
軟硬體剖析
當我還是 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 倍就是吃到蘑菇變身時的音效,等等,
正是這些摳門造就了這么多偉大的成就,不是嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/303092.html
標籤:其他
上一篇:初識Java語言(八)- 例外
