目前的位置: 首页 学术信息 正文

ZDS 2023技术报告分享第3篇:从Arduino到Zephyr RTOS,开发嵌入式应用程序


前言:

2023年Zephyr开发者大会(ZDS)于6月27日至30日在捷克布拉格隆重举行。与以往两次不同,本次ZDS由Zephyr项目规划和管理,并作为首届嵌入式开源峰会(EOSS)的一部分进行。在这个令人期待已久的盛会中,全球Zephyr开发者们共同探讨了Zephyr实时操作系统(RTOS)的最新技术与发展趋势。作为一款开源、灵活和可扩展的嵌入式实时操作系统,Zephyr项目在2014年由英特尔发起,2016年作为Linux基金会项目正式面向公众启动,得到了全球范围内的广泛关注和采用。


ZDS 2023共70余个技术报告,涵盖了使用指导与展示、新功能与技术、架构修改与操作系统、多核异构与虚拟化、模拟器、测试、工业流程与代码管理、安全性、应用案例、工具与调试等丰富多样的内容。湖大嵌入式实验室的小伙伴们将对本次大会的所有技术报告进行逐一收集、整理与分享,尽最大努力为Zephyr开发者提供ZDS 2023技术报告的开发经验、实践成果以及解决方案的参考。


今天分享第3篇技术报告,题目为:

“从Arduino到Zephyr RTOS,开发嵌入式应用程序”




作者简介:


8098

TJ VanToll是Blues Wireless的软件开发人员、技术作者和首席开发倡导者。TJ拥有超过十年的开发经验,其中包括在jQuery、NativeScript和Kendo UI团队工作的几年。


D4EF

Zak是Blues的工程师。Zak自2014年在微软担任Windows物联网团队创始成员以来,一直在物联网领域工作。他的物联网之旅将他从Windows物联网带到Azure物联网,然后是Particle,现在是Blues!




背景:

我们用于原型设计的工具和用于扩展的工具之间存在巨大的鸿沟。这个是真的吗?多年来,嵌入式世界已经形成了一种说法,有两种类型的工程师:“制造商”和“现实世界的工程师”。制造商使用Arduino和Raspberry Pi,选择ArduinoWiring/C或Python进行开发。现实世界的工程师使用半导体公司的板子,使用RTOS。这个叙述并不真实。实际上,根据需要,所有类型的工程师都会使用Arduino、Pi和eval板。语言的选择往往更多是以正在解决的问题和正在编写的应用程序为依据,而不是工程师的经验或技能。然而,对我们中的许多人来说,久负盛名的实时操作系统(RTOS)仍然是一个复杂的领域。RTOS仍然被视为仅“真实”应用程序所需的工具。


2023年Zephyr开发者大会上,TJ VanToll和Zak Fields分享了他们从Arduino到Zephyr RTOS的历程,同时为开发人员构建一个案例,让他们将Zephyr应用于所有类型的应用程序,并使其成为他们工具中的主要工具,可用于各种嵌入式应用程序。




使用Notecard通信来升级Zephyr RTOS “blinky”示例:

此示例通过在Zephyr原始示例samples / basic / blinky的基础上构建,说明了向现有应用程序添加Notecard功能的方便性。从功能上讲,该修改将处理循环从1秒减慢到10秒,并向Notehub提交一份说明,指示板载LED的当前状态。


要求:

1.硬件:蓝调无线Notecard、蓝调无线Notecarrier、蓝调无线Swan、STLINK编程器/调试器

2.软件:Docker、VSCode、VSCode "Dev Containers" Extension、OpenOCD

3.云软件:Notehub.io




开始:

一、Notehub.io

1.在使用此示例之前,必须在Notehub.io设置一个免费帐户。创建完账户过后,需要创建一个项目来跟踪 LED状态的注释的端点。

2.创建项目后,就需要更新main.c中名为project_UID的定义。

3. Notecard连接到Notehub后,可以查看项目内部,并看到一个名为zephyr blink的设备。Notecard将以连续模式运行,使其能够保持恒定的蜂窝连接。连续模式为向Notehub发送消息提供了尽可能低的延迟。有关Notecard API和示例的更多信息,请参考https://  dev.blues.io/ index.html。



二、克隆库

1.运行以下命令:

git clone https:// github.com/ blues/ note-zephyr.git –recursive

2.如果在没有标志的情况下进行克隆,则可以使用以下两个命令分别更新子模块:

git submodule init

git submodule update



三、构建开发容器

此步骤对于确保正确构建开发人员容器映像至关重要。

Linux:

要在Linux上从容器启用切换和调试,需要提供对主机USB控制器的访问。执行以下步骤,以提供USB访问:

1.打开./.devcontainer/devcontainer.json

