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

    文章

    116

    浏览量

    23802
  • Cortex-M3
    +关注

    关注

    9

    文章

    270

    浏览量

    59480
收藏 人收藏

    评论

    相关推荐

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

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

    socket 多线程编程实现方法

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

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

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

    ESP32会不会有多线程问题,需要加锁吗?

    ESP32会不会有多线程问题,需要加锁吗
    发表于 07-19 08:05

    多线程设计模式到对 CompletableFuture 的应用

    最近在开发 延保服务 频道页时,为了提高查询效率,使用到了多线程技术。为了对多线程方案设计有更加充分的了解,在业余时间读完了《图解 Java 多线程设计模式》这本书,觉得收获良多。本篇文章将介绍其中
    的头像 发表于 06-26 14:18 364次阅读
    从<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 656次阅读
    鸿蒙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 709次阅读

    鸿蒙原生应用开发-ArkTS语言基础类库概述

    ArkTS语言基础类库是HarmonyOS系统上应用开发者提供的常用基础能力,主要包含能力如下图所示。 1.提供异步并发和多线程并发的能力。
    发表于 03-05 15:42

    AT socket可以多线程调用吗?

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

    ArkTS语言基础类库-解析

    Promise和async/await等标准的JS异步并发能力。 TaskPool应用程序提供一个多线程的运行环境,降低整体资源的消耗、提高系统的整体性能,开发者无需关心
    发表于 02-20 16:44

    什么是守护线程?守护线程底层原理和使用示例

    大家好,今天这篇文章来梳理一下有关守护线程的相关问题,这也是之前曾经有被问到过的面试题,在此之前我们先看一看守护线程的使用示例。
    的头像 发表于 01-05 11:01 1421次阅读
    什么是守护<b class='flag-5'>线程</b>?守护<b class='flag-5'>线程</b>的<b class='flag-5'>底层</b>原理和使用示例