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

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

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

兼容POSIX標(biāo)準(zhǔn)怎么為Swift的多線程提供底層支持?

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

項(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ā)出第一版公測硬件。

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

    關(guān)注

    0

    文章

    116

    瀏覽量

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

    關(guān)注

    9

    文章

    270

    瀏覽量

    59520
收藏 人收藏

    評論

    相關(guān)推薦

    3A6000_7A2000開發(fā)板龍芯全國產(chǎn)處理器與龍芯 3A5000完全兼容

    個最新研發(fā)的高性能 LA664 處理器核,支持同時多線程技術(shù)(SMT2),全芯片共 8 個邏輯核。集成安全可信模塊,可提供安全啟動方案和國密(SM2、SM3、SM4 等)應(yīng)用支持。
    發(fā)表于 11-19 11:15

    socket 多線程編程實(shí)現(xiàn)方法

    在現(xiàn)代網(wǎng)絡(luò)編程中,多線程技術(shù)被廣泛應(yīng)用于提高服務(wù)器的并發(fā)處理能力。Socket編程是網(wǎng)絡(luò)通信的基礎(chǔ),而將多線程技術(shù)應(yīng)用于Socket編程,可以顯著提升服務(wù)器的性能。 多線程編程的基本概念 多線
    的頭像 發(fā)表于 11-12 14:16 ?406次閱讀

    Python中多線程和多進(jìn)程的區(qū)別

    Python作為一種高級編程語言,提供了多種并發(fā)編程的方式,其中多線程與多進(jìn)程是最常見的兩種方式之一。在本文中,我們將探討Python中多線程與多進(jìn)程的概念、區(qū)別以及如何使用線程池與進(jìn)
    的頭像 發(fā)表于 10-23 11:48 ?442次閱讀
    Python中<b class='flag-5'>多線程</b>和多進(jìn)程的區(qū)別

    ESP32會不會有多線程問題,需要加鎖嗎?

    ESP32會不會有多線程問題,需要加鎖嗎
    發(fā)表于 07-19 08:05

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

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

    bootloader開多線程做引導(dǎo)程序,跳app初始化后直接進(jìn)hardfualt,為什么?

    如標(biāo)題,想做一個遠(yuǎn)程升級的項(xiàng)目,bootloader引導(dǎo)區(qū)域和app都是開多線程跑的,就是自己寫了個小的任務(wù)調(diào)度器,沒什么功能主要是想讓程序快速的響應(yīng),延時不會對其他程序造成堵塞,程序測試
    發(fā)表于 04-18 06:07

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫多線程并發(fā)概述

    長度,可以存儲任何類型的數(shù)據(jù),包括數(shù)字、字符串等。 共享對象傳輸指SharedArrayBuffer支持多線程之間傳遞,傳遞之后的SharedArrayBuffer對象和原始
    發(fā)表于 03-28 14:35

    鴻蒙APP開發(fā):【ArkTS類庫多線程】TaskPool和Worker的對比

    TaskPool(任務(wù)池)和Worker的作用是應(yīng)用程序提供一個多線程的運(yùn)行環(huán)境,用于處理耗時的計(jì)算任務(wù)或其他密集型任務(wù)??梢杂行У乇苊膺@些任務(wù)阻塞主線程,從而最大化系統(tǒng)的利用率,降
    的頭像 發(fā)表于 03-26 22:09 ?683次閱讀
    鴻蒙APP開發(fā):【ArkTS類庫<b class='flag-5'>多線程</b>】TaskPool和Worker的對比

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫多線程TaskPool和Worker的對比(一)

    TaskPool(任務(wù)池)和Worker的作用是應(yīng)用程序提供一個多線程的運(yùn)行環(huán)境,用于處理耗時的計(jì)算任務(wù)或其他密集型任務(wù)。可以有效地避免這些任務(wù)阻塞主線程,從而最大化系統(tǒng)的利用率,降
    發(fā)表于 03-25 14:11

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫多線程并發(fā)概述

    長度,可以存儲任何類型的數(shù)據(jù),包括數(shù)字、字符串等。 共享對象傳輸指SharedArrayBuffer支持多線程之間傳遞,傳遞之后的SharedArrayBuffer對象和原始
    發(fā)表于 03-22 15:40

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

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

    鴻蒙原生應(yīng)用開發(fā)-ArkTS語言基礎(chǔ)類庫概述

    ArkTS語言基礎(chǔ)類庫是HarmonyOS系統(tǒng)上應(yīng)用開發(fā)者提供的常用基礎(chǔ)能力,主要包含能力如下圖所示。 1.提供異步并發(fā)和多線程并發(fā)的能力。
    發(fā)表于 03-05 15:42

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

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

    ArkTS語言基礎(chǔ)類庫-解析

    Promise和async/await等標(biāo)準(zhǔn)的JS異步并發(fā)能力。 TaskPool應(yīng)用程序提供一個多線程的運(yùn)行環(huán)境,降低整體資源的消耗、提高系統(tǒng)的整體性能,開發(fā)者無需關(guān)心
    發(fā)表于 02-20 16:44

    linux多線程編程實(shí)例

    linux線程
    的頭像 發(fā)表于 02-15 21:16 ?494次閱讀
    linux<b class='flag-5'>多線程</b>編程實(shí)例