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

    文章

    89

    浏览量

    23703
  • Cortex-M3
    +关注

    关注

    9

    文章

    268

    浏览量

    59164
收藏 人收藏

    评论

    相关推荐

    java实现多线程的几种方式

    Java实现多线程的几种方式 多线程是指程序中包含了两个或以上的线程,每个线程都可以并行执行不同的任务或操作。Java中的多线程可以提高程序
    的头像 发表于 03-14 16:55 174次阅读

    AT socket可以多线程调用吗?

    请问AT socket 可以多线程调用吗? 有互锁机制吗,还是要自己做互锁。
    发表于 03-01 08:22

    使用C++11新特性实现一个通用的线程池设计

    在C++11标准之前,多线程编程只能使用pthread_xxx开头的一组POSIX标准的接口。从C++11标准开始,
    的头像 发表于 12-22 13:58 517次阅读
    使用C++11新特性实现一个通用的<b class='flag-5'>线程</b>池设计

    mfc多线程编程实例

    (图形用户界面)应用程序的开发。在这篇文章中,我们将重点介绍MFC中的多线程编程。 多线程编程在软件开发中非常重要,它可以实现程序的并发执行,提高程序的效率和响应速度。MFC提供了丰富的多线程
    的头像 发表于 12-01 14:29 505次阅读

    多线程如何保证数据的同步

    多线程编程是一种并发编程的方法,意味着程序中同时运行多个线程,每个线程可独立执行不同的任务,共享同一份数据。由于多线程并发执行的特点,会引发数据同步的问题,即保证多个
    的头像 发表于 11-17 14:22 350次阅读

    多线程idm下载软件

    多线程idm下载软件
    发表于 10-23 09:23 0次下载

    MDK可以支持多线程编译吗?

    怎么才能打开多线程编译
    发表于 10-11 07:23

    Java多线程的用法

    本文将介绍一下Java多线程的用法。 基础介绍 什么是多线程 指的是在一个进程中同时运行多个线程,每个线程都可以独立执行不同的任务或操作。 与单线程
    的头像 发表于 09-30 17:07 621次阅读

    HarmonyOS使用多线程并发能力开发

    特点和各自的适用场景存在差异,详细请参见TaskPool和Worker的对比。 二、TaskPool和Worker的对比 TaskPool(任务池)和Worker的作用是应用程序提供一个多线程的运行
    发表于 09-25 15:23

    Rust的多线程编程概念和使用方法

    和字段、常见用法以及多线程的一些实践经验。由浅入深带你零基础玩转Rust的多线程编程。 线程的基本概念和使用方法 Thread是Rust中并发编程的一种基本方式。Rust中的Thread使用
    的头像 发表于 09-20 11:15 504次阅读

    华为麒麟9000S处理器为8核12线程 首款支持线程手机处理器

     近日,华为Mate60 pro系列搭载的麒麟9000S引起了广泛关注。据网上消息报道,麒麟9000S为8核12线程,也是是首款支持线程的手机处理器。所谓的超线程技术,就是把
    的头像 发表于 09-01 16:32 9353次阅读

    labview AMC多线程

    labview_AMC多线程
    发表于 08-21 10:31 23次下载

    多线程事务怎么回滚?一个简单示例演示多线程事务

    在spring中可以使用@Transactional注解去控制事务,使出现异常时会进行回滚,在多线程中,这个注解则不会生效,如果主线程需要先执行一些修改数据库的操作,当子线程在进行处理出现异常时,主
    发表于 08-09 12:22 375次阅读
    <b class='flag-5'>多线程</b>事务怎么回滚?一个简单示例演示<b class='flag-5'>多线程</b>事务

    PX5 RTOS拥有对POSIX pthreads API的原生支持

    多线程方面,Linux唯一能做的就是面向进程,而进程行为的开销非常大。为了解决这个问题,大约在90 年代中期,IEEE 人员提出了一个 POSIX 标准,用于将多线程放入进程内,从而
    发表于 05-18 13:59

    基于QT自制上位机(多线程

    前言:应用程序在某些情况下需要处理比较复杂的逻辑,例如常规的图传上位机,如果在传输图片跑到较高码流或对图像执行一些处理任务是,引用多线程可以明显 改善响应度和反馈速度。 QT多线程使用的注意事项
    发表于 05-09 11:47 1次下载
    基于QT自制上位机(<b class='flag-5'>多线程</b>)