項(xiàng)目框架
原生Swift編譯器是不支持生成Cortex-M機(jī)器指令的,但得益于LLVM框架的模塊化架構(gòu),僅需少許Hack即可為其添加一個現(xiàn)成的Cortex-M后端。
得到了Cortex-M平臺的機(jī)器指令后,代碼實(shí)際已經(jīng)可以在該平臺上運(yùn)行,但這樣的空中樓閣用處并不大,Swift的很多高級特性還是需要底層基礎(chǔ)庫(libc, libstdc++)和基礎(chǔ)算法(比如堆的管理,線程的管理)來支持。
在實(shí)踐中,我們沒有選擇自己去實(shí)現(xiàn)所有的細(xì)節(jié),而是選擇了Zephyr這個新興的RTOS來做底層支撐。下面逐層來介紹項(xiàng)目的框架。
硬件平臺
我們的項(xiàng)目是一個更關(guān)注應(yīng)用層開發(fā)的創(chuàng)意實(shí)現(xiàn)平臺,開發(fā)者當(dāng)然不能受到硬件性能的局限。因此我們選擇了全球性能最強(qiáng),性價比也極高的NXP i.MX RT系列MCU作為第一款開發(fā)板芯片,其核心參數(shù)如下圖:
另外,我們外掛了32M SDRAM和16M Hyper Flash,板載DAPLink下載器,板載microSD讀卡器。這樣的硬件性能,在MCU界可以算是“頂配”了。排母外側(cè)引出了所有常用的外設(shè),包括一組攝像頭接口,排母內(nèi)側(cè)還有完整的RGB信號輸出,無論是做熱門的視覺項(xiàng)目或者GUI項(xiàng)目,硬件性能上是有充分保障的。
下面是該模組的引腳配置圖:
Zephyr RTOS
在嵌入式底層的硬件世界,碎片化的現(xiàn)狀還將持續(xù)相當(dāng)長的一段時間,我們沒有必要與各家芯片廠的原生API甚至寄存器較勁?!坝?jì)算機(jī)科學(xué)領(lǐng)域的任何問題都可以通過增加一個間接的中間層來解決”,我們的解決方案便是選用了一款兼容并包,前景無限的RTOS—Zephyr
Zephyr項(xiàng)目是一個采用Apache 2.0協(xié)議許可,Linux基金會托管的開源RTOS項(xiàng)目,于2019年4月份發(fā)布了第一個長期維護(hù)版本v1.14.0。
RTOS有上百種,為什么選擇了Zephyr這個新興的RTOS?
跨架構(gòu),良好適應(yīng)嵌入式底層硬件的碎片化。到目前為止,Zephyr一共可以支持6種架構(gòu):X86架構(gòu)、ARC架構(gòu)、ARM架構(gòu)、NIOS II 架構(gòu)、RISC V架構(gòu)和Xtensa架構(gòu)
純C語言編寫,代碼框架與Linux框架類似,統(tǒng)一的設(shè)備驅(qū)動模型為上層提供了一致的API接口
兼容POSIX標(biāo)準(zhǔn),很容易為Swift的多線程提供底層支持
不僅僅是一個RTOS,承諾了各種軟件協(xié)議棧的持續(xù)加入及其可用性
巨頭的站臺及活躍的社區(qū)熱度,保障了項(xiàng)目的持續(xù)性與前景會越來越好
恩智浦i.MX RT系列芯片在Zephyr上得到了NXP官方的支持,很容易便可以將各種驅(qū)動直接拿來使用。
SwiftIO
因?yàn)橛辛薢ephyr的支持,這一層反倒變得比較簡單。
Swift可以與C無縫銜接,我們所做的僅僅是將Zephyr驅(qū)動,API用C語言打包封裝,然后套上一層Swift的外殼,僅僅是簡單的調(diào)用關(guān)系,沒有任何復(fù)雜的戲法。
我們給這一層API框架取名為SwiftIO。
至此,開發(fā)者僅需在代碼里import SwiftIO(類似C語言的#include),便可以利用其中的API來方便的操作底層硬件了。
詳細(xì)的API列表可在以下站點(diǎn)獲得:(依然在不斷地更新中)
https://madmachineio.github.io/SwiftIO/
項(xiàng)目現(xiàn)狀
到目前為止,該項(xiàng)目的Alpha版本已經(jīng)進(jìn)行了內(nèi)部測試,預(yù)計(jì)于11月發(fā)出第一版公測硬件。
-
SWIFT
+關(guān)注
關(guān)注
0文章
116瀏覽量
23813 -
Cortex-M3
+關(guān)注
關(guān)注
9文章
270瀏覽量
59520
發(fā)布評論請先 登錄
相關(guān)推薦
評論