0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

兼容POSIX標準怎么為Swift的多線程提供底層支持?

丫丫119 ? 來源:未知 ? 作者:肖冰 ? 2019-10-07 10:27 ? 次閱讀

項目框架

原生Swift編譯器是不支持生成Cortex-M機器指令的,但得益于LLVM框架的模塊化架構(gòu),僅需少許Hack即可為其添加一個現(xiàn)成的Cortex-M后端。

得到了Cortex-M平臺的機器指令后,代碼實際已經(jīng)可以在該平臺上運行,但這樣的空中樓閣用處并不大,Swift的很多高級特性還是需要底層基礎(chǔ)庫(libc, libstdc++)和基礎(chǔ)算法(比如堆的管理,線程的管理)來支持。

在實踐中,我們沒有選擇自己去實現(xiàn)所有的細節(jié),而是選擇了Zephyr這個新興的RTOS來做底層支撐。下面逐層來介紹項目的框架。

硬件平臺

我們的項目是一個更關(guān)注應(yīng)用層開發(fā)的創(chuàng)意實現(xiàn)平臺,開發(fā)者當然不能受到硬件性能的局限。因此我們選擇了全球性能最強,性價比也極高的NXP i.MX RT系列MCU作為第一款開發(fā)板芯片,其核心參數(shù)如下圖:

另外,我們外掛了32M SDRAM和16M Hyper Flash,板載DAPLink下載器,板載microSD讀卡器。這樣的硬件性能,在MCU界可以算是“頂配”了。排母外側(cè)引出了所有常用的外設(shè),包括一組攝像頭接口,排母內(nèi)側(cè)還有完整的RGB信號輸出,無論是做熱門的視覺項目或者GUI項目,硬件性能上是有充分保障的。

下面是該模組的引腳配置圖:

Zephyr RTOS

嵌入式底層的硬件世界,碎片化的現(xiàn)狀還將持續(xù)相當長的一段時間,我們沒有必要與各家芯片廠的原生API甚至寄存器較勁?!坝嬎銠C科學(xué)領(lǐng)域的任何問題都可以通過增加一個間接的中間層來解決”,我們的解決方案便是選用了一款兼容并包,前景無限的RTOS—Zephyr

Zephyr項目是一個采用Apache 2.0協(xié)議許可,Linux基金會托管的開源RTOS項目,于2019年4月份發(fā)布了第一個長期維護版本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標準,很容易為Swift的多線程提供底層支持

不僅僅是一個RTOS,承諾了各種軟件協(xié)議棧的持續(xù)加入及其可用性

巨頭的站臺及活躍的社區(qū)熱度,保障了項目的持續(xù)性與前景會越來越好

恩智浦i.MX RT系列芯片在Zephyr上得到了NXP官方的支持,很容易便可以將各種驅(qū)動直接拿來使用。

SwiftIO

因為有了Zephyr的支持,這一層反倒變得比較簡單。

Swift可以與C無縫銜接,我們所做的僅僅是將Zephyr驅(qū)動,API用C語言打包封裝,然后套上一層Swift的外殼,僅僅是簡單的調(diào)用關(guān)系,沒有任何復(fù)雜的戲法。

我們給這一層API框架取名為SwiftIO。

