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

    文章

    123

    浏览量

    24429
  • Cortex-M3
    +关注

    关注

    9

    文章

    276

    浏览量

    60418
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    底层解读labview的TDMS高级异步写入的工作原理

    : 不是同时直接写文件: 异步写入并不意味着多个线程可以在同一时刻直接对同一个 TDMS 文件的同一部分进行物理写入操作。磁盘操作本身在底层通常需要序列化访问。 TDMS 库的线程安全机制
    发表于 08-14 17:05

    摩尔线程率先支持腾讯混元-A13B模型

    中的卓越兼容性与快速响应能力——MUSA架构的高易用性设计,能够显著减少开发者在模型适配迁移过程中的技术投入,大幅提升开发效率,AI创新成果的快速工程化落地构建了坚实的底层技术支撑。
    的头像 发表于 07-04 14:10 ?431次阅读

    多线程的安全注意事项

    和模块需要支持多线程安全,否则可能会导致多线程数据竞争问题,造成应用程序异常或崩溃。 在TaskPool或Worker的工作线程支持使用以
    发表于 06-20 07:49

    什么是ArkTS?

    基础类库能力示意图 提供异步并发和多线程并发的能力。 支持Promise和async/await等标准的JS异步并发能力。 TaskPool
    发表于 06-17 06:24

    乐鑫Matter兼容设备提供设备证书生成和预配置服务

    乐鑫科技(688018.SH)Matter兼容设备提供设备证书生成和预配置服务。这些服务将降低生产Matter兼容设备的复杂性,同时使其满足CSA连接
    的头像 发表于 05-06 18:02 ?479次阅读
    乐鑫<b class='flag-5'>为</b>Matter<b class='flag-5'>兼容</b>设备<b class='flag-5'>提供</b>设备证书生成和预配置服务

    摩尔线程发布云电脑驱动MT vGPU 2.7.0

    3月18日,摩尔线程正式发布云电脑驱动MT vGPU 2.7.0。新版本在国内首次实现了国产GPU云电脑对DirectX 12的支持,同时显著提升图形渲染性能与兼容性。通过全功能GPU四大引擎的深度协同,摩尔
    的头像 发表于 03-19 15:56 ?517次阅读

    请问如何在Python中实现多线程与多进程的协作?

    () thread.join() process.join() 我的问题是:**如何合理地组合多线程和多进程以获得更好的性能?**特别是在I/O密集型任务和CPU密集型任务混合的情况下,如何避免性能瓶颈,确保程序的高效运行? 希望大家能提供一些解决思路或经验,非常感谢!
    发表于 03-11 06:57

    摩尔线程全面支持DeepSeek开源周成果

    DeepSeek开源周正式收官,作为国内率先原生支持FP8计算精度的国产GPU企业,摩尔线程迅速响应,并在短时间内,成功实现对DeepSeek各个开源项目的全面支持,涵盖FlashMLA
    的头像 发表于 03-04 10:06 ?583次阅读

    请问rt-thread studio如何进行多线程编译?

    ,使用的是5800h+32g内存+sn550 ssd,开启16线程编译时cpu的占用率也只能到30%,编译完整个工程需要3分钟 感觉多线程编译设置没有生效,有办法提高编译速度吗
    发表于 02-19 08:30

    3A6000开发板/龙芯3A6000与龙芯3A5000等龙架构处理器软件兼容

    个最新研发的高性能 LA664 处理器核,支持同时多线程技术(SMT2),全芯片共 8 个逻辑核。集成安全可信模块,可提供安全启动方案和国密(SM2、SM3、SM4 等)应用支持
    发表于 02-12 15:06

    3A6000_7A2000开发板龙芯全国产处理器与龙芯 3A5000完全兼容

    个最新研发的高性能 LA664 处理器核,支持同时多线程技术(SMT2),全芯片共 8 个逻辑核。集成安全可信模块,可提供安全启动方案和国密(SM2、SM3、SM4 等)应用支持
    发表于 11-19 11:15

    socket 多线程编程实现方法

    在现代网络编程中,多线程技术被广泛应用于提高服务器的并发处理能力。Socket编程是网络通信的基础,而将多线程技术应用于Socket编程,可以显著提升服务器的性能。 多线程编程的基本概念 多线
    的头像 发表于 11-12 14:16 ?1154次阅读

    摩尔线程与超图软件完成产品兼容认证

    。 据悉,为了确保产品间的兼容性,摩尔线程与超图软件进行了严格的测试工作。经过双方的努力,适配调优后的软件在摩尔线程GPU上展现出了卓越的性能表现。测试结果显示,软件在摩尔线程GPU上
    的头像 发表于 10-24 10:25 ?1102次阅读

    Python中多线程和多进程的区别

    Python作为一种高级编程语言,提供了多种并发编程的方式,其中多线程与多进程是最常见的两种方式之一。在本文中,我们将探讨Python中多线程与多进程的概念、区别以及如何使用线程池与进
    的头像 发表于 10-23 11:48 ?1127次阅读
    Python中<b class='flag-5'>多线程</b>和多进程的区别

    3A6000_7A2000核心主板龙芯全国产处理器LoongArch架构

    个最新研发的高性能 LA664 处理器核,支持同时多线程技术(SMT2),全芯片共 8 个逻辑核。集成安全可信模块,可提供安全启动方案和国密(SM2、SM3、SM4 等)应用支持
    发表于 10-12 11:25