问题标签 [gnu-arm]

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 投票
1 回答
479 浏览

c - GNU make 在 makefile 完成之前停止而没有错误

早上好,我正在尝试在 Windows 7 下使用 Eclipse 和 GNU-Arm 工具链交叉编译 Atmel AT92SAM。

我的问题是,链接器完成后构建过程停止,尽管它还应该创建一个原始二进制文件并打印大小。这是 eclipse 创建的 makefile 的摘录:

但是没有执行最后两个命令,也没有创建 .bin。命令行输出是

如您所见,没有调用 objcopy 和 size 命令。有任何想法吗?

0 投票
1 回答
1687 浏览

assembly - arm gnu 汇编器中的 IMPORT 替代品是什么?

我正在阅读学习 ARM 和 ARM 汇编的书。书中的示例基于 armcc 编译器,但我使用的是 arm-none-eabi-gcc。那么如何将这种和平的代码更改为 gnu 汇编程序?

整个例子是:

所以我把它转换成

我正在使用ARMSim进行模拟...但出现一些错误:

未定义的符号 printf 地址不在文本部分中,那么如何包含“stdio.h”以使用 printf 或一般有什么问题?

0 投票
3 回答
1800 浏览

c - 不同的静态全局变量共享相同的内存地址

概括

我有几个 C 源文件,它们都声明了单独的同名静态全局变量。我的理解是每个文件中的静态全局变量应该只在该文件中可见,并且不应该应用外部链接,但实际上我在调试时可以看到同名变量共享相同的内存地址。

就像static关键字被忽略,而全局变量被视为extern代替。为什么是这样?

示例代码

富.c:

酒吧.c:

baz.c:

调试观察

  1. myVar = ...在每个函数内的行上设置断点。
  2. 从 main 中按顺序调用someFooFuncsomeBarFuncsomeBazFunc
  3. InsidesomeFooFunc myVar最初设置为VALUE_A,在跨过它设置为 的线后VALUE_B
  4. 由于某种原因,内部someBarFunc myVar最初设置为VALUE_B在跨行之前,而不是VALUE_A我所期望的,这表明链接器可能已经合并了基于它们具有相同名称的单独的全局变量。
  5. someBazFunc调用时也是如此。
  6. 如果我使用调试器来评估&myVar每个断点处何时给出相同地址的值。

工具和标志

工具链:GNU ARM GCC (6.2 2016q4)

编译器选项:

链接器选项:

0 投票
2 回答
8549 浏览

eclipse - 在没有可用调试信息或程序代码之外的地址“0xXXXXXX”处中断

配置:

使用 Nucleo-L476RG。使用 GNU ARM Eclipse。我从 STM32CubeMX 生成了一个极简代码。我已经在我的板载 ST-Link 中刷新了 J-link 驱动程序。

一直在尝试为我的代码运行调试器,但我的程序计数器未设置为 main()。相反,它无法读取某个内存地址。错误“在地址“0xXXXXXXXX”中断,没有可用的调试信息,或在程序代码之外。” 出现。

我已经包含了屏幕截图和调试器日志,我们可以在其中看到错误。

请帮忙

图片:
https ://ibb.co/bBRHxn https://ibb.co/mGDKA7 https://ibb.co/mE4gOS https://ibb.co/fh5AHn https://ibb.co/jNFMOS https:// /ibb.co/ibmT3S https://ibb.co/gpJaiS https://ibb.co/jgaMOS

日志:

0 投票
0 回答
58 浏览

gcc - 是否可以编译针对与以前版本的最小差异的固件?

我正在使用 gnu-arm 为我的 MCU 生成 .hex 文件。我想通过无线发送固件更新,使用有限的带宽通道,所以想法是只发送增量更新,使用版本之间的差异。是否可以使用 gnu-arm (或其他任何东西)生成与另一个版本差异尽可能小的 .hex 版本?

0 投票
0 回答
317 浏览

linux - STM32F3 C 编程:在实现 ADC 时卡在通道选择上

精简版:

需要 C 编程帮助以选择 STM32F3(探索板)中 ADC 的通道/秒。请在问题末尾找到我现在编写的代码。如果有人可以参考一些裸机编程的资源,那就太好了。

长版:

我正在学习编程 ARM 控制器;我拥有的是 ST32F303 Discovery 板,我相信我正在尝试的方法称为裸机编程。我有为 AVR 微控制器编写纯 C 代码的经验,但这很简单,几乎所有寄存器在整个系列中都是相同的。但是当谈到 ARM 时,我非常惊讶地看到我们必须正确地编译代码的东西(文件)的数量。顺便说一句,我有一个 Linux 系统,所以我将gnu arm 工具链与 Eclipse 放在一起。

经过一些研究和大量 Youtube 视频后,我最终确定了两种材料

  1. STM32片段
  2. NewbieHack - 这个小伙子Youtube 系列是为

