问题标签 [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 投票
3 回答
2472 浏览

c - LPC17xx:检查 RTC 是否正在运行

我正在使用 NXP LPC17xx 系列微控制器(LPC1759 和 LPC1768)。

如何确定 RTC 是否正在运行?

我正在做一个测试

但这似乎不太可靠。打开我的设备时,我已经看到了 3197 年左右的值。

如何判断 RTC 是否正在运行并且其值是否未损坏?


编辑:

我最终在 RTC 值中添加了一个简单的完整性检查:

它在我的 POST 期间运行,如下所示。

0 投票
4 回答
5723 浏览

c - GCC 别名在翻译单元之外起作用 -AKA- 这甚至是适合这项工作的工具吗?

我在 STM32 (Cortex-M3) 上使用 FreeRTOS,并使用 ST 的 CMSIS 库来引导所有内容。

CMSIS 库SVC_Handler在启动“.s”文件中定义了弱符号。必须在某处覆盖它才能在中断向量表中获取您的 ISR。FreeRTOS 定义了vPortSVCHandler,这是我想要处理 SVC 中断的 ISR。

我想使用我的应用程序代码(即不修改 FreeRTOS 或 CMSIS 源代码)将两者“粘合”在一起。我认为别名是完成这项工作的正确工具,所以我尝试了这个(在单独的源文件 main.c 中):

这导致:error: 'SVC_Handler' aliased to undefined symbol 'vPortSVCHandler'

事实证明,根据此处的 GCC 文档http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html,为了使用该alias属性,您不能在翻译单元之外对符号进行别名。所以我想我会尝试extern将符号放入 main.c 中,如下所示:

这会产生相同的错误。有什么建议么???

我真的很想避免修改任何一个库。我知道我可以编写一个SVC_Handler简单地调用的函数vPortSVCHandler,但这可能会给 ISR 增加不必要的开销(可能取决于优化设置)。注意:FreeRTOS 示例通过自定义启动文件完成此操作。我正在寻找一种从 C我的链接器脚本中执行此操作的方法。

  • 编译器版本:gcc 版本 4.5.2(Sourcery G++ Lite 2011.03-42)
  • 目标:arm-none-eabi
0 投票
2 回答
4098 浏览

arm - CORTEX lpc1768教程

我需要一些使用 cortex lpc1768 的教程。我认为它没有很好的文档。请给我一些信息和教程。

0 投票
1 回答
1893 浏览

embedded - 使用 USB 引导加载程序时如何设置 ARM 用户应用程序起始地址?

刚从 eBay 买了一块 ARM Cortex-M3 LPC1768 迷你板。它基本上是一个分线板。

但是,根据随附的少量文档,我确定它具有类似于 NXP 的 LPC1700 辅助 USB 引导加载程序 (AN10866)应用说明中描述的 USB 引导加载程序。

两个文档(应用说明和板文档)都表明要构建用户程序,使其起始地址为 0x2000因为 USB 引导加载程序已经在 0x0 并且占用了 8K

两个文档还显示了有关如何在 Keil uVision 中执行此操作的屏幕截图(参见应用说明的第 14 页),但是我计划使用 GNU 工具链(Yagarto + Eclipse + OpenOCD)。

使用 GNU 工具链编译时如何指定0x2000 的起始地址,以便它可以与 USB 引导加载程序一起正常工作?

0 投票
1 回答
3689 浏览

c - 使用 STM32F103 微控制器 (Cortex-M3) 重新编程 DMA 起始地址

下面的 IRQ 处理程序耗尽了 USART3 传入的 32 个字节数据。第一个 IRQ TC 事件读取前 6 个字节,然后重新编程 DMA 引擎以读取最后 24 个字节。第二个 TC 重新绘制它以再次读取标头此方法将允许使用 DMA 的可变长度消息。但是我似乎无法更改 DMA 起始地址。我希望能够将每条消息存储在单独的缓冲区中,但是它只是在收到每条消息时将第一个缓冲区覆盖。我究竟做错了什么?微控制器是 STM32F103ze (Cortex-M3)。

0 投票
1 回答
4618 浏览

eclipse - 使用 OpenOCD 的 ARM LPC1768 的 Eclipse GDB“初始化”和“运行”设置?

我终于想出了如何让代码在这个 LPC1768 迷你板上运行,但是现在我正试图让调试工作。

我使用的工具链是:Yagarto + Eclipse (Indigo) (w/ GDB Hardware Debugger) + OpenOCD。我的 JTAG 接口是:Bus Blaster V2板。

我找到了一个指南,其中介绍了类似的设置,但它针对的是不同的 JTAG 接口,所以不是很有用。还有这篇关于LPC1768 示例的帖子,但 gdb 命令不适用于 OpenOCD。

在这一点上,我确定的唯一命令(用于 init)是target remote localhost:3333(用于连接到 OpenOCD gdb 服务器)。

我应该在此对话框中使用哪些设置和 gdb 命令?

在此处输入图像描述

(忽略“SAM7X256”,只需重新使用上述链接之一的屏幕截图。我使用的是 ARM LPC1768)

此外,我的开发板使用辅助引导加载程序(用户代码从 0x2000 开始)这一事实是否会影响这些调试设置?

更新:根据 dwelch 的建议,我确实设法让一些基本的 OpenOCD 命令正常工作(reset init、、、、mdwmwwload_image。奇怪的“JTAG-DP STICKY”错误与我的 ram 链接器脚本有关,找到了带有RAM 链接器脚本的 LPC1758 项目模板,只需要修改 LPC1768 的内存大小并且 load_image 工作得很好。

不过,我仍然想知道如何正确配置 eclipse 以进行 GDB 调试。

0 投票
2 回答
20869 浏览

arm - stm32如何使用llvm+clang编译

有人知道如何使用 binutils 和 newlib 构建 llvm+clang 工具链以及如何使用它吗?

  • 主机:Linux、AMD64
  • 目标:cortex-m3、stm32
  • c-lib:新库
  • 汇编程序:gnu as
0 投票
5 回答
7905 浏览

arm - ARM (Cortex M3) 的应用内编程如何工作?

我正在开发一个基于 Cortex-M3 的定制设备,我需要实现应用内编程 (IAP) 机制,以便可以在没有 JTAG 的情况下更新设备固件(我们将使用 TFTP 或 HTTP)。虽然 ST Microelectronics 提供的与 IAP 相关的代码示例对我来说已经足够清楚了,但我并不真正了解重新刷新是如何工作的。

据我了解,指令是由 CPU 通过 ICode 总线(当然还有预取块)从闪存中获取的。所以,这是我非常愚蠢的问题:为什么正在运行的程序在重新刷新自身时不会损坏(即更改运行它的闪存)?

0 投票
1 回答
4208 浏览

assembly - ARM 程序集“延迟”功能不适用于统一/thumb-2 语法

我正在使用以下代码为 ARM 做一个简单的基于计数器的延迟/等待:

我从 dwelch 的blinker01 mbed_samples获得了这个功能,它在其他 led-blinking 类型的示例程序中运行良好。但是,我目前正在处理的程序需要.syntax unified位于顶部,因为我使用的是 Thumb-2 指令(例如 ITTEE)。

我怀疑“.syntax 统一”是问题,因为我采用了已知工作的blinker01 示例并添加了.syntax unified它,当我上传到我的板时它不再工作。

虽然我还没有弄清楚所有 gdb 的东西来证明这一点,但该功能似乎没有计数/延迟。

是否有不同的方法来重写这个“延迟”函数以使用统一/Thumb-2 语法?

0 投票
3 回答
11543 浏览

embedded - STM32编程技巧和问题

我在互联网上找不到任何关于 STM32 编程的好文档。STM 自己的文档除了寄存器功能之外什么都没有解释。如果有人能解释我的以下问题,我将不胜感激?

  1. 我注意到在 STM 提供的所有示例程序中,main() 的局部变量总是在 main() 函数之外定义(偶尔使用 static 关键字)。有什么理由吗?我应该遵循类似的做法吗?我应该避免在 main 中使用局部变量吗?

  2. 我有一个在时钟中断句柄中更新的全局变量。我在另一个函数中使用相同的变量作为循环条件。我不需要使用某种形式的原子读取操作来访问这个变量吗?我怎么知道时钟中断在函数执行过程中不会改变它的值?每次我需要在函数中使用这个变量时,我是否需要取消时钟中断?(但是,这对我来说似乎非常无效,因为我将它用作循环条件。我相信应该有更好的方法来做到这一点)。

  3. Keil 会自动插入一个以汇编语言编写的启动代码(即 startup_stm32f4xx.s)。此启动代码具有以下导入语句: IMPORT SystemInit IMPORT __main 。在“C”中,这是有道理的。但是,在 C++ 中,main 和 system_init 都有不同的名称(例如 _ int _main__void)。即使不使用“extern“C””,这个启动代码如何仍然可以在 C++ 中工作(我试过了,它成功了)。c++ 链接器 (armcc --cpp) 如何将这些语句与正确的函数相关联?