问题标签 [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.
gcc - GCC MIPS-32 调用约定/栈帧定义
MIPS-32 处理器架构似乎没有明确的标准化堆栈框架和 C 语言调用约定(寄存器使用等)。也就是说,似乎完全取决于汇编器/编译器工具链来定义自己的堆栈框架和调用约定。我一直在努力寻找 GCC 编译器用于 MIPS-32 指令集的约定的明确参考。我专门在 Cygwin 上使用 GCC 交叉编译器,它针对在 eCos 开源内核的嵌入式环境中使用的 MIPS-32 内核。
任何对有关该领域 GCC for MIPS-32 的权威文档的参考将不胜感激。
embedded - 寻求(价格合理)eCos开发板
我听说过eCos,看起来它作为一个爱好项目来玩会很有趣。
谁能推荐一个价格合理的开发板。如果它不会增加太多成本,我想要几个按钮来按下(并以编程方式检测按下)和一个用于调试输出的 LCD。以太网会很好(嗯,也许还有 wifi USB 和蓝牙,如果它们不增加太多成本的话)。
有什么建议么?(我通常为 ARM 7 或 9 开发,但是否需要同样的玩弄?)
embedded - 嵌入式 Linux 还是 eCos?
一种看待它的方式 - 嵌入式 Linux 从桌面 Linux 开始,并抛弃了嵌入式系统不需要的部分(这真的是真的吗?),而 eCos 是从头开始为嵌入式系统设计的。
现在,假设一个 ARM 处理器,可能是 ARM 7 - 性能会有所不同吗?实际上,我们谈论的是一个负载非常低的系统,每天最多 500 笔交易。
一个比另一个(或 FreeRTOS 等)有什么优势?稳定性、成熟度、性能、开发工具,还有什么?
我所能想到的就是,如果我确定我永远不会移植到另一个操作系统,那么如果我使用嵌入式 Linux,我不需要一个操作系统抽象层来允许我在主机(桌面 Linux 机器)。
有什么想法或意见吗?谢谢。
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 ......
所以我的问题是:我可以做第一段中描述的事情吗?如果可以,怎么做?
谢谢!
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。
gdb - 使用 gdb 检查 eCos mips 目标上的“非当前”线程
我有一个运行 eCos 的 MIPS 目标,它使用多个线程。对于调试,我使用 gdb 7.5 和 JTAG 探针。
我如何从 GDB 检查和回溯非当前线程。我确实有基线程地址,以及来自备用线程的程序计数器(如果需要,我可以正确找到其他信息)。
由于 gdb 不知道 eCos,因此诸如“信息线程”之类的命令不起作用。所以我很可能不得不手动在gdb中使用哪个线程上下文......
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 r0
1) 调用者的地址用两条指令和存储在堆栈中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
。这有意义吗?
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 调试器?
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++ 编译器吗?如果是,我该如何解决这些错误?如果没有,我该怎么办?
提前谢谢了!
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 来做到这一点。不幸的是,我失败了。