bare-metal

    1热度

    1回答

    我想为我的裸机项目做一个CMAKE脚本。目标是一个STM32F4,像主机一样的arch-linux。 我用这个的CMakeLists.txt: IF(WIN32) cmake_minimum_required(VERSION 2.6) ELSE(WIN32) cmake_minimum_required(VERSION 2.4) ENDIF(WIN32) INCLUDE(CMakeFor

    0热度

    2回答

    我有一块ARM板,ROM的0x80000000和RAM的0x20000000。电路板开始在0x80000000处执行原始二进制代码。 我设法运行一个简单的ARM汇编程序,但我必须使用C而不是ASM。我知道我需要使用某种链接器脚本,然后手动将.data节复制到RAM并清除.bss,安装堆栈等,但是我还没有找到可靠的解决方案,尤其是链接器脚本(在我看来,这非常混乱)。 此外,我无法让链接器输出一个原始

    1热度

    1回答

    我有一个beaglebone黑色,我想从头开始在一个项目上工作。为了调试和闪烁目的,我已经设置了flyswatter2。 我可以有一个启动代码,理想情况下应该工作。但问题是,我不知道从哪个内存地址开始启动黑客?以及我应该将我的代码闪存到电路板内存中的什么内存地址? 如果我知道我应该从哪里开始启动代码的地方,那么我可以在调试器的帮助下编写启动代码,然后使用UART编程以获得代码进度。但我坚持了第一步

    0热度

    1回答

    我正在开发裸机程序。该平台是x86,32位,保护模式,我在环0.我想通过使用xsetgv指令启用AVX。 CR4的第18位是1,如果我使用xgetgv,则没有错误发生,但xsetgv崩溃(virtualbox报告致命错误)。有问题的代码如下: mov ecx, 0 mov eax, 0x7 mov edx, 0 xsetbv 什么问题?

    2热度

    2回答

    最近,我们有了一个想法,使用模板创建裸机开发的通用高性能抽象。 通常每芯片制造提供了C头是这样的: //Following structure is POD so we can rely on its memory layout struct Periphery{ volatile uint32_t reg1; volatile uint32_t reg2; }; #d

    2热度

    1回答

    我试图在QEMU(Cortex-A15的Versatile Express)上启动并运行一个小的ARM内核。目前它只是将sp设置为小堆栈的顶部,并将单个字符发送到UART0。 _start.arm: .set stack_size, 0x10000 .comm stack, stack_size .global _start _start: ldr sp, =stack+stac

    0热度

    1回答

    我想对Dual-core A20 AllWinner ARM CPU做裸机编程。我没有太多的多核心编程经验。我有一个关于裸机多核编程的问题。 我的假设是双核CPU将有两个程序计数器,以便我可以将它们指向两个不同的代码并并行运行它们。 这是真的吗?有没有人可以解释一下Dual-core A20 Allwinner CPU的情况?

    4热度

    3回答

    在裸机C/C++项目中,我使用了gcc-arm-embedded(当前是最新的4.9-2015-q2)。 由于某些原因,我必须避免使用某些功能,如某些stdio et cetera(不想使用重定向或半主机)。 此外,我使用FreeRtos和heap_4.c, malloc()直接重定向到pvPortMalloc()这样的: void* malloc(size_t s) { return

    3热度

    2回答

    我正在编写一个裸机C++应用程序,它将进入一个无限循环,然后永远不会退出。 我有一些对象将被构造在main()的顶部,并且永远不会离开作用域。内存(代码和RAM)非常重要,因为我只有几个k字节可以使用。 优化器通常会为我去掉未使用的析构函数吗?如果没有,有没有办法告诉编译器不要生成任何默认的析构函数? 此外,有没有类似的方式来摆脱其他类的默认功能(复制构造函数等)。

    0热度

    1回答

    我正在使用GDB调试Cortex-M0处理器。使用正常的默认文本界面,我可以做得很好。需要monitor reset halt才能重新启动处理器。否则,我需要重置处理器所连接的调试接口(通过ST/Link-V2的OpenOCD)。 我想使用MI解释器来自动化这一点,但奇怪地无法弄清楚如何使用MI命令完成。似乎很简单,但在阅读手册的每一页之后,我一定错过了它。 我使用的是来自https://laun