问题标签 [stm32]
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++ - 删除未使用的模板实例化的静态成员
我目前在STM32平台上参与嵌入式C++开发。我们的团队正在评估使用模板来参数化各种低级硬件设备的驱动程序。
所有有效的模板特化都是预先知道的,因此我们可以在实现文件中显式地给出所有有效的特化(实现和声明分开)。事实上,显式特化对我们来说非常有用,因为它有助于记录可行的参数集。
尽管通常只会实际使用其中一种特化,但为未使用的特化生成的代码会被链接器从最终映像中删除,这正是我们想要的。
但是,每个模板特化的静态成员变量(在上面的示例中)仍保留在可执行文件中,从工具periodic_transfer
生成的内存映射中可以看出。arm-none-eabi-nm
这可能是因为它i2c_transfer
不是 POD,而是具有用户定义的构造函数。当构造函数被移除,将事物变成 POD 类型时,静态成员也消失了。
有没有办法删除显式实例化但未使用的模板的静态非 POD 成员?
问候, 阿恩
编辑#1:重新考虑问题后,我想出了以下解决方案,这显然解决了问题。
当类i2c_transfer
实际上具有它的构造函数只是为了清晰和易于使用时,将其数据成员移动到i2c_transfer_pod
像这样的 POD 基类中:
然后,未使用的专业化的静态成员i2c_dev<traits>
也会从最终的可执行文件中删除(如映射文件所示)。
编辑#2:虽然回答自己感觉有点蹩脚..我会请求对提议的解决方案发表评论。有没有可能更优雅的方式?编译器真的(如我所料)优化了额外的推导吗?
编辑#3:我关闭了这个问题,因为该解决方案对我有用。很高兴能更深入地了解观察到的行为的原因。
有问题的编译器是arm-none-eabi-gcc (Sourcery G++ Lite 2011.03-42) 4.5.2
compilation - 关于链接描述文件创建和验证的建议
长话短说。我希望学习如何创建一个好的链接器脚本,这样如果我改变平台/架构/供应商,我就不会再因为不知道该怎么做而陷入零基础。我不关心任务的难度,只关心理解它。
我已经开始了一个项目,可以说是创建一个基础或框架,用于在 STM 的 32 位 Cortex-M3 芯片上进行编程和开发。在jsei97的帮助下,从 STM32F103RB 开始(我也有一个 TI Stellaris LM3S828,但这是另一个问题),无需许可 IDE。由于我是学生,大多数学生买不起这样的东西。
我知道有 ODev 和 Eclipse 插件等等,并且已经阅读了各种博客、wiki、文档/手册页,并且大多数项目都为您提供了一个链接器脚本,几乎不知道为什么以及在何处定义了事物。
我已经为 STM32 编译了一个 arm-none-eabi 工具链,但我被挂断的地方是链接器脚本。CodeSourcery 也需要一个。在阅读 gnu 手册页后,我对如何创建它们及其语法有了一个基本概念,但除了明显的 .text、.bss 和 .data 之外,我根本不知道从哪里开始添加各种额外的部分.
我创建了一个基本版本,但出现链接错误,要求提供部分定义,这就是我卡住的地方。我知道如何定义它们,但知道我所做的是否接近正确是问题所在。
c - 在STM32上写Flash
我在 STM32 微处理器的闪存中实现了一个仿真 EEPROM,主要基于 ST 的应用笔记(AN2594 - STM32F10x 微控制器中的 EEPROM 仿真)。
那里和相应的数据表和编程手册 (PM0075) 中的基本概述非常清楚。但是,我不确定断电/系统复位对闪存编程和页面擦除操作的影响。AppNote 也考虑了这种情况,但没有说明当编程(写入)操作被中断时究竟会发生什么:
- 地址是否具有任意(随机)值?或者
- 是否只写入了部分位?或者
- 它有默认的擦除值
0xFF
吗?
感谢您提供相关文档的提示或指针。
阿恩
embedded - 尝试调试 STM32F205ZG 时出现“无法停止 Cortex-M 设备”错误
我在使用 µVision4 和 ULINK2 的 STM32F205ZG 上运行调试器时遇到问题。我不断收到错误消息“无法停止 Cortex-M 设备!请检查 JTAG 电缆。” 我正在使用 SW 端口。对此的任何帮助将不胜感激。
gcc - 对 __libc_init_array 的未定义引用
我正在尝试使用 CodeBench G++ Lite 工具为 STM32 芯片编译一些代码。但是,它会产生错误。
我用谷歌搜索,似乎 libc_init_array 可能是一些标准 gcc 库的一部分......但我不知道如何解决这个错误?
我也有这样的错误
同样对于 libgcc.a 和 libm.a
assembly - Cortex-M3 初始化
我写了(IMO)几乎最简单的 ARM 应用程序,但它没有用 :) 可能有什么问题?错过了什么?
在闪存写入和 CPU 复位后,寄存器中有垃圾。
请善待,如果你知道,请告诉我在 STM32F1 上运行最简单的应用程序需要做什么。
可能有人可以列举在应用程序开始之前必须做的事情,即。
- 初始化堆栈(有必要吗?)
- 设置一些东西。
- 设置别的东西。
应用程序:
也许有人知道任何关于链接器脚本、cpu 初始化等的教程或书籍?
处理器为:STM32F103VBT6
编程者:OpenOCD。
提前致谢。
c - .s 文件在 C 项目中的作用是什么?
我正在使用 ARM Cortex M3 芯片(STM32F2),ST 提供了一个“标准外设库”。它有一些有用的 .c 和 .h 文件。它也有 .s 文件。
这些 .s 文件在 C 项目上下文中的用途是什么?如何获取我的编译器/链接器/?考虑到他们?
c - SIGTRAP 尽管没有设置断点;隐藏硬件断点?
我正在为 STM32 嵌入式系统调试这个软件。在其中一个函数中,我的程序不断遇到某种断点:
SIGTRAP,跟踪/断点陷阱
但是,在 GDB 中,当我这样做时,info breakpoints
我得到No breakpoints or watchpoints
. 断点实际上对应于我很久以前在另一个版本的可执行文件中设置的断点。当我设置断点时,GDB 告诉我automatically using a hardware breakpoint on read-only memory
(或类似的消息)。
我认为硬件断点仍然在我的芯片上,尽管已经加载了新版本的软件。如果确实存在虚假断点,我该如何定位和删除它?
embedded - stm32f4 上的 I2C 从机接收器
我尝试在 stm32f4 上实现 i2c 从接收器中断服务程序。这是我的智能代码。
}
中断被调用并进入 I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED 情况。SCL 现在很低。参考手册说,如果我清除地址标志,时钟将继续并发送数据(第 579 页 - 从属接收器)。在我看来,如果有任何数据到达并且下一个状态将是 I2C_EVENT_SLAVE_BYTE_RECEIVED,则总是会调用中断。
我无法从 stm 或通过 google 找到任何示例。任何人都可以帮助我或给我一个例子。