问题标签 [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.
c - 在linux中无法正确读取串口
我对一块板(ERC 32 处理器)进行了编程,每次从串行端口发送一个字符时都返回一个字符。当我通过 GTKterm 发送一个字符时,一切正常并且电路板正常返回。我正在用 C 编写代码来发送和取回字符;但是,它要么以某种方式失败,要么适用于某些处决,然后突然就不再起作用了。我阅读了很多关于串行端口的问题,但无法弄清楚发生了什么。
我尝试了 3 种方法:
1)阻塞读/写代码
问题:它工作了一段时间,然后读函数被阻塞并且没有占用任何字节。下面的代码
2)线程阻塞读/写代码
问题:读函数阻塞并且不占用任何字节。
注意:我编程的方式是首先初始化读取线程,以确保它开始“观察”端口,而不管任何写入调用。下面的代码
3)带有信号处理程序的非阻塞读/写代码
问题:正如您在代码中看到的,我在主循环(端口观察程序循环)之前放置了一个写调用。端口的信号处理程序也已设置。它写但不读任何东西。下面的代码
我的目标是在循环系统中制作一个硬件,其中要传输的数据从 linux 端开始,通过 uart 到板,板获取数据,处理并将其返回到计算机,然后循环运行再次直到满足某个停止条件。我为板子编写了一个简单的代码,只是为了在增加复杂性之前测试单个字符循环。
值得注意的是:
-> 如果我编写一个简单的代码,只用一个字符调用一个写入函数并同时执行 GTKterm,我可以在 GTKterm 控制台中看到板响应。
-> 对于代码的阻塞版本,当代码在读取功能中阻塞时,如果我重置电路板,它将采用电路板欢迎消息的第一个字符。这是预期的,但我不知道为什么编程中的写入调用板它不需要,但 GTkterm 需要。
-> 我还在直接 linux 机器上尝试了一些代码,并且遇到了同样的问题,并且 GTKterm 工作正常。
我不确定是否有我没有看到的更棘手的设置。任何帮助将不胜感激。
开发板:ERC32 芯片 (TSC695F) 采用 RTEMS 实时操作系统进行编程。芯片UART是全双工的。
计算机:Windows 7 上的 VMware 虚拟机上的 Mandriva linux。
$ uname -a
Linux localhost.localdomain 2.6.36.2-desktop586-2mnb #1 SMP Wed Dec 22 17:11:08 UTC 2010 i686 i686 i386 GNU/Linux$ cat /etc/*-release
Mandriva Linux release 2010.2 (Official) for i586
c - rtems 中的简单字符设备
我是RTEMS的新手,我想为它写一个非常简单的字符设备,但是当我在互联网上搜索时,我什么也找不到。
我可以为 linux 编写字符设备,但没有任何 RTEMS 经验。
我想编写一个具有 3 个功能的字符设备:init()、exit()、read ()。
当我调用 read 时,只返回一个字符串。
是否有任何参考可以提示我编写这个简单的设备驱动程序?
riscv - 为 rtems 5 bsp 测试模拟 risc-v
如何使用模拟器为 RISCV 运行 RTEMS BSP 测试?
我遵循了 sparc/erc32 的 RTEMS快速入门指南。
在尝试执行 BSP 测试时,我遇到了在单独线程中突出显示的相同问题,但按照该响应中的说明进行操作,并且能够使用软件指令模拟器 (SIS) 执行测试,如下所示:
rtems-test --rtems-bsp=erc32-sis --rtems-tools=$HOME/quick-start/rtems/5 .
回复称 SIS 还支持 RISCV 模拟。
我再次查看了 riscv/rv32i 的安装说明,但无法使用 SIS 执行 bsp 测试。
rtems-test --rtems-bsp=rv32i-sis --rtems-tools=$HOME/quick-start/rtems/5 .
失败并显示以下内容:
error: cannot find bsp configuration file: rv32i-sis.ini
查看带有 的目录erc32-sis.ini
,我只找到与穗相关的 riscv .ini 文件。
raspberry-pi - U-boot 部署问题
我目前正在为嵌入式系统(RPI2 的 RTEMS)开发应用程序。您可能知道在嵌入式系统上开发过程意味着:
- 修改程序
- 编译并加载到de SD卡中
- 将 SD 卡插入板上
这是一个乏味的过程,您甚至可以打破 SD 插槽以进行持续使用。这就是为什么我试图为在 RPI 上开发和部署应用程序建立一个舒适的环境的原因。我的想法是使用 Eclipse 作为所有过程(编辑、编译和执行)的 IDE。到目前为止,这些是我解决不同问题的想法:
- 使用 U-boot 从 TFTP 加载应用程序映像。[解决了插拔SD卡的问题]
- 使用CTD eclipse pulgin [即解决编译问题]
- 使用 Terminal View eclipse 插件代替 putty [解决了查看应用程序控制台打印的问题]
您可能会注意到我唯一未解决的问题是执行问题。这个想法是每次编译时编译的文件都位于TFTP服务器目录,因此u-boot客户端可以加载。我不知道该怎么做是如何远程告诉 u-boot 重新加载图像(图像总是具有相同的名称)。我知道我可以简单地重置 RPI,但我不知道这是否会损坏某些东西,而且我很想知道是否有更优雅的方法来做到这一点。
我想做的另一件事是以某种方式指定您是要在目标上还是在像 QEMU 这样的模拟器上运行应用程序。
提前致谢
c++ - 如何在 Eclipse 中配置 RTEMS?
我想使用 Ubuntu 在 Eclipse 中使用 RTEMS 开发一个简单的程序。我已经按照https://devel.rtems.org/wiki/Developer/Eclipse/Plugin安装了RTEMS CDT Support但我无法配置 Window > Preferences > C/C++ > RTEMS 路径,因为 /opt/rtems-4-9 (默认值)不存在。当我尝试在新项目中使用 RTEMS Toolchain 时,会显示下一条消息:*'Invoking: RTEMS C++ Compiler /opt/rtems-4.9/bin/g++ -O0 -g -Wall -c -fmessage-length=0 -pipe -MMD -P -MP -MF"src/HelloWorld.d" -MT"src/HelloWorld.o" -o "src/HelloWorld.o" "../src/HelloWorld.cpp" /bin/sh: 1: /opt/rtems-4-9/bin/g++: 未找到 make: *** [src/subdir.mk:20: src/HelloWorld.o] 错误 127 "make all" 以退出代码 2 终止。
我究竟做错了什么?我能做些什么?请帮我。谢谢,安娜
c++ - RTEMS工具和内核安装问题
我在 Ubuntu 19.10 中安装 RTEMS。在https://docs.rtems.org/releases/rtems-docs-4.11.3/user/installation/index.html#rtems-tools-and-kernel (../source-builder/sb- set-builder --prefix=/opt/rtems/4.11 4.11/rtems-i386) 它显示下一条错误消息(我删除了报告的第一部分,因为不可能发布超过 30000 个字符):
有关更多信息,请参阅:如何在 Eclipse 中配置 RTEMS? 谢谢,安娜
cmake - 在 CMake 中导入 (RTEMS) 库
我正在尝试以现代方式在 CMake 中导入库,如此线程中所示: 如何在 cmake 中添加库路径?
目标是建立一个 RTEMS 测试程序。我在 Ubuntu 20.04 机器上构建,并且正在使用 arm/stm32h7 BSP 交叉编译 ARM 目标。
这些库位于外部 lib 文件夹中。我几乎让构建过程正常工作,但是 CMake 似乎做了一些破坏链接过程的事情。我可能犯了这个错误,但我很难弄清楚。
这是我的 CMake 文件的基本设置,在我为 RTEMS 二进制文件的交叉编译设置了所有内容之后:
构建单个源文件似乎工作正常。CMake 尝试的原始链接命令如下:
我得到了错误:
这可能是因为库不知何故不在搜索路径中。然后我发现以下命令正确链接了二进制文件:
是不是导入库的方式不对?我可以使用诸如 target_link_options 之类的命令手动将 -L 标志添加到我的构建目标中,但我认为如果在链接 RTEMS 库时搜索路径只是一个接口要求,那就太好了。
更新:我想我发现了一个错误:我将库路径作为SHARED
库导入,并且可能必须将其导入为STATIC
. 该命令现在看起来像这样:
更新2:
我解决了这个问题。仍然有一点语法错误,我认为引号丢失了。设置库属性的命令现在如下所示:
并且二进制文件正确链接:-)
更新3:
它又停止了工作。这真的很奇怪。-L 标志似乎丢失了..
亲切的问候
罗宾
c - newlib init_array 仅包含带有 RTEMS 的 0xffffffff
我正在尝试在 SAME54P20A 上移植 RTEMS。我设法制作了一个可编译的基本 BSP 和一个基本应用程序。我使用
但是在目标上运行应用程序时,它似乎永远不会到达应用程序任务。我通过单步调试汇编代码确定了这个问题。期间不调用任何现有函数__libc_init_array
。
这是函数的程序集:
当到达地址 0x6b14 时,寄存器 r3 包含 0xffffffff 最终触发板的复位。
以下是寄存器状态:
我无法弄清楚这是什么原因。
这是应用程序代码:
编辑(在 Tom V 评论之后) 寄存器 r3 由该行加载
因此,它在地址 0x8914 处加载了文字(来自转储):
如果我没记错的话,r3 不应该取值0x3e9
吗?
c - 使用 RTEMS 信号量同步时,信号处理程序更新的变量是否已优化?
假设函数 isr_callback() 在硬件中断上被调用。如果 my_function() 设置变量 data 为 0,并等待 tx_complete_semaphore,那么当 tx_complete_semaphore 被 isr_callback() 释放时,变量 data 是否会在 my_function() 中更新为 1?或者是否必须将变量数据限定为 volatile 才能在 my_function() 中正确更新?
termios - printf() 可以使 SMP 安全吗?
我正在尝试在 Leon3/gr712rc(2 核)上使用 SMP 运行 RTEMS。我让它部分运行,但它在 printf 上间歇性地崩溃。谁能告诉我是否有办法使 printf() SMP 安全?printf 似乎使用了使用 rtems_mutex_init() 和 rtems_binary_semaphore_init() 的 termios,我认为这不是 SMP 安全的(但我也是新手,所以我不确定)。谢谢!