问题标签 [cortex-m3]

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 投票
4 回答
9024 浏览

eclipse - 工具链 ARM Cortex M4

有没有办法为基于 ARM Cortex M3/M4 的微控制器(Stellaris,Kinetis)设置 Eclipse + gnu gcc + 调试器?

最好的问候,彼得

0 投票
1 回答
2415 浏览

gdb - gdb - 为远程目标生成核心文件?

我正在使用用于 ARM 的 gdb 的 Codesourcery 版本(即 arm-none-eabi-gdb)进行调试,并尝试生成一个核心文件以供以后检查。OpenOCD 是我的 GDB 目标。当我运行“gcore”或“generate-core-file”时,所有 gdb 都告诉我“无法创建 corefile”。有什么建议么?一般来说,是否可以对远程目标进行核心转储?

0 投票
2 回答
5561 浏览

gcc - 使用 ARM Cortex-M4 和 gcc 编译器的定点数学

我正在使用 Freescale Kinetis K60 并使用 CodeWarrior IDE(我相信它使用 GCC 作为编译器)。

我想将两个 32 位数字相乘(结果为 64 位数字)并且只保留高 32 位。

我认为 ARM Cortex-M4 的正确汇编指令是 SMMUL 指令。我宁愿从 C 代码而不是汇编中访问此指令。我该怎么做呢?

我想理想情况下的代码是这样的:

当我在 CodeWarrior 中尝试此操作时,我得到了 c 的正确结果(536870912 = 0.25 作为 D0 FP 编号)。我在任何地方都看不到 SMMUL 指令,而乘法是 3 条指令(UMULL、MLA 和 MLA——我不明白为什么它使用无符号乘法,但这是另一个问题)。我也尝试了 32 的右移,因为这可能对 SMMUL 指令更有意义,但这并没有什么不同。

0 投票
4 回答
5287 浏览

c - 内部 FLASH 存储器中 C 结构的对齐

我有一个配置结构,我想保存在 ARM cortex M3 的内部闪存上。根据规范,保存在内部flash中的数据,必须对齐32bit。因为我的结构中有很多布尔值和字符,我不想使用 32 位来存储 8 位......我决定使用__packed预处理器编译指示打包结构,然后当我将它保存为一个整体结构时,我只需确保结构大小可被 4 整除(4 字节 = 32 位),如果需要,我通过添加填充字节来做到这一点。目前,在开发过程中,我对结构进行了很多更改,为了使其与 32 位对齐,我需要一直更改填充字节。目前,结构看起来像这样

有没有更好的方法来实现我正在做的事情?我是嵌入式编程的新手,我想确保我没有犯错。

编辑:请注意。数据保留在内部闪存的末尾,因此省略填充将不起作用...

0 投票
6 回答
28324 浏览

embedded - 如何调试 STM32 设备中的意外复位?

我正在使用 STM32F107 芯片在 C 语言中进行一些开发,并且在某些时候,当我调用特定函数时,设备开始重置。我没有调试器,我的调试只是串行端口上的纯文本。

我使用了其他一些微控制器,在这些微控制器中我能够访问寄存器以查看重置的原因,但我似乎无法找到该设备的等价物。我知道 Cortex-M3 的硬件异常,但我不知道其中一个是否被触发,因为当我在这些处理程序中时,我似乎无法通过 usart 发送文本(可能是因为我的 TX函数使用中断?)。

所以,我决定问问在这个设备上比我更有经验的人:调试这种情况通常会做什么?

编辑

其中一位开发人员激活了 WWDG 看门狗,它正在重置硬件,然后我才能从故障处理程序中获取我的信息。这是一个硬故障,因为通过指向错误位置的指针调用函数。但是,我会保留这个问题,希望有人能提供更多详细信息(或有关它的材料),以便从保存在硬故障(@dwelch 想法)中的寄存器中指向 C 代码。

0 投票
2 回答
17055 浏览

cortex-m3 - 有人知道任何非常基本的stm32教程吗?

最近我开始了一个需要 Cortex M3 处理器的项目。我以前有一些使用 8 位 AVR 微控制器的经验,所以我希望不会有太大的转变。

所以我买了一个 STM32L-Discovery 套件(因为低功耗是很重要的一点)并开始查看一些示例。但是,我一开始就完全卡住了。当使用 AVR 编程时,这一切都非常简单,只需包含 2 或 3 个文件,就可以编写一个简单的 main.c,比如一个闪烁的 LED。

然而,IAR EWARM(我正在使用)中的示例看起来都非常臃肿,文件很多,难以启动。我对大多数在线教程都有同样的问题。

有谁知道任何(非常)简单的教程可以帮助我。我正在考虑购买“ARM Cortex-M3 权威指南”,因为它似乎受到强烈推荐。

