问题标签 [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 - 如何在 Docker 容器中为 gcc 设置规范文件
我正在尝试构建 TREZOR 固件,它使用 docker。Dockerfile 内容:
当 gcc 在 Docker 中编译 libopencm3 时,出现错误:
错误:“for”循环初始声明只允许在 C99 模式下注意:使用选项 -std=c99 或 -std=gnu99 编译代码
我的第一个想法是为 gcc 创建规范文件并在此处添加 -std=c99 。但由于一切都在 Docker 容器中运行,我不知道如何解决这个问题。可能是我错了。有什么建议么?谢谢
c - STM32 FreeRTOS 与 LibOpenCM3
我有一个 STM32 BluePill Board(STM32F103C8 with 8Mhz Quarz)并尝试上传一个用 LibOpenCM3 和 FreeRTOS 制作的小闪烁程序。但是由于某种原因,FreeRTOS 挂在 vTaskStartScheduler() 中,sys_tick_handler 也没有做任何事情。
我没有使用调试器,只是在 sys_tick_handler 函数中放置了一个 gpio_reset ,并在调用 vTaskStartScheduler 以测试代码是否被执行但它似乎没有做任何事情,我不知道为什么。代码可在此处获得:https ://gitlab.com/feldim2425/stm32-testing
更新:我使用 OpenOCD 进行调试,发现它跳转到 hard_fault_handler 更新 2:UsageFault-Status-Register 设置了 NOCP 位
stm32 - 无法将 PC15 用作 stm32f030rc 上的 GPIO 输入
我正在使用 stm32f030rc 进行项目。我需要将 PC15 用作 GPIO 输入,但似乎我做不到。
我知道这对 PC14/PC15 与 LFE 振荡器共享,但我当然没有使用该功能。此外,我能够读取 PC14 GPIO 上的正确引脚电平。在关于我的模型的数据表中,PC15 引脚被标记为 I/O,OSC32_OUT 作为附加功能:它可以用作输入吗?
作为参考,这是我用来测试功能的 C 代码;我正在使用 libopencm3 进行初始化。
gcc - 升级 `arm-none-eabi-gcc` 后部分 `text` 将不适合
我有一个开源的微型鼠标机器人项目。为了更容易编译,我使用容器(Podman 和 Docker 都应该没问题):
这工作得很好,并生成一个main.elf
大小约为 874 kB 的文件。但这只要我修复Dockerfile 中的 to 即可arm-none-eabi-gcc-cs
。7.4.0
如果我删除特定版本或将其设置为9.2.0
,则会收到以下错误:
这些版本之间可能会发生什么变化?
如果我将此行添加到我的 Makefile:
然后它用版本编译得很好,9.2.0
并生成一个main.elf
大小约为 885 kB 的文件。但我想知道性能是否与以前相同(或等效)。
更新
当然,我期待一些性能差异,就像我期待二进制大小的一些差异一样。但我想知道我是否可以期望性能差异超过 20%(特别是如果它现在可以慢 20%)。
新的二进制文件比以前大了不到 2%,我认为这与以前“相同”。:-D
stm32 - STM32L0xx:获取时钟速度
对于我的一生,我找不到在 libopencm3 中获得 STM32L0 芯片时钟速度的方法。总有办法吧?
- 在 STM32Cube 中,有
SystemCoreClock
变量。 - 在 ChibiOs 中,存在
STM32_SYSCLK
变量。
在 libopencm3 中是否没有变量或函数可以获取此值?
stm32 - 第一个 STM32F3 项目使用什么库或项目生成器?
我即将开始我的第一个 STM32 项目。(我以前使用过 atmega MCU,并且在 C 语言方面拥有数十年的经验,主要是服务器端。)
考虑到我想在 Linux 的命令行上使用 make 进行开发,似乎有三个选择。
- STM32CubeMX 生成的 makefile 项目,
- STM32CubeMX 生成的 makefile 项目,包括 FreeRTOS,或
- 使用 libopencm3 的 makefile 项目。
该应用程序将使用不同的协议在 4 个或更多串行端口上处理和发送消息。偶尔会设置或清除 GPIO。
我的问题是:
- 为什么 libopencm3 存在?为什么有人会选择它而不是 STM32CubeMX 生成的 makefile 项目。
- 对于这样的项目,学习 FreeRTOS 是否值得?
visual-studio-code - vscode intellisense cmake-tools 与外部库
我正在尝试使用 CMake 和 cmake-tools for Visual Studio Code 为我的 STM32 蓝色药丸板配置模板项目。它构建得很好,但 cmake-tools 的 Intellisense 功能似乎不适用于外部库(在本例中为 libopencm3)。
这很可能是我这边的配置错误。按照我的 CMakeLists.txt。工具链在单独的 .cmake 文件中定义。
我对 CMake 和 cmake-tools 不是很有经验。
c - 结构冻结的memset初始化
我在嵌入式(STM32F103)项目中使用的一些库初始化它的结构,memset()
由于某种原因导致程序停止响应/挂起。
为了测试这一点,我使用了:
果然这会导致相同的行为。memset()
在数组上使用似乎工作正常。
我已经没有关于问题可能是什么的想法,甚至认为它可能是内存对齐问题并尝试__attribute__((aligned(4),packed))
在结构上使用,但这也没有帮助。
我正在使用 GCC for ARM 来编译代码:
关于我在这里缺少什么的任何想法?
编辑:
下面是完整的测试代码。我的测试很简单,我正在闪烁 LED。当memset()
存在时,代码永远不会到达主循环以开始闪烁 LED。当我发表评论时memset()
,LED 会闪烁。
stm32 - STM32F103 | libopencm3 | GPIO 使用中断问题切换
所以,我试图根据按钮的中断来切换 LED。
理想情况下,当按下按钮时,LED 应该切换,即如果它关闭则打开,反之亦然。但是当我执行此代码时,它会切换并返回其原始状态。
预期结果: LED 关闭 » 按钮按下 » LED 开启
实际结果: LED 关闭 » 按钮按下 » LED 开启 » LED 关闭
我已经添加了去抖动的延迟,因此弹跳不在图片中。按下按钮时,GPIO 的 ODR 也会在 ISR 中设置,那么在退出 ISR 时如何清除它?
我将衷心感谢您的帮助!谢谢你。
c - 使用 arm-none-eabi-gcc 编译时不考虑优化标志
我想arm-none-eabi-gcc 9.2.1
使用libopencm3项目编译一个程序并在 ARM Cortex-M4 处理器上运行它。我的程序由两个文件组成:main.c
和test.c
。
为了编译我的程序,我使用以下 makefile:
我可以使用这个 makefile 编译和运行我的代码。通过运行,make
我得到以下输出:
似乎优化标志似乎没有被考虑在内,因为无论我放什么,生成的二进制文件总是相同的,程序总是 print cycles: 196645, 00000063
。通过反汇编二进制文件,我得到了 -Os 和 -O3 优化的以下输出:
对我来说这似乎很奇怪,因为代码在速度方面可以明显增强。例如,uxtb
可以计算一个而不是两个(如果在 之后执行eor
),所以我相信这里有问题。为什么这里没有考虑优化标志?我的makefile有问题吗?