问题标签 [zephyr-rtos]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
156 浏览

docker - 使用 Zephyr、Bitbucket 和 Docker (Windows) 在 Jenkins 中实现持续集成管道

第一次在这里发帖,所以忽略有关问题的新手详细信息,格式会变得更好:) 我的问题有两个问题:首先它可行吗?第二,如果最终是,任何提示,关于如何做到这一点的建议。我有一个在 Zephyr RTOS(在 nrf 52840 板上)用 c 语言编写的软件,并在 Bitbucket 中进行版本控制。我正在尝试实现一个 Jenkins CI 管道,该管道从 Bitbucket 获取具有新推送更改的代码并构建它以检查错误然后报告。现在,要在 Zephyr 中构建该代码,我需要一个构建环境,我的解决方案是运行一个带有 zephyr 映像的 docker 容器,而不是能够构建该代码并报告一切是否正常。所以基本上我在詹金斯的管道看起来像:

从 Bibucket 获取代码。使用 zephyr 镜像运行 docker 容器,构建代码将结果报告给 Jenkins。到目前为止我所做的:让 bitbucket 和 Jenkins 连接。有一个运行 zephyr 镜像的容器,我从 docker hub 获得。图像是 zephyrprojectrtos/ci。在容器内部我能够 git clone 我的 repos,仍然试图弄清楚如何构建代码,以及是否可以在 docker 容器中运行类似 git clone 的东西,但来自 jenkinsfile。这里有什么提示吗?是否可以将 git clone 命令从 jenkinsfile 传递给 docker 容器?或者我是否必须在运行容器时将所有(如果可能)包含在 docker run 命令中,以便它运行它并自动检出 SW 并构建并报告结果。我对这一切都是新手,Zephyr,Docker,詹金斯和我不知道这是否可行,以及是否有更简单的方法。感谢您的关注

0 投票
3 回答
237 浏览

proxy - 使用 nRF9160 + Zephyr RTOS 的 CoAP 客户端:代理 URI 长度问题

我正在 nRF9160 DK 上开发 CoAP 客户端,运行 Zephyr RTOS。我在使用较长的 Proxy-URI 时遇到问题;短 URI(268 个字符及以下)工作正常,coap 消息按预期到达服务器。但是,具有较长 Proxy-URI(269 个字符及以上)的消息由于某种原因无法通过。例如,使用以下初始化:

以下(短)工作正常

但是这个(更长的)没有,即使 err 返回为 0。

...当我使用 Wireshark 检查 CoAP 消息时,Proxy-URI 选项有警告:专家信息(警告/格式错误):选项比包长

我尝试如下设置附加的 Zephyr CoAP 配置

...但没有运气。

有人知道我可能会错过什么吗?是否有一些 CoAP 配置我需要覆盖其默认值以适应更长的代理 URI 选项?

谢谢。

0 投票
0 回答
111 浏览

c++ - 将单个可执行项目变成多可执行项目

我正在尝试为基于 Zephyr 生态系统的嵌入式设备创建一个项目。我遇到的问题是它强制执行单可执行项目。它使用 CMake。

Zephyr 建议创建 main 的方式CMakeLists.txt(来自其文档):

我想在这个环境中拥有多个可执行文件(用于嵌入式测试目标和额外的可执行文件,如传感器的长时间运行测试等)。最重要的是我想拥有“app”目标在其他可执行目标中的所有符号。我可以为此创建多个项目,但这是一个乏味的解决方案,因为它分散了构建系统并使其在使用方面非常不方便(为 CMake 定义多个构建目录,所有手动检查过时的构建都很容易忘记)。

我遇到的其他解决方案是ExternalProject与一些 CMake 代码混合使用来定义可执行目标。那种工作,但它是非常低效的。函数看起来像这样:

zephyr目录中,我CMakeLists.txt与第一个清单中的目录类似。那行得通,但那很笨拙。Zephyr 源代码将为每个可执行文件从头开始构建。这是非常无效的。

(在上面的清单中,没有链接到可执行文件的自定义代码(如我的项目自己的代码)。这还没有解决,但解决方案很简单,不在这个问题的范围内)。

