问题标签 [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.
c - 多个文件的静态函数
语言:C 环境:裸机
该程序有许多子模块。我希望每个子模块的功能不能不被其他子模块看到/使用,除了这些功能是API函数。如果子模块只包含单个文件,最简单的方法是使用除 API 函数之外的静态函数。但是,多功能子模块如何工作?
c++ - LoopFillZerobss 对 main 的引用未定义
我正在为 STM32F4 微控制器编译一个 c++ 应用程序。我的所有代码都成功编译,但链接步骤失败并出现以下错误:
我熟悉未定义对主要错误的引用的典型原因,即尝试在没有主要存在的情况下编译应用程序。但是,我确实有一个 main.cpp,当然,其中还有一个 main 函数。它编译为 main.o,并与编译期间创建的其他目标文件链接。
我正在交叉编译到 STM32F407 上,并且正在运行裸机。
有人对此有任何见解或以前见过此错误吗?我看到 LoopFillZerobss 函数的唯一地方是电路板的程序集启动文件。
arm - 测量裸机 ARM Cortex A9 系统的 CPU 效率
我在 ARM-Cortex A9 处理器的核心上实现了一个裸机程序。该程序将处理 2 个中断。现在我想测量这个 CPU 的效率。可能是 CPU 空闲时间与 CPU 繁忙时间的比率。我正在使用 zedboard(zynq 7000 系列)进行测量。
由于我没有在内核上运行操作系统,我现在知道如何获得 CPU 效率。
干杯,S
c - 除非在同一个文件中调用,否则函数不起作用
所以我正在关注教程,但是在C中进行操作,因为汇编太笨拙了。这是我在C中完成的第一个“真正的项目” ,所以这肯定是一个愚蠢的错误,或者是C工作方式的一些细微差别。
无论如何,我有这个代码:
(在这篇文章中,为了测试和简洁,验证被删除了)
好吧,我会用如此不一致和“古怪”的词来描述它是如何工作的。目前,我认为至少有一个问题是从它所在的文件以外的任何文件调用drawPixel。从blink.c 调用drawPixelBridge 可以工作,drawAsciiCharacter 也是如此,但是直接从blink.c 调用drawPixel 似乎都不起作用并且(可能) 导致任何未来尝试绘制任何东西失败。
我想我应该解释一下绘画是如何工作的。通常,gpu_makeBuffer 向 GPU 发送带有指向 gpu_request 结构的指针的“邮件”。然后,GPU 通过将该结构的“缓冲区”属性设置为指向将在屏幕上绘制的字节序列的指针来对此做出响应。鉴于这些东西出现在屏幕上的正确位置(尽管尺寸和间距不是我所期望的),我认为这是可行的。
c - 将代码添加到现有固件
我正在研究Cortex-M3。我想在现有固件映像中添加一个功能(或 ISR)而不更新整个程序。我可以在没有 main 的情况下编译和构建一个函数并写入闪存吗?如果我知道这个函数的写入地址,我可以使用函数指针调用这个函数吗?
我们有单线程代码,没有操作系统。根本问题是在这种情况下我们将如何创建一个安装和使用应用程序的环境。
assembly - 在 ARM cortex-a 系列上启用 neon
我想在裸金属皮质 A-15 上初始化 NEON cp。在遵循ARM 的指令后,我在平台初始化序列的末尾编写了这个序列:
我收到此错误:
我正在使用 arm-eabi-as --version
:
如果我更改FPEXC
为FPSCR
程序编译并且正在运行引发 unhandler 异常:
memory - 开始写一个 ARM RTOS 并且对内存映射感到困惑
因此,我之前为学校编写了一个小型 RTOS,但是我们只是使用引导加载程序 (redboot) 留给我们的内存映射。它(TS-7200)有 4x 8MB ram 段,但引导加载程序已将它们“重新映射”为从 0 开始连续。我基本上想知道是什么机制使这成为可能,因为我现在正在考虑编写一个用于基于 px4fmu arm 的自动驾驶仪的重量更轻的固件,并且想知道我的内存发生了什么,以便我可以找出我的链接器脚本以及内存保护。
引导加载程序是否打开了 MMU 并设置了页表,以便将地址 0-32MB 转换为正确的物理地址?如果是这样,我认为翻译不会自动发生在主管模式下,这就是引导加载程序让你进入的状态。
我怀疑情况并非如此,并且引导加载程序做了一些 GPMC 咒语来改变内存芯片的寻址方式。我读了一些关于外围设备不可重新映射的内容,这对这个理论是有意义的。如果是这种情况,有人可以快速概述一下这是如何工作的/哪些地址最终意味着什么?我之前在 SoC 用户指南中看到过有关“总线地址”的内容,这些内容如何关联/转换为各种类型的内存中的地址?
tcp-ip - BeagleBone 的裸机 TCP/IP 堆栈?
我计划在没有任何 Linux 发行版但使用纯裸机代码的情况下使用 BeagleBone。
所以首先:是否已经有一些示例代码可用?特别是包含以太网连接的 TCP/IP 堆栈?
谢谢!
embedded - cmake 是否适合裸机嵌入式系统?
我已经看到越来越多的嵌入式开发人员使用 cmake 作为其裸机(即无操作系统)嵌入式系统的构建配置工具。但是,虽然 cmake 非常适合将在各种主机架构上本地运行的项目,但它在没有操作系统且目标处理器不变的嵌入式系统中比 Makefile 增加了什么价值?
编辑:如果代码是专门为一个运行裸机的嵌入式处理器/板设计的(即没有操作系统,至少不是 POSIX 操作系统),CMake 相对于简单的 Makefile 有什么优势?