精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

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

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

項目框架

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

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

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

硬件平臺

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

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

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

Zephyr RTOS

嵌入式底層的硬件世界,碎片化的現狀還將持續相當長的一段時間,我們沒有必要與各家芯片廠的原生API甚至寄存器較勁。“計算機科學領域的任何問題都可以通過增加一個間接的中間層來解決”,我們的解決方案便是選用了一款兼容并包,前景無限的RTOS—Zephyr

Zephyr項目是一個采用Apache 2.0協議許可,Linux基金會托管的開源RTOS項目,于2019年4月份發布了第一個長期維護版本v1.14.0。


RTOS有上百種,為什么選擇了Zephyr這個新興的RTOS?

跨架構,良好適應嵌入式底層硬件的碎片化。到目前為止,Zephyr一共可以支持6種架構:X86架構、ARC架構、ARM架構、NIOS II 架構、RISC V架構和Xtensa架構

C語言編寫,代碼框架與Linux框架類似,統一的設備驅動模型為上層提供了一致的API接口

兼容POSIX標準,很容易為Swift的多線程提供底層支持

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

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

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

SwiftIO

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

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

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

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

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

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

項目現狀

到目前為止,該項目的Alpha版本已經進行了內部測試,預計于11月發出第一版公測硬件。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • SWIFT
    +關注

    關注

    0

    文章

    112

    瀏覽量

    23788
  • Cortex-M3
    +關注

    關注

    9

    文章

    269

    瀏覽量

    59433
收藏 人收藏

    評論

    相關推薦

    socket 多線程編程實現方法

    在現代網絡編程中,多線程技術被廣泛應用于提高服務器的并發處理能力。Socket編程是網絡通信的基礎,而將多線程技術應用于Socket編程,可以顯著提升服務器的性能。 多線程編程的基本概念 多線
    的頭像 發表于 11-12 14:16 ?231次閱讀

    Python中多線程和多進程的區別

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

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

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

    多線程設計模式到對 CompletableFuture 的應用

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

    bootloader開多線程做引導程序,跳app初始化后直接進hardfualt,為什么?

    如標題,想做一個遠程升級的項目,bootloader引導區域和app都是開多線程跑的,就是自己寫了個小的任務調度器,沒什么功能主要是想讓程序快速的響應,延時不會對其他程序造成堵塞,程序測試
    發表于 04-18 06:07

    鴻蒙原生應用開發-ArkTS語言基礎類庫多線程并發概述

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

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

    TaskPool(任務池)和Worker的作用是應用程序提供一個多線程的運行環境,用于處理耗時的計算任務或其他密集型任務。可以有效地避免這些任務阻塞主線程,從而最大化系統的利用率,降
    的頭像 發表于 03-26 22:09 ?584次閱讀
    鴻蒙APP開發:【ArkTS類庫<b class='flag-5'>多線程</b>】TaskPool和Worker的對比

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

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

    鴻蒙原生應用開發-ArkTS語言基礎類庫多線程并發概述

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

    java實現多線程的幾種方式

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

    AT socket可以多線程調用嗎?

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

    使用C++11新特性實現一個通用的線程池設計

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

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

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

    redis使用多線程處理操作命令

    討 Redis 多線程處理操作命令的實現和優勢,幫助讀者深入了解這一方面的知識。 首先,我們來了解一下 Redis 的基本概念和工作原理。Redis 是一個支持鍵值對存儲的數據庫系統,它將數據存儲在內存中,從而實現了高速讀寫操作。Redis 使用了一種稱為“協
    的頭像 發表于 12-05 10:25 ?545次閱讀

    mfc多線程編程實例

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