当然我也指的是手头控制器的参考手册。但问题是上述两种资源都不是 stm32F3 的直接资源,但我使用相同的工作流程来编写 F3。现在我被 ADC 困住了,因为我不知道如何选择转换渠道,一些建议和指导会很有帮助

这是我到目前为止写的代码

0 投票
1 回答
1397 浏览

c - 如何使用 arm-none-eabi-gcc + cmake 设置 cmocka 示例?

我正在为基于 stm32f4xx 的系统开发固件。为此,我基于 ARM 和 cmake 形式的 arm-none-eabi-gcc 工具链设置了一个工具链。该工具链适用于 Ubuntu。我可以 x 编译和调试(通过 openocd + eclipse IDE)。现在我想为我的代码添加一些功能测试。我正在检查,似乎 cmocka 是用于嵌入式软件测试的好工具。

我现在正在寻找一个将测试集成到 cmake 构建中的示例/模板。

让我们假设 myfunc.c 中的一个简单函数

如果我做对了,我可以在单独的 c 文件中进行测试,例如“test.c”

通常我跑

我的问题包含一些子问题: 1.) 我安装了 libcmocka-dev。这是针对我的主机系统的。我需要为 arm-none-eabi-gcc 编译器安装 cmocka 吗?2.) 如何设置 cmake 来选择 cmocka 库,构建测试并在主机系统上运行它?认为我的工具链文件需要被忽略。

0 投票
1 回答
251 浏览

stm32 - STM32 从特定的 NOR 块启动

我已将 STM32F4 项目从 Keil uVision5 移植到 Eclipse(GNU MCU 插件)。

在我的 Keil uVision5 项目中,我曾经使用第 7 块 (0x080E0000) 作为我的引导代码(我使用STM32 ST-LINK Utility工具验证我的引导代码确实位于第 7 块),我曾经使用 Keil uVision5 非常容易地配置它界面如下图:

在此处输入图像描述

如果我没记错的话,在我的 Keil uVision 项目(其内存配置如上所示)中,MCU 从第 0 块 (0x08000000) 启动,然后立即跳转到第 7 块 (0x080E0000) 以执行我的代码。如果我错了,请告诉我。

我的问题在于我的 Eclipse 项目。您可能已经知道,我们使用名为 mem.ld 的链接描述文件配置内存映射。我尝试使用 mem.ld 模仿相同的行为,但我想我失败了。每当我刷新 Eclipse 生成的可执行文件时,我的代码都不会运行。此外,我找不到在 mem.ld 文件中指示启动区域的方法。下面是我在 mem.ld 文件中的内存配置:

你能帮我用 mem.ld 文件模仿 Keil uVision5 的相同行为吗?我在 mem.ld 配置中犯了什么错误?正确的配置应该是什么?

提前非常感谢。

0 投票
1 回答
166 浏览

arm - arm-none-eabi 全局初始化变量值不正确

我尝试为 stm32f334 做一些例子(只是 LED 闪烁)。当我想使用 .data 部分(通过使用初始化的全局变量)进行约束时,链接器出现问题,我遇到了问题。全局变量的值不正确!

这是我的代码:

startup.s

blink.c

链接器脚本:

makefile

在 .list 我看到正确的值和地址:

但是当我调试变量“wymuszenie_data”的代码值时已损坏(0x2e006816)。

我真的不知道为什么全局变量值不正确。

最好的问候, 马辛

0 投票
2 回答
1377 浏览

gcc - 如何在 GNU ARM 程序集中保留未初始化的内存?

我在我的 Raspberry Pi 上使用 GCC 为我正在学习的课程编译一些汇编代码。根据GNU Assembler Reference中的信息,我了解到我可以在 GNU ARM 汇编中重现以下 C 代码:

通过这样写:

伟大的!现在我该怎么写?

我的理解是,像这样保持未初始化的变量意味着我应该将它视为包含之前内存位置中的任何垃圾值。因此,在我以某种方式赋予它一个价值之前,我不应该使用它。

但是假设出于某种原因,我打算在内存中存储大量数据,并且需要为其预留大量空间。在我看来,如果我无论如何都要用一些数据填充它,那么将整个内存区域初始化为某个值将是一种巨大的资源浪费。然而,据我所知,如果不将其初始化为某个值,似乎无法在 GCC ARM 程序集中制作标签。根据我的汇编教科书,该.word指令后面可以有零个表达式,但如果以这种方式使用“则地址计数器不高级并且不保留任何字节”。我的第一个想法是改用“.space”或“.skip”指令,但对于这个指令,甚至官方文档表示“如果省略逗号和填充,则假定填充为零。”

我有没有办法在 GCC ARM 程序集中不初始化它来保留一块内存?