2.取消注释该部分:runArgs(如下图所示)


ABC


Windows/Mac (x86_64):

确保Docker Desktop正在运行。


ARM 64 (aarch64):

1.打开./.devcontainer/devcontainer.json

2.取消注释中的对象:args(如下图所示)

BBD


注意:

如果在打开之前未能正确更新devcontainer.json开发容器,您可能需要在之前清除docker构建缓存再试一次。

FDE



构建和运行:

一、编译

1.在 VSCode中打开此文件夹。

2.重新打开开发容器中的文件夹。

a.按热键组合(Mac:Cmd+Shift+P)

b.从命令选项板下拉菜单选择Dev Containers: Rebuild and Reopen in Container

3.使用以下选项之一构建二进制文件:

a.按热键组合(Mac:Cmd+Shift+B)

b.使用菜单系统:从应用程序菜单中选择Terminal > Run Task...;从下拉菜单中选择Zephyr: Build Application


注意:

如果您看到以下消息,则说明您未能更新源中的UID,并且Notecard将不会与您的Notehub项目链接。


/workspaces/note-zephyr/src/main.c:26:9:note: '#pragma message: PRODUCT_UID is not defined in this example. Please ensure your Notecard has a product identifier set before running this example or define it in code here. More details at https:// bit.ly/ product-uid'



二、闪烁

Linux

在开发容器中,使用菜单系统:

1.从应用程序菜单中选择Terminal > Run Task...

2.下拉菜单中选择Zephyr: Flash Application (Container)


Windows/Mac:

1.启动调试服务器(OpenOCD):调试服务器打开一个端口以接收调试和程序指示。然后,它将这些指令转发给目标通过在线调试器和编程器(如STLINK-V3MINI)的器件。在主机上的容器外部执行以下命令:

openocd --search /usr/share/openocd/scripts --file interface/stlink.cfg --command "transport select hla_swd" --file target/stm32l4x.cfg

2.在开发容器中,使用菜单系统:

a.从应用程序菜单中选择Terminal > Run Task...

b.从下拉菜单中选择Zephyr: Flash Application (External)


注意:

必须使用STLINK-V3MINI闪存设备,并且不支持DFU。




调试

一、收集串行日志

1. LPUART被指定为Swan的默认控制台输出。Swan的LPUART通过JTAG连接器连接,所以提供的所有字符串都将通过分配给STLINK-V3MINI的串行端口出现。只要Swan有电源(例如电池等),就不需要额外的USB电缆。

2.串行端口配置为115200波特、8 位、无奇偶校验位和一位停止位。以Linux为例,假设STLINK是唯一插入机器的USB外围设备,您可以找到列出的串行端口,例如/dev/tyACM0。


二、GDB

Linux

1.选择适当的调试配置:

a.使用以下选项之一打开活动栏: 热键组合(Mac:Cmd+Shift+D);选择bug和三角形图标

b.展开下拉列表,其中绿色三角形位于“Run and Debug”面板的顶部: 使用下拉列表确认已选择“Swan Debug (Container)”

2.使用以下选项之一启动调试器:

a. 按“Run and Debug”面板顶部的绿色三角形

b.从应用程序菜单中选择“Run > Start Debugging”

c. 按F5功能键

Windows/Mac:

启动调试服务器(OpenOCD):

调试服务器打开一个端口以接收调试和程序指示。然后,它会通过在线调试器和编程器(如STLINK-V3MINI)的器件将这些指令转发给目标。在主机上的容器外部执行以下命令:

openocd --search /usr/share/openocd/scripts --file interface/stlink.cfg --command "transport select hla_swd" --file target/stm32l4x.cfg


启动调试器(GDB):

调试器是一种软件,允许单步执行二进制文件逐行进行。调试嵌入式设备时,二进制文件执行不与调试器驻留在同一台计算机上,因此需要一台服务器(例如 OpenOCD)将指令中继到远程二进制文件。

1.选择适当的调试配置:

a.使用以下选项之一打开活动栏: 热键组合(Mac:Cmd+Shift+D);选择bug和三角形图标

b.展开下拉列表,其中绿色三角形位于“Run and Debug”面板的顶部: 使用下拉列表确认已选择“Swan Debug (External)”

2.使用以下选项之一启动调试器:

a. 按“Run and Debug”面板顶部的绿色三角形

b.从应用程序菜单中选择“Run > Start Debugging”

c. 按F5功能键



上一条:ZDS 2023技术报告分享第4篇:Zephyr中系统设备树支持 下一条:ZDS 2023技术报告分享第2篇:Zephyr日志子系统概述

关闭

嵌入式与网络计算湖南省重点实验室
版权所有 © 2023 湖南大学