问题标签 [ecos]

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 投票
3 回答
5012 浏览

gcc - GCC MIPS-32 调用约定/栈帧定义

MIPS-32 处理器架构似乎没有明确的标准化堆栈框架和 C 语言调用约定(寄存器使用等)。也就是说,似乎完全取决于汇编器/编译器工具链来定义自己的堆栈框架和调用约定。我一直在努力寻找 GCC 编译器用于 MIPS-32 指令集的约定的明确参考。我专门在 Cygwin 上使用 GCC 交叉编译器,它针对在 eCos 开源内核的嵌入式环境中使用的 MIPS-32 内核。

任何对有关该领域 GCC for MIPS-32 的权威文档的参考将不胜感激。

0 投票
1 回答
230 浏览

embedded - 寻求(价格合理)eCos开发板

我听说过eCos,看起来它作为一个爱好项目来玩会很有趣。

谁能推荐一个价格合理的开发板。如果它不会增加太多成本,我想要几个按钮来按下(并以编程方式检测按下)和一个用于调试输出的 LCD。以太网会很好(嗯,也许还有 wifi USB 和蓝牙,如果它们不增加太多成本的话)。

有什么建议么?(我通常为 ARM 7 或 9 开发,但是否需要同样的玩弄?)

0 投票
3 回答
7092 浏览

embedded - 嵌入式 Linux 还是 eCos?

一种看待它的方式 - 嵌入式 Linux 从桌面 Linux 开始,并抛弃了嵌入式系统不需要的部分(这真的是真的吗?),而 eCos 是从头开始为嵌入式系统设计的。

现在,假设一个 ARM 处理器,可能是 ARM 7 - 性能会有所不同吗?实际上,我们谈论的是一个负载非常低的系统,每天最多 500 笔交易。

一个比另一个(或 FreeRTOS 等)有什么优势?稳定性、成熟度、性能、开发工具,还有什么?

我所能想到的就是,如果我确定我永远不会移植到另一个操作系统,那么如果我使用嵌入式 Linux,我不需要一个操作系统抽象层来允许我在主机(桌面 Linux 机器)。

有什么想法或意见吗?谢谢。

0 投票
1 回答
181 浏览

ecos - 当启用 cdl_option 时,我们可以将特定 CFLAG 添加到 eCos 包吗?

假设我们有一个名为 CYGPKG_FOO 的包,它有一个 cdl_option “CYGPKG_FOO_FEATURE_A_ENABLE”。当启用此 cdl_option 时,我希望将特定的 gcc 标志(例如“-DFEATURE_A=1”)添加到此包的 CFLAGS 中。

但是“eCos 组件编写者指南”说:

http://ecos.sourceware.org/docs-3.0/cdl-guide/build.make.html#BUILD.FLAGS

从上面的链接中,看起来我们无法根据 cdl_option 选择添加/删除 CFLAGS ......

所以我的问题是:我可以做第一段中描述的事情吗?如果可以,怎么做?

谢谢!

0 投票
1 回答
700 浏览

ecos - 为“Linux Synthetic”目标构建 ECOS 时出现问题

我正在尝试使用 ECOS 构建 Synthetic Linux 目标。我的软件环境:

  • Ubuntu 11.4
  • GCC 4.5.2
  • 生态系统 3.0

在配置工具中,我使用“所有”包设置了“Linux Sythetic”目标。按 F7 (build) 编译开始,但后来它说:

/opt/ecos/ecos-3.0/packages/hal/synth/i386linux/v3_0/src/syscall-i386-linux-1.0.S:汇编程序消息:make:离开目录`/opt/ecos/linux_build' /opt/ecos /ecos-3.0/packages/hal/synth/i386linux/v3_0/src/syscall-i386-linux-1.0.S:457:错误:__restore_rt 的.size 表达式不计算为常量

/opt/ecos/ecos-3.0/packages/hal/synth/i386linux/v3_0/src/syscall-i386-linux-1.0.S:457:错误:__restore 的 .size 表达式不会计算为常量 make:[src /syscall-i386-linux-1.0.od] 错误 1 ​​make: [build] 错误 2

从第434行开始,文件/opt/ecos/ecos-3.0/packages/hal/synth/i386linux/v3_0/src/syscall-i386-linux-1.0.S的内容是:

所以__restore__restore_rt是未定义的。

我试图注释掉这部分并删除与信号相关的包(它说它是一个信号处理程序的东西),但它看起来是 ECOS 内核的基础部分;当部分被注释掉时,构建似乎成功,但是当我编译示例应用程序时,由于缺少符号(cyg_hal_sys_restore)而出现链接器错误。

愚蠢的想法,但我试图用“cyg_hal_sys_restore”和“...rt”相同的方式替换“__restore”,只是为了消除undefs(并不是真的希望错误的代码不会导致错误),结果是:构建是好的(因为没有undefs),示例编译是好的(因为没有丢失的符号),但是示例a.out在我启动它的神圣时刻抛出段错误。

Halp,请,我不熟悉内联 asm 或 ECOS。

0 投票
1 回答
376 浏览

gdb - 使用 gdb 检查 eCos mips 目标上的“非当前”线程

我有一个运行 eCos 的 MIPS 目标,它使用多个线程。对于调试,我使用 gdb 7.5 和 JTAG 探针。

我如何从 GDB 检查和回溯非当前线程。我确实有基线程地址,以及来自备用线程的程序计数器(如果需要,我可以正确找到其他信息)。

由于 gdb 不知道 eCos,因此诸如“信息线程”之类的命令不起作用。所以我很可能不得不手动在gdb中使用哪个线程上下文......

0 投票
2 回答
676 浏览

c - PowerPC 的 GCC C/C++ 交叉分析实现问题

我正在尝试实现 gcc 分析。

我正在使用带有 PowerPC 的嵌入式环境 eCos。我用 C 编程。

当我使用开关编译和链接时-pg,我发现符号_mcount未定义。

我意识到我需要实现这个功能,因为它是特定于目标的。

对功能有什么要求_mcount

我是否正确,它必须保存和恢复所有寄存器?是否有任何特殊寄存器必须与标准 32 一起保存和恢复?

我看到评论说_mcount必须在禁用中断的情况下调用,或者_mcount在记录调用树数据之前禁用中断?

我的 PowerPC 是 8245。这是 603e 系列处理器。

我正在使用作为 powerpc-eabi 的交叉编译器构建的 GCC 4.6.1。

这是 gcc 生成的 _mcount 调用示例。正在分析的函数的第一条指令是显示的第一行:

编译器开关创建的代码-pg执行以下操作。

  • mflr r01) 调用者的地址用两条指令和存储在堆栈中stw r0,4(r1)
  • 2) 刚才输入的函数的地址和r0两个指令一起lis r12,35存入addi r0,r12,-32088

因此当_mcount被调用时r0包含输入的函数地址,4(r1)包含调用者的程序计数器。这对信息被存储并用于创建调用图。

我通过阅读 gcc 源代码 gcc/libffi/src/powerpc/asm.h 找到了这些信息。

我仍然不确定_mcount预期会返回什么。看来它必须恢复LR,所以_mcount不能使用blr,它必须恢复LR(4)r1并使用跳转指令而不是blr返回到之后的指令bl _mcount。这有意义吗?

0 投票
1 回答
6404 浏览

gdb - GDB 远程协议:如何分析数据包?

我有:

  • 带有 eCos OS 的专有原型 ARM 板(基于 Cortex-M3)
  • 该板具有已编程的 RedBoot 引导加载程序
  • 串行线 (RS-232)
  • ARM 的 GDB 调试器 (arm-eabi-gdb)
  • 主机操作系统是 Windows/Cygwin 和/或 Linux(实际上,没关系)

问题: GDB 调试器无法通过串行线路连接到目标。

我想要的是:嗅探 GDB 远程协议的数据包,以了解目标上的 GDB 存根是否处于活动状态并且正在运行。

详细信息: RedBoot 可以选择将目标的控制权传递给内置的 GDB 存根。我知道 RedBoot 还活着,我可以连接到它并通过串行线路向它发送命令。RedBoot 手册说,可以通过键入 $ 或 + 符号(实际上是 GDB 远程协议数据包的前缀)来切换到 GDB 存根。当我发送这些符号时,它似乎适用于终端死机。但我不确定 RedBoot 是否使用 GDB 存根支持编译(不要问我为什么 :-))。

然后,当我尝试使用我的 GDB 调试器连接到开发板时,我得到以下图片(在 Windows 上):

端口正确,波特率也正确。实际上,如果我尝试对另一个未连接任何东西的串行端口执行相同的操作,我会得到相同的输出。

我想知道的是 GDB 存根是否发回任何东西?

直觉上我认为可能

会有所帮助,但 GDB 手册说它的效果非常有限,我的情况超出了它。

是否可以使用启用调试日志记录的宏来编译 GDB 调试器?

0 投票
2 回答
917 浏览

c++ - 在 ARM 上为 eCos 构建 C++ 应用程序

我正在寻找在 ARM 处理器上为 eCos 构建 C++ 应用程序。我的程序需要几个标准的 C++ 头文件,例如 vector、iostream、list、...

我的问题是:我怎样才能做到这一点?有没有人有为 eCos 构建和部署 C++ 应用程序的经验?

当我使用 arm-eabi-g++ 编译器编译应用程序时,出现以下错误

意味着不存在 C++ 向量库。

但是,arm-none-eabi-g++ 编译器确实包含这些标准头文件。我确实收到以下错误:

我可以为 eCos 使用 arm-none-eabi-g++ 编译器吗?如果是,我该如何解决这些错误?如果没有,我该怎么办?

提前谢谢了!

0 投票
1 回答
540 浏览

stm32f4discovery - Ubuntu 12.04 中带有 stm32f4discovery Cortex-M4 的 eCos

我在 stm32f4discovery Cortex-M4 中为 eCos 编写了一个简单的程序,它遵循以下步骤。

$ecosconfig 新的 stm32f4discovery

$配置工具

$arm-none-eabi-gcc -o hello.elf hello.c -Lecos_install/lib -I ecos_install/include -mcpu=cortex-m4 -mthumb -g -O2 -ffunction-sections -fdata-sections -Ttarget.ld -目录库

$arm-none-eabi-objcopy -O 二进制 -R .sram hello.elf hello.bin

其实,就是成功。但是,我不知道如何看到“hello ecos!”。

我想我需要设置波特率和 tty。所以,我使用 minicom 来做到这一点。不幸的是,我失败了。