这可能是一个非常愚蠢的问题,但我现在被困太久了,我感到有点绝望。

0 投票
1 回答
4439 浏览

ld - 如何使用 GNU ld 创建一个空白部分?

我正在研究 Cortex-M3 芯片。堆栈空间在源代码中保留,在 bss 部分有一个未初始化的数组。我使用的链接器脚本如下:

我正在尝试在 SRAM 区域的开头为堆栈分配一个部分,以便我可以检测到使用错误的堆栈溢出。

我添加了一个名为 .stack 的部分:

链接完成时没有任何错误或警告,但问题是 __stack_end 不在 SRAM 区域上,而是在 FLASH 区域上。

我知道我可以使用 __attribute__((section("name"))) 给出的单独部分,但我认为如果我可以在链接器脚本中处理它会更好。

如何在 SRAM 区域上创建一个空白部分?

0 投票
1 回答
5996 浏览

c - Cortex M3 - 如何使用信号量

我有一个关于在 cortex m3 中使用信号量的问题。我找到了一个线程“ARM cortex: mutex using bit banding” ARM cortex: mutex using bit banding。有一个简短的问题描述,最后一个答案对我的问题有好处 - 但我不确定如何在 c/c++ 中实现它。

“我从未在 ARM 上使用过位带;我倾向于对所有此类操作使用加载独占/存储条件。使用循环来加载独占旧值,计算新值,然后使用一个条件存储来写回它。循环直到条件存储成功(如果不是第一次,它可能会第二次)。

如果有人可以发布一个简短的代码如何使用它,我将不胜感激。

谢谢,马丁

0 投票
0 回答
2231 浏览

c++ - 如何使 Keil RealView ARM MDK(用于 Cortex-M3)与重定向(到 USART)和 STL 一起工作?

几天来我一直在寻找解决方法。到目前为止还没有运气。

我用什么:

  • STM32F103VET6
  • J-Link
  • RealView MDK-ARM v4.12
  • 我的程序中的 C 和 C++ 代码

在我的代码中包含 STL 之前,一切正常。我可以毫无问题地重新定位到 USART printf()scanf()这是通过包含Retarget.cRV-MDK 附带的内容并编写我自己的sendchar()getkey(). Retarget.c有一行#pragma import(__use_no_semihosting_swi)要求链接器使用 的重定向版本<cstdio>,而不是调用半主机实现。

但是当我开始#include <deque>and时deque<int> buffer;,它不再起作用了。似乎链接器已经决定<deque>取决于 semihosting <cstdio>,这与我刚刚编写的重定向代码冲突。

我尝试过但失败了:

  • 摆脱__no_semihosting_swi并尝试覆盖_sys_open(). 它不起作用,因为半主机<cstdio>依赖于已经导出此符号的目标文件。
  • 此处建议的用法$super$$$sub$$语法(我想我已经尝试了他们提供的所有内容!)
  • 使用“MicroLIB”。这是史诗般的失败。
  • 深入研究提供的 STL 标头。我发现没有引用任何stdio. 而且,由于我可以#include <cstdio>并且仍然有重新定位,我认为即使是参考也不会产生任何影响。

我怀疑该解决方案与指导链接器有关,但到目前为止我还没有弄清楚......这太令人沮丧了!

0 投票
2 回答
7170 浏览

compilation - 关于链接描述文件创建和验证的建议

长话短说。我希望学习如何创建一个好的链接器脚本,这样如果我改变平台/架构/供应商,我就不会再因为不知道该怎么做而陷入零基础。我不关心任务的难度,只关心理解它。

我已经开始了一个项目,可以说是创建一个基础或框架,用于在 STM 的 32 位 Cortex-M3 芯片上进行编程和开发。在jsei97的帮助下,从 STM32F103RB 开始(我也有一个 TI Stellaris LM3S828,但这是另一个问题),无需许可 IDE。由于我是学生,大多数学生买不起这样的东西。

我知道有 ODev 和 Eclipse 插件等等,并且已经阅读了各种博客、wiki、文档/手册页,并且大多数项目都为您提供了一个链接器脚本,几乎不知道为什么以及在何处定义了事物。

我已经为 STM32 编译了一个 arm-none-eabi 工具链,但我被挂断的地方是链接器脚本。CodeSourcery 也需要一个。在阅读 gnu 手册页后,我对如何创建它们及其语法有了一个基本概念,但除了明显的 .text、.bss 和 .data 之外,我根本不知道从哪里开始添加各种额外的部分.

我创建了一个基本版本,但出现链接错误,要求提供部分定义,这就是我卡住的地方。我知道如何定义它们,但知道我所做的是否接近正确是问题所在。