Zephyr 没有提供任何 CMake API 来创建更多可执行文件,因此我选择了 CMake 解决方案。

理想情况下,Zephyr 应该定义静态库目标,我可以使用add_executable命令创建的目标链接到这些目标。但不幸的是,事实并非如此。

我想出的一种解决方案是从app可执行文件中抓取属性(如链接到它的静态库目标、源、链接标志等),并创建一个库目标,创建的目标add_executable将链接到该库目标。这相当于为可执行文件创建对应的库目标。

问题是我是否在这里遗漏了什么?如何使用 CMake 以非 hacky 的方式完成为该环境创建多可执行项目的任务?

0 投票
0 回答
378 浏览

c - 如何在 Zephyr 中将中断输入更改为模拟输入并再次返回?

我是 Zephyr 的新手,我尝试将我所有的嵌入式软件都交给 Zephyr。我尝试了 Zephyr 文档和大量谷歌搜索,但很难弄清楚如何做到这一点。我试图了解“设备树”是如何工作的,以及如何在应用程序内部和 Zephyr 系统端外部使用它。我试着通过样品,看看它们是如何组合在一起的。现在我正在测试... zephyrproject/zephyr/samples/basic/button/。

我有一个输入(按钮)和一个可选输出(LED)。输入也可以是 ADC 多路复用器的模拟输入。我对其进行了一些修改,它做了它应该做的事情。但我想改变它来做更多的事情。我还想让这个中断(除其他外)让 CPU 脱离深度睡眠。工作完成后重新进入深度睡眠。

Question_1:如何禁用中断,将输入从中断输入更改为模拟输入(在中断/回调处理程序中)并启动ADC?然后,在另一个线程中,我想读取 ADC 并将输入更改回中断输入,启用它,做我想做的任何事情,然后回到深度睡眠。

如何以“Zephyr 方式”完成此操作(因此它可以在不同平台上工作),我在我的 nrf52dk_nrf52832(没有 Zephyr)上执行此操作,它可以满足我的需求。

输入来自带有一个输出的数字键盘,在按键按下时变为高电平,然后返回到每个按键都不同的模拟电平,松开按键时电平变为零。当然,目标是解码按下的键,并使用一条 io 行来完成。

问题_2:何时/如果这适用于 Zephyr;我该怎么做才能使其成为正确的 Zephyr 设备驱动程序?

最好有示例来执行此操作,所有操作都在应用程序中完成。还有一个是用 Zephyr“key_pad_device_driver”完成的。

(在我的非 Zephyr 系统中,我在中断后稍等片刻(大约 0.3 - 3 ms),然后读取 10 个模拟样本,丢弃两个最高和两个最低值,然后如果这些之间的跨度被接受,我取它们的平均值并锁定按下的键。这工作出奇的好)。

她是我的“button/src/main.c”的代码

Zephyr 应用程序还有更多配置内容,但对于能够回答这个问题的应用程序,我认为现在并不重要。但我认为答案确实需要一些配置才能工作。

0 投票
1 回答
403 浏览

multithreading - [zephyr-rtos][riot-os] Zephyr vs. RIOT OS

我是图卢兹大学软件定义电力电子学研究员 Luiz Villa。我的团队正在尝试将 RTOS 嵌入到微控制器中,以便在电力电子设备中创建更友好的嵌入式控制开发过程。我们尽可能避免使用 ISR,原因有两个:

  • 它使软件开发中的协作变得更加容易(我们的项目是开源的)
  • 中断使代码执行时间不确定(我们希望避免这种情况)

我们想在线程速度方面在 Zephyr 和 RIOT-OS 之间做一个基准测试。我们需要一个以 20kHz 运行的代码,其中包含两到三个线程:

  • ADC 采集和数据平均
  • 控制的数学计算(使用 CMSIS)
  • 与外界的交流

由于时间对我们来说如此重要,我们需要知道:

  • 在 Zephyr 和 RIOT-OS 中执行线程的最短时间是多少?
  • 在 Zephyr 和 RIOT-OS 中切换线程所需的时间?

