问题标签 [bare-metal]
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.
windows - 等同于 Windows 的 makemenu 配置
是否有任何类似于 Windows 的 make menuconfig 实用程序?我有一个用于基本嵌入式系统的软件堆栈,在构建之前需要一些配置(构建环境在 windows 下,但使用 makefile)。
arm - 与 newlib 链接:对 memcpy 的未定义引用
我正在尝试构建一个 arm 引导加载程序,它依靠 newlib 提供一些系统调用(如 memcpy)。
当我运行时:
我得到以下信息:
现在,我正在攻击 memcpy,并希望其他人跟随。当我运行nm /usr/arm-elf/lib/thumb/libc.a
(我相信这是 libc 的 newlib 版本)时,它显示:
因此,这表明 memcpy 是在库中定义的。
我运行strace
上面的ld
命令以确保它实际上正在查看该文件,并且确实如此。
我在这里想念什么?为什么它抱怨未定义的 memcpy?
c - 在裸机嵌入式系统 (ARM) 上进行分析
我想知道您如何在裸机系统(ARM Cortex a8)上分析软件?以前我使用的是具有内置基准统计数据的模拟器,现在我想比较真实硬件的结果(在 BeagleBoard-Xm 上运行)。
我知道您可以使用 gprof,但是我有点迷茫,因为假设您必须在目标系统上运行 Linux?
我使用 Codesourcery 的 arm-none-eabi 交叉编译器构建可执行文件,目标系统正在运行 FreeRTOS。
assembly - 裸机 BeagleBoard 组装
我最近才试图进入嵌入式编程并正在寻找一些资源。我已经用高级语言完成了相当多的编程,但一直对硬件的实际工作方式着迷。作为让自己最终了解硬件的强制功能,我最近购买了 BeagleBoard XM,目的是通过组装对其进行裸机编程。
我花了一周左右的时间在业余时间阅读 TRM,并在网上搜索示例代码。我找到了一些资源,它们提供了通过串行端口显示数据的好例子,但除此之外没有什么。我曾希望找到一些人们使用中断和 sdma 的例子,但还没有找到。作为一个入门项目,我的目标是编写一个非常简单的程序,该程序将从串行端口输入字符并将其回显到屏幕上。我想让它利用中断/ sdma。通读 TRM 并不清楚如何实现这一点。对这个主题完全陌生,很难确切地知道我什至需要寻找什么才能理解文档。我想知道是否有任何专家能够提供任何利用 BeagleBoard 的一些硬件功能的示例 asm 代码。毕竟,再多的文档也无法替代一个好的具体代码示例。
language-agnostic - 语言实现与编译器/解释器向金属发出指令的距离有多远
我不想将此作为“有人在 2 年内击败我的问题”的“答案”, 所以我提出了一个新问题。从那里的答案中可以看出(参见 N. Ramsey,他写道:
“...但是,如果您查看麻省理工学院 Arvind 教授的开创性工作,他的团队设计并构建了数据流机器,其中基本计算操作在本质上更具声明性......”
裸机指令可能是声明性的或非强制性的。
有没有人觉得在这个方向上可以走多远?编译器必须总是将函数式语言转换为命令式语言吗?是否存在支持此功能的硬件?
我只是好奇- 一直在看前卫。朗。趋势,我终于想知道没有可变状态(例如)的真正含义是什么。
gcc - 我怎么知道 .data 部分需要从哪里获取初始化数据?(gcc 链接器)
在构建基于 gcc 的裸机 mcu 项目时,您需要在启动期间注意 .data 和 .bss 部分的初始化。
.bss 部分非常简单,因为我只是将整个部分填充为 0。但是 .data 部分中的变量需要将其初始化数据保存在 rom/flash 中并在启动时复制。
我如何知道在哪里可以找到具有初始化值的数据?
让我们举个例子。
假设我在 main.c 中创建了两个全局变量
然后我可以在目标文件上使用 objdump 来查看它们将在哪个部分,但我在 objdump 输出中找不到任何应该放置 init 数据的地方。
然后我可以查看整个系统生成的 elf,在本例中为 main.elf。
我在哪里可以找到它们的位置以便我可以复制数据?我需要在链接器脚本中添加什么?
它应该在 .text 或 .rodata 之类的文件中,但我怎么知道呢?
如何检查 my_global_variable_one 的初始化数据在哪里?
我可以使用 readelf 或 objdump 等任何 binutils 命令找到这些数据的位置吗?
/谢谢
这是在 stm32 (Cortex M3) mcu 上,使用的是 CodeBench 版本的 gcc。
assembly - Runtime assembler error on coreb of bf561
Could somebody give me some clue about how to resolve this error:
At runtime my program crash on bare metal coreb:
when debugging, this assembler line of code is in cause.
is there is something wrong with it?
here is the debugging details from gdb using .align 8:
just before:
after exception:
using .align 4 as suggested it crash the same way. the register values are:
before crash:
after crash:
same as before:
(
x86 - x86 上裸机程序的 BIOS
使用 BIOS 中断是个好主意INT10
吗?或者我应该考虑coreboot、UFEI还是openFirmware?这些兼容吗?我应该用什么来显示到屏幕上?
gcc - Microblaze 交叉编译
有谁知道如何使用 gcc 为 xilinx 的 microblaze 处理器编译裸机程序?
使用 xilinx sdk 很容易做到这一点,但现在我正在尝试将 microblaze 构建集成到更大的构建工作流程中。换句话说,我需要能够在命令行中做所有事情——而不是使用 sdk gui。
大多数 xilinx 支持和示例都以他们的 sdk 为中心。他们网站上似乎对 gnu 工具的支持有限,但他们似乎专注于想要为 microblaze 编译 linux 内核的用户。我只想编译一个简单的裸机应用程序。
理想情况下,我可以做类似的事情
最后得到一个 microblaze 可执行文件。
有没有人这样做过?有谁知道任何例子?
arm - __irq 在 ARM 系统编程中的作用是什么?
我了解__irq用于为 ARM7(v4) 架构定义中断服务程序功能。但是它对功能有什么改变呢?
根据ARM 信息中心:
__irq 关键字允许将 C 或 C++ 函数用作中断例程。__irq 是一个函数限定符。它影响函数的类型。
ARM 编译器对使用__irq函数限定符定义的例程提供了什么样的特殊处理?