单片机学习小组
登录
直播中
李涛
8年用户
1459经验值
私信
关注
请问如何将Swift语言应用到MCU开发中?
开启该帖子的消息推送
请问如何将Swift语言应用到MCU开发中?
回帖
(1)
王明钊
2022-2-11 09:45:26
接下来将作者将介绍本人在进行的一个项目,旨在开发出一个适合于MCU的Swift开发环境。
项目框架
原生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来方便的操作底层硬件了。
接下来将作者将介绍本人在进行的一个项目,旨在开发出一个适合于MCU的Swift开发环境。
项目框架
原生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来方便的操作底层硬件了。
举报
更多回帖
rotate(-90deg);
回复
相关问答
如何将
自研rknn文件
应用到
rockx实施检测并推流呢?
2023-03-13
2901
在OpenHarmony上使用js和c
语言
开发
,
如何将
日志保存在文件
中
?
2022-03-30
2250
在OpenHarmony上使用js和c
语言
开发
如何将
日志保存在文件
中
?
2022-04-25
2416
请问
如何将
adi的spice模型(.cir文件)添加到pspice里?
2018-11-22
7388
当
将
IoT原理
应用到
工厂流程时,在转换过程中会丢失什么?
2021-06-16
1286
请问
OpenHarmony的JS
如何将
日志打印到文件
中
?
2022-04-21
2935
如何将
adi的spice模型(.cir文件)添加到pspice里?
2023-11-28
1177
Microchip是否RN4020用于在Apple产品上使用
Swift
程序的库
2018-11-02
2214
如何将
CubeMX项目从一系列
MCU
迁移到新系列的
MCU
?
2023-01-16
628
xilinx XST属性设置如何
应用到
全部工程
2013-04-25
2313
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分