问题标签 [rtems]

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 投票
1 回答
184 浏览

c - 外部符号值自动分配到 RAM 末尾

我不明白为什么外部符号等于链接器中定义的 ram 的结尾。

特别是,我在下面的 rtems 代码中看到了这种情况:

外部符号“rdb_start”定义 - start.S - 第 155 -157 行

外部符号“rdb_start”用法 - bspgetworkarea.c - 第 23-41 行

例如,当您在链接器中定义 RAM 大小 0x800000 并将入口地址设为 0x40000000 时,rdb_start 值自动对应于 0x407FFFF0。如果您定义任何其他类似于 rdb_start 的符号并将其设为全局 rdb_start,您会看到相同的结果。它的值自动分配给 407FFFF0。

为什么?

0 投票
1 回答
898 浏览

c++ - 为以太网适配器设置自定义 ip 时绑定套接字失败

问题

在我们运行 RTEMS 4.9.2 的系统上,我们遇到了一个非常奇怪的套接字通信问题。我们正在设置一个套接字并使用以下命令进行绑定:

这适用于 UDP 通信,除非在下面解释的奇怪的特定场景中。bind即使设置正确,我们遇到的问题是此调用失败。我们得到125RTEMS 的错误是EADDRNOTAVAIL

请求的接口不存在或请求的地址不是本地的。

明显的原因

在设备启动时,我们可以通过以下两种方式之一来设置我们的网络:

  1. 网络 IP 和子网是根据默认引导加载程序 (UBOOT) 中的内容自动配置的,并通过 RTEMS 操作系统进行设置。

  2. 启动时间后调用RTEMS 函数rtems_bsdnet_ifconfig来更改唯一以太网接口的 IP 地址。

为了澄清起见,选项 2 的调用如下:

如果按照选项 1 的指示设置网络,则一切都按预期工作,但如果使用选项 2(即使设置与选项 1 定义的网络选项匹配),则套接字绑定将失败。

RTEMS 是否存在已知原因或错误,表明如果您重新配置 IP,此绑定将失败?

附加信息

  • 我们正在使用一种基本上使用ioctl("eht1", SIOCSIFADDR, ...).

  • 如果我们绑定我们的套接字而不指定本地地址(即使用INADDR_ANY),那么它在任何情况下都有效。

  • rtems_bsdnet_ifconfig是函数的简单接口ioctl。它来自rtems_glue.c并具有功能签名int rtems_bsdnet_ifconfig(const char *ifname, uint32_t cmd, void *param)

  • 除了这个绑定之外,所有正常的网络功能似乎都可以工作。

  • 看了这个之后,我想也许我需要做更多的事情来重置我的 IP 地址。但这不起作用,使用第一个答案甚至做任何事情SIOCSIFFLAGS都会导致所有网络功能停止。

0 投票
1 回答
815 浏览

c - 在 rtems 中使用 powf 函数(未定义对 powf 的引用)

我正在尝试在 rtems 应用程序中使用 powf 函数。当我打电话给 powf(a,b); 在 Init() 函数内部,它编译正常。但是当我在其他函数中调用 powf 时,即使我有那些#include <math.h>#include <float.h>. 我事件尝试合并文件,但它是相同的。

可能是什么问题?

编辑(添加):我在下面添加了源代码和生成文件。编译后的 rtems OS 包由 shell 环境变量 RTEMS_MAKEFILE_PATH 指定。

生成文件:

../Makefile.base :

../src/init.c:

../../../../abfrcnn/bare-c/lrn_layer/lrn_layer.c

命令的结果make

0 投票
0 回答
103 浏览

linux - 不是由 rtems 中的 mkdir 函数创建的文件

我写了一个在linux上运行的functino,在处理数据时会在linux上生成一些文件。我在 rtems(一个实时操作系统)中调用了该函数,它编译正常,并且在很大程度上似乎运行良好。但我发现它无法在指定目录中创建结果文件(这是一个选项)。(我将 SD 卡用于文件系统)。我有一个一年前编写的测试程序,我在其中测试文件在 SD 卡上的读取、写入和复制,一切正常。但是在我通过修改 SD 卡测试程序并添加更多东西(与深度学习相关)而制作的这个新应用程序中,该程序无法生成文件。在代码中,它检查是否存在名为“result”的目录,如果不存在,则创建该目录并生成通过 index.html 循环的文件。我希望有人能找出问题所在。标头对于 linux 和 rtems 都可以。(rtems 具有相同的标头)文件系统正常,mkdir 返回 0。我尝试从 rtems 添加一些标头(来自运行良好的测试程序),但它没有工作。可能是什么问题呢?任何帮助或建议表示赞赏。