我们的初步结果表明:

  • 单线程测试时睡眠时间为0us,Zephyr的周期为9us,暴动为5us
  • 单线程测试时sleep时间10us,Zephyr周期39us,riot 15us

我们使用带有以下代码的 Nucleo-G474RE:https ://gitlab.laas.fr/owntech/zephyr/-/tree/test_adc_g4

我们对我们的结果感到非常惊讶,因为我们预计这两个操作系统消耗的资源都比它们少得多。

你怎么看?您是否尝试过尽可能快地运行这些操作系统?你的结果是什么?你测试过 Zephyr 的线程切换时间吗?

0 投票
0 回答
102 浏览

embedded - Zephyr RTOS 和 i.MX RT1020 评估板通过设备树访问 Arduino 接头引脚

我正在考虑使用带有 RT 1020 处理器的 NXP 评估板做一个项目。我想尝试并熟悉 Zephyr RTOS。

如何在代码中使用给定的设备树片段访问各种 Arduino 标头 PIN?

我知道我可以很容易地使用具有设备树别名的单个引脚来使用device_get_binding()和。gpio_pin_configure()DT_GPIO_LABELDT_GPIO_PIN

我不清楚如何从上面的设备树片段中访问 Arduino 标头引脚。

0 投票
0 回答
13 浏览

rtos - Zephyr RTOS 中的 sys_trace_void() 和 sys_trace_end_call() 函数调用有什么作用?

我正在尝试为 Zephyr RTOS 编写后端跟踪代码,但一直停留在如何实现和使用 sys_trace_void() 和 sys_trace_end_call() 函数调用上?无法通过 Internet 找到任何资源。

0 投票
1 回答
1675 浏览

visual-studio-code - 如何在 VSC 中设置 Zephyr 项目应用程序?

我正在尝试使用 VSC 开发和调试带有 Zephyr OS 的嵌入式 C 应用程序。这可能吗?是否有设置说明?是否有 zephyr 设置扩展?Zephyr 文档讨论了如何在 eclipse 上调试应用程序,并且有一个 eclipse/zephyr 插件,但如果可能的话,我更喜欢使用 VSC。

由于 Zephyr 使用 CMake,我想我遵循 VSC CMake 项目教程。当它要求选择一个套件时,没有适合 zephyr 的东西,所以我没有选择任何活动套件。使用此设置,我实际上能够为闪烁示例成功构建,但无法调试项目。我得到的错误是:

错误:无法开始调试。来自命令“-exec-run”的意外 GDB 输出。不知道怎么跑。尝试“帮助目标”。程序“/home/mustafa/Code/Sycamore/hello_world/build/zephyr/zephyr.elf”已退出,代码为 42 (0x0000002a)。

如果有人对如何解决此错误或在 VSC 中设置 zephyr 项目有任何意见,那就太好了。谢谢!

0 投票
0 回答
40 浏览

eclipse - Eclipse 中的 zephyr 代码无法解析符号

我正在使用 zephyr OS 调试嵌入式 C 应用程序。我正在使用zephyr eclipse 插件,我能够构建、运行和调试项目。但是,我有时会得到这些符号无法解决的错误。如果我忽略它们,我可以构建得很好,但是它们很烦人。关于如何解决这个问题的任何想法。请参阅下面的图片以供参考。谢谢!

在此处输入图像描述

0 投票
1 回答
287 浏览

bluetooth-lowenergy - NRF52840 上的 HCI_UART,将设备连接到基于 Yocto 的 Linux SBC 错误提示“无法初始化设备 hci0:无法分配请求的地址 (99)”

我正在尝试将基于 Nordic 的 nrf52840 的 BLE 模块连接到基于 Yocto 的 SBC,其中添加了所有与 BlueZ 相关的软件包。

我已经将 Zephyr 的示例 hci_uart 程序刷到了模块上。该模块似乎在我的 Linux PC(BlueZ 版本 5.48)上完美运行,而在 SBC(BlueZ 版本 5.54)上它无法启动。这是我使用时出现的错误

谁能帮我解决这个问题?

提前致谢。