问题标签 [libopencm3]
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++ Makefile LD 错误
我正在使用 libopencm3 用 C++ 编写 ARM。但是我的 Makefile 包含错误。就像你现在可以看到的一样!
我有以下 Makefile:
但是链接(LD)不起作用。查看错误:
错误在哪里?我不知道 LD 有什么问题,当我将这个 makefile 用于 C(不是 C++)时,它工作得很好!?
也许是因为我使用 gcc 而不是 g++ 进行 LD'ing?
谢谢,马丁
c++ - Eclipse 使用 libopencm3 编译 STM32F0 但不适用于 STM32F1
我设法为 STM32F051 (@ stmf0discovory) 获得了一个带有 libopencm3 的工作闪烁模板。然后我想为我的 Maple Mini(STM32F103 = cortex-m3)获得一个工作,所以我复制了第一个并将 cpu 标志从 cortex-m0-plus 更改为 cortex-m3,将库从 opencm3_stm32f0 更改为 opencm3_stm32f1 等等上...
但是你可以猜到它没有编译。从编译日志来看,编译器似乎没有调用链接器,这就是为什么它没有找到gpio_mode_setup
函数和GPIO_MODE_OUTPUT
. 以下是 Eclipse 控制台输出:
str32f0 - 工作:
stm32f1 - 枫木,不工作:
我很确定这是一个愚蠢的错误,但我自己找不到它,希望你能给我一个提示。
非常感谢。
c - QtCreator 中有效代码的“预期声明”
我正在使用 QtCreator 进行 C 项目(是的,它主要用于 C++,但到目前为止它对 C 来说还可以)。
现在我在一个编译良好的有效代码上得到了一个红色下划线:
它基本上是这个用于虚拟 COM 端口的未更改的 libopencm3 示例项目。
你能在代码中看到一些问题,也许不是致命的,但是是什么让编辑认为这是一个错误?
我尝试struct usb_device_descriptor
用等效的 typedef 代替,但这没有帮助。
第二行的错误是“预期的},得到。”。关闭}
被注释为“额外;`
以下是该结构的声明方式:
stm32 - STM32 DMA:缓冲区中剩余的字节,编码?
很长一段时间以来,我一直在以某种形式与两个 STM32 板进行 DMA 通信。我目前的问题如下。
我有一个运行以下代码的主机(树莓派),等待开发板初始化通信:
基本上,它会等待一个字节的数据,然后将“中午防御”发送到电路板,然后打印发回的所有内容。
板子首先发送一个字节,然后等待所有传入的数据,替换几个字节并将其发回。请参阅本文末尾的代码。该板可以是 STM32L100C 或 STM32F407(实际上是发现板);在这一点上,我正在经历与两者相同的行为。
我看到的输出(在美好的一天 - 在糟糕的一天挂起Written 16 bytes
)如下:
如您所见,数据已发送并按预期替换了四个字节,但前面多出了两个字符(^J
,或0x5E
and 0x4A
)。这些结果是signal_host
函数的直接结果。当我用任意的东西(例如)替换字符时x
,这就是在该位置输出的内容。有趣的是,它实际上会在沿途的某个地方\n
转换为插入符号。^J
这似乎发生在与电路板的通信中,因为当我简单地在缓冲区中硬编码一个字符串并将dma_transmit
其发送到非交互式主机程序时,它就可以很好地打印出来。
看起来我以某种方式错误配置了 DMA,因为有些缓冲区没有被正确清除。此外,我并不真正相信主机端程序使用 stty 的方式。但是,过去我实际上使用这个确切的代码进行了完美的通信。我将它与存储在我的 git 历史记录中几个月的代码进行了比较,但我找不到差异/缺陷。
请注意,下面的代码使用libopencm3并基于libopencm3-examples 中的示例。
STM32L1代码:
STM32F4代码:
arm - STM32F4上的Libopencm3中断表
我在 STM32F4 上的项目中使用 libopenCM3。我以前使用过 ST 开发的标准外设库和更新的硬件抽象层。
在这些库中,您有包含向量表定义的程序集文件(启动文件)。
这就是我为 libopenCM3 所缺少的。你能告诉我在哪里可以找到这张桌子吗?还是以其他方式完成?
我真的需要在我的项目中使用中断。
谢谢。
c - 如何在基于eclipse的IDE中安装第三方库
我已经下载了基于 Eclipse 的 STM32 和 IDE SW4STM32 的“libopencm3”库。
我想将“c:\lib\libopencm3”添加到许多项目(如 <stdio.h>)中使用的库中。
我的 IDE 在编译和编辑代码期间无法识别 #include <libopencm3/stm32/f4/nvic.h>
编译期间的错误文本:“致命错误:libopencm3/stm32/f4/nvic.h:没有这样的文件或目录 nvic.h”
我该怎么办,Eclipse(SW4STM32)开始将 <libopencm3/stm32/f4/nvic.h> 识别为 C:/lib/libopencm3/stm32/f4/nvic.h
我在 Windows 上工作。我需要像新手一样的解释(逐步详细说明),因为我现在开始使用 Eclipse 的配置,我必须快速开始使用第三方库为 STM32F4 处理器开发应用程序。
stm32 - LibOpenCM3 vector table is all blocking-handler
The answer to this question here
Libopencm3 interrupt table on STM32F4
explains the whole mechanism nicely but what I get is whole vector table filled with blocking handlers.
I know that because I see it in debugger (apart from the whole thing not working): disassembly screenshot showing vector table.
It is as though linker simply ignores my nicely defined interrupt handler function(s), e.g.:
I am using EmBitz IDE and have followed this tutorial here to get libopencm3 to work (and it does work except for this issue).
I have checked the function names n-fold and have tried several online examples including those from the libopencm3-examples project.
Everything compiles without a glitch and loads into the target board (STM32F103C8) and runs fine - except no ISRs get invoked (I do get interrupt(s) but they get stuck in blocking handlers).
Does anyone have an idea why is this happening?
c++ - C 和 C++ 之间的全局变量
我正在为 ARM STM32F4 开发混合 C/C++ 程序,但在访问 C 部分中定义的全局变量时遇到问题。这是一个重现问题的简单测试代码。
测试.h:
测试.c:
主文件
主.cpp:
但是,当我在调试器中运行它时,我可以看到 strings[0](例如)指向的内存完全归零。
注意:while 循环中的部分不相关,我只是添加它以获得一些反馈并避免编译器剥离未使用的字符串值。
那么我在这里做错了什么?
编辑
我在 Linux 下使用 Eclipse,gnu-arm-none-eabi。
编译器和链接器命令行和输出:
链接器脚本(不是最干净的,我用它做了一些测试)。
libopencm3_stm32f4.ld:
编辑
我正在研究这个问题,但我有点困惑。
启动代码包括以下内容:
所以对我来说似乎没问题。
.map 文件提供以下信息:
现在,当我运行调试器时,我从一开始就看到了 &_data==&_edata==0x2000000c ,而且我还注意到 _data 在 .map 文件中出现了两次。
那么,链接描述文件中是否有错误?
linux - 使用正则表达式模式时的 AWK 不同版本行为
背景:
最近我尝试在 Ubuntu 14.04 上构建libopencm3-examples并遇到构建错误(而对于 Ubuntu 16.04.1 LTS 则可以正常工作)。我开始挖掘以找出原因。正如我所发现的,libopencm3 使用特定的链接器脚本生成器:
看libopencm3-examples/libopencm3/ld/README
此工具的目的是将目标微控制器特定定义传递给链接器脚本模板。因此它在模板脚本下使用预处理器并传递目标特定参数,如下所示:
使用 awk 脚本检索此参数。
为了生成 -D_XXX 密钥,此脚本在设备数据库下运行,./libopencm3/ld/devices.data
如下所示:
问题:
awk 脚本部分,从数据库中提取定义信息如下所示:
数据库中的行,由脚本处理:
让我感到困惑的是,建议的模式 ( /[[:upper:]]*=/
) 应该匹配 [ROM]=256K fe,而不是 ROM=256K(是吗?)。无论如何,正如我已经提到/[[:upper:]]*=/
的适用于 ubuntu 16.04(GNU Awk 4.1.3)(为什么?),而对于 14.04,我需要更改/[[:upper:]]*=/
->/[:upper:]*=/
强制它工作(这是一个错误还是什么?)。我错过了什么吗?