以下是部分处理结果:

0 投票
2 回答
278 浏览

rtems - RTEMS libbsd 编译问题

对于 sparc 和 4.12 版本,我按照链接 https://github.com/RTEMS/rtems-libbsd中提到的步骤进行操作。

在这一步我得到了一个错误

0 投票
1 回答
214 浏览

cross-compiling - RTEMS 没有构建?

我正在尝试通过以下列出的说明来编译 RTEMS:

https://devel.rtems.org/wiki/TBR/UserManual/Quick_Start

我使用“RTEMS Source Builder”为 SPARC 架构生成了一个交叉编译器套件:

https://docs.rtems.org/rsb/

我的目录结构如下:

我通过 git 获得了 RTEMS v4.12:

我正在使用以下脚本来构建 RTEMS:

这是我的make文件输出:

make 和 make 安装步骤非常快(不到一秒钟)完成,而且据我所知,没有任何构建的测试样本或 RTEMS 文件。

理想情况下,我想为我真正的目标架构执行此操作,但我只是想尝试让示例正常工作并对其进行调整,但经过几次尝试后我完全陷入困境。任何想法我做错了什么?

0 投票
1 回答
1267 浏览

arm - RTEMS STM32F4如何使用BSP

我对 RTEMS 很陌生。我认为已经成功构建 RTEMS 以在 STM32F4 上运行。我已经尝试了示例文件夹中包含的 LED 闪烁示例(槽计时器)(此处:https ://github.com/RTEMS/examples-v2/tree/master/led )。

我已经编译并在我的板上闪烁了它,并且 LED 闪烁,所以我认为有一个很好的设置。不幸的是,没有太多关于“如何使用板级支持包 (BSP)”的示例来对硬件相关功能进行编程。

我想更进一步,我想使用 USART 以便拥有一个对调试和学习有用的控制台。我真的不知道如何使用 BSP(在代码级别)来实现 USART 或更一般地实现硬件驱动程序。我应该定义什么?我需要打什么电话?我可以想象,使用 RTEMS 和 BSP,我不应该在“寄存器级别”编写代码。我对吗?有人可以给我一个简单的例子吗?你能给我一些关于这个论点的澄清吗?

在此先感谢您的帮助。洛伦佐

0 投票
0 回答
1543 浏览

c - 套接字失败:协议族不支持地址族

我正在尝试使用 RTEMS 5 创建一个 BSD 套接字以实现 UDP 通信。我有以下功能:

执行期间返回以下错误:

协议系列不支持地址系列 (106)

此代码对应于 EAFNOSUPPORT。我发现此错误是针对其他功能的bind(),但不是针对socket(). 我认为这与 RTEMS 配置有关……但是什么?

提前致谢

0 投票
2 回答
73 浏览

memory-management - 内存段之间的屏障

我正在研究如何使用基于 ARM 的 Xilinx Zynq 在 RTEMS 中管理内存。该程序在两个带有 SMP 的内核上运行。

我已经阅读了有关内存屏障和乱序执行范例的信息,我得出的结论是,屏障或栅栏是硬件实现而不是软件。

RAM 分为几个部分,但是有一些部分称为屏障,它们与其他部分共享区域。我附上一张截图。

开始文本屏障

xbarrier 从下一节开始的地方开始,在上一节结束的地方结束。另一个例子:

rwbarrier

在这一节中,屏障从与上一节相同的地址开始,并在下一节开始之前结束。

这些内存部分是否与屏障指令有关?为什么要实现这些内存部分?

提前致谢,

0 投票
1 回答
236 浏览

c - 如何链接应用程序以通过 RTEMS 进行动态加载?

我正在使用RTEMS 4.11 和内置的 POSIX API 函数将程序映像动态加载到内存中。使用以下代码将程序映像加载到 RTEMS 中:

我正在使用 RTEMS Source Builder 构建的 GCC 来编译位于prog_name内存文件系统中的对象。

我应该使用什么命令行来正确编译要以这种方式加载的单个 C 文件?

作为参考,我尝试了以下命令行选项,但出现错误:

我还尝试了一些其他组合并使用该rtems-ld程序。有任何想法吗?