至此,開發(fā)者僅需在代碼里import SwiftIO(類似C語言的#include),便可以利用其中的API來方便的操作底層硬件了。

詳細的API列表可在以下站點獲得:(依然在不斷地更新中)

https://madmachineio.github.io/SwiftIO/

項目現(xiàn)狀

到目前為止,該項目的Alpha版本已經(jīng)進行了內(nèi)部測試,預(yù)計于11月發(fā)出第一版公測硬件。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • SWIFT
    +關(guān)注

    關(guān)注

    0

    文章

    91

    瀏覽量

    23759
  • Cortex-M3
    +關(guān)注

    關(guān)注

    9

    文章

    268

    瀏覽量

    59361
收藏 人收藏

    評論

    相關(guān)推薦

    多線程設(shè)計模式到對 CompletableFuture 的應(yīng)用

    最近在開發(fā) 延保服務(wù) 頻道頁時,為了提高查詢效率,使用到了多線程技術(shù)。為了對多線程方案設(shè)計有更加充分的了解,在業(yè)余時間讀完了《圖解 Java 多線程設(shè)計模式》這本書,覺得收獲良多。本篇文章將介紹其中
    的頭像 發(fā)表于 06-26 14:18 ?180次閱讀
    從<b class='flag-5'>多線程</b>設(shè)計模式到對 CompletableFuture 的應(yīng)用

    java實現(xiàn)多線程的幾種方式

    Java實現(xiàn)多線程的幾種方式 多線程是指程序中包含了兩個或以上的線程,每個線程都可以并行執(zhí)行不同的任務(wù)或操作。Java中的多線程可以提高程序
    的頭像 發(fā)表于 03-14 16:55 ?438次閱讀

    AT socket可以多線程調(diào)用嗎?

    請問AT socket 可以多線程調(diào)用嗎? 有互鎖機制嗎,還是要自己做互鎖。
    發(fā)表于 03-01 08:22

    使用C++11新特性實現(xiàn)一個通用的線程池設(shè)計

    在C++11標準之前,多線程編程只能使用pthread_xxx開頭的一組POSIX標準的接口。從C++11標準開始,
    的頭像 發(fā)表于 12-22 13:58 ?915次閱讀
    使用C++11新特性實現(xiàn)一個通用的<b class='flag-5'>線程</b>池設(shè)計

    redis多線程還能保證線程安全嗎

    是單線程的,多個客戶端請求會按序執(zhí)行,每個請求使用一個線程完成,這樣可以避免多線程之間的競爭條件和鎖等帶來的開銷。但是,由于Redis是存儲內(nèi)存中的數(shù)據(jù)的,當多個客戶端同時對同一個數(shù)據(jù)進行讀寫操作時,就會存在
    的頭像 發(fā)表于 12-05 10:28 ?1347次閱讀

    mfc多線程編程實例

    (圖形用戶界面)應(yīng)用程序的開發(fā)。在這篇文章中,我們將重點介紹MFC中的多線程編程。 多線程編程在軟件開發(fā)中非常重要,它可以實現(xiàn)程序的并發(fā)執(zhí)行,提高程序的效率和響應(yīng)速度。MFC提供了豐富的多線程
    的頭像 發(fā)表于 12-01 14:29 ?1151次閱讀

    多線程如何保證數(shù)據(jù)的同步

    多線程編程是一種并發(fā)編程的方法,意味著程序中同時運行多個線程,每個線程可獨立執(zhí)行不同的任務(wù),共享同一份數(shù)據(jù)。由于多線程并發(fā)執(zhí)行的特點,會引發(fā)數(shù)據(jù)同步的問題,即保證多個
    的頭像 發(fā)表于 11-17 14:22 ?894次閱讀

    多線程同步的幾種方法

    多線程同步是指在多個線程并發(fā)執(zhí)行的情況下,為了保證線程執(zhí)行的正確性和一致性,需要采用特定的方法來協(xié)調(diào)線程之間的執(zhí)行順序和共享資源的訪問。下面將介紹幾種常見的
    的頭像 發(fā)表于 11-17 14:16 ?967次閱讀

    Linux系統(tǒng)上多線程和多進程的運行效率

    關(guān)于多進程和多線程,教科書上最經(jīng)典的一句話是“進程是資源分配的最小單位,線程是CPU調(diào)度的最小單位”,這句話應(yīng)付考試基本上夠了,但如果在工作中遇到類似的選擇問題,那就沒有這么簡單了,選的不好,會讓你
    的頭像 發(fā)表于 11-10 10:54 ?1059次閱讀
    Linux系統(tǒng)上<b class='flag-5'>多線程</b>和多進程的運行效率

    基于DSP/BIOS多線程的小型組合導(dǎo)航系統(tǒng)設(shè)計

    電子發(fā)燒友網(wǎng)站提供《基于DSP/BIOS多線程的小型組合導(dǎo)航系統(tǒng)設(shè)計.pdf》資料免費下載
    發(fā)表于 11-08 10:07 ?0次下載
    基于DSP/BIOS<b class='flag-5'>多線程</b>的小型組合導(dǎo)航系統(tǒng)設(shè)計

    關(guān)于Python多進程和多線程詳解

    進程(process)和線程(thread)是操作系統(tǒng)的基本概念,但是它們比較抽象,不容易掌握。關(guān)于多進程和多線程,教科書上最經(jīng)典的一句話是“進程是資源分配的最小單位,線程是CPU調(diào)度的最小單位”。
    的頭像 發(fā)表于 11-06 14:46 ?689次閱讀
    關(guān)于Python多進程和<b class='flag-5'>多線程</b>詳解

    多線程idm下載軟件

    多線程idm下載軟件
    發(fā)表于 10-23 09:23 ?0次下載

    MDK可以支持多線程編譯嗎?

    怎么才能打開多線程編譯
    發(fā)表于 10-11 07:23

    Java多線程的用法

    本文將介紹一下Java多線程的用法。 基礎(chǔ)介紹 什么是多線程 指的是在一個進程中同時運行多個線程,每個線程都可以獨立執(zhí)行不同的任務(wù)或操作。 與單線程
    的頭像 發(fā)表于 09-30 17:07 ?845次閱讀

    HarmonyOS使用多線程并發(fā)能力開發(fā)

    特點和各自的適用場景存在差異,詳細請參見TaskPool和Worker的對比。 二、TaskPool和Worker的對比 TaskPool(任務(wù)池)和Worker的作用是應(yīng)用程序提供一個多線程的運行
    發(fā)表于 09-25 15:23