问题标签 [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.
c - LPC17xx:检查 RTC 是否正在运行
我正在使用 NXP LPC17xx 系列微控制器(LPC1759 和 LPC1768)。
如何确定 RTC 是否正在运行?
我正在做一个测试
但这似乎不太可靠。打开我的设备时,我已经看到了 3197 年左右的值。
如何判断 RTC 是否正在运行并且其值是否未损坏?
编辑:
我最终在 RTC 值中添加了一个简单的完整性检查:
它在我的 POST 期间运行,如下所示。
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
arm - CORTEX lpc1768教程
我需要一些使用 cortex lpc1768 的教程。我认为它没有很好的文档。请给我一些信息和教程。
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 引导加载程序一起正常工作?
c - 使用 STM32F103 微控制器 (Cortex-M3) 重新编程 DMA 起始地址
下面的 IRQ 处理程序耗尽了 USART3 传入的 32 个字节数据。第一个 IRQ TC 事件读取前 6 个字节,然后重新编程 DMA 引擎以读取最后 24 个字节。第二个 TC 重新绘制它以再次读取标头此方法将允许使用 DMA 的可变长度消息。但是我似乎无法更改 DMA 起始地址。我希望能够将每条消息存储在单独的缓冲区中,但是它只是在收到每条消息时将第一个缓冲区覆盖。我究竟做错了什么?微控制器是 STM32F103ze (Cortex-M3)。
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
、、、、mdw
等mww
)load_image
。奇怪的“JTAG-DP STICKY”错误与我的 ram 链接器脚本有关,找到了带有RAM 链接器脚本的 LPC1758 项目模板,只需要修改 LPC1768 的内存大小并且 load_image 工作得很好。
不过,我仍然想知道如何正确配置 eclipse 以进行 GDB 调试。
arm - stm32如何使用llvm+clang编译
有人知道如何使用 binutils 和 newlib 构建 llvm+clang 工具链以及如何使用它吗?
- 主机:Linux、AMD64
- 目标:cortex-m3、stm32
- c-lib:新库
- 汇编程序:gnu as
arm - ARM (Cortex M3) 的应用内编程如何工作?
我正在开发一个基于 Cortex-M3 的定制设备,我需要实现应用内编程 (IAP) 机制,以便可以在没有 JTAG 的情况下更新设备固件(我们将使用 TFTP 或 HTTP)。虽然 ST Microelectronics 提供的与 IAP 相关的代码示例对我来说已经足够清楚了,但我并不真正了解重新刷新是如何工作的。
据我了解,指令是由 CPU 通过 ICode 总线(当然还有预取块)从闪存中获取的。所以,这是我非常愚蠢的问题:为什么正在运行的程序在重新刷新自身时不会损坏(即更改运行它的闪存)?
assembly - ARM 程序集“延迟”功能不适用于统一/thumb-2 语法
我正在使用以下代码为 ARM 做一个简单的基于计数器的延迟/等待:
我从 dwelch 的blinker01 mbed_samples获得了这个功能,它在其他 led-blinking 类型的示例程序中运行良好。但是,我目前正在处理的程序需要.syntax unified
位于顶部,因为我使用的是 Thumb-2 指令(例如 ITTEE)。
我怀疑“.syntax 统一”是问题,因为我采用了已知工作的blinker01 示例并添加了.syntax unified
它,当我上传到我的板时它不再工作。
虽然我还没有弄清楚所有 gdb 的东西来证明这一点,但该功能似乎没有计数/延迟。
是否有不同的方法来重写这个“延迟”函数以使用统一/Thumb-2 语法?
embedded - STM32编程技巧和问题
我在互联网上找不到任何关于 STM32 编程的好文档。STM 自己的文档除了寄存器功能之外什么都没有解释。如果有人能解释我的以下问题,我将不胜感激?
我注意到在 STM 提供的所有示例程序中,main() 的局部变量总是在 main() 函数之外定义(偶尔使用 static 关键字)。有什么理由吗?我应该遵循类似的做法吗?我应该避免在 main 中使用局部变量吗?
我有一个在时钟中断句柄中更新的全局变量。我在另一个函数中使用相同的变量作为循环条件。我不需要使用某种形式的原子读取操作来访问这个变量吗?我怎么知道时钟中断在函数执行过程中不会改变它的值?每次我需要在函数中使用这个变量时,我是否需要取消时钟中断?(但是,这对我来说似乎非常无效,因为我将它用作循环条件。我相信应该有更好的方法来做到这一点)。
Keil 会自动插入一个以汇编语言编写的启动代码(即 startup_stm32f4xx.s)。此启动代码具有以下导入语句: IMPORT SystemInit IMPORT __main 。在“C”中,这是有道理的。但是,在 C++ 中,main 和 system_init 都有不同的名称(例如 _ int _main__void)。即使不使用“extern“C””,这个启动代码如何仍然可以在 C++ 中工作(我试过了,它成功了)。c++ 链接器 (armcc --cpp) 如何将这些语句与正确的函数相关联?