问题标签 [avr-gcc]
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.
unit-testing - 如何对 Arduino 代码进行单元测试?
我希望能够对我的 Arduino 代码进行单元测试。理想情况下,我可以运行任何测试,而无需将代码上传到 Arduino。哪些工具或库可以帮助我解决这个问题?
开发中的Arduino 仿真器可能很有用,但似乎还没有准备好使用。
Atmel 的AVR Studio包含一个可能有用的芯片模拟器,但我不知道如何将它与 Arduino IDE 结合使用。
c++ - __cxa_pure_virtual 的目的是什么?
在使用 avr-gcc 进行编译时,我遇到了如下链接器错误:
我发现这个文件说:
该
__cxa_pure_virtual
函数是在调用纯虚函数时调用的错误处理程序。如果您正在编写具有纯虚函数的 C++ 应用程序,则必须提供自己的
__cxa_pure_virtual
错误处理函数。例如:
extern "C" void __cxa_pure_virtual() { while (1); }
按照建议定义此函数可修复错误,但我想知道:
- 这个函数的目的是什么,
- 为什么我需要自己定义它和
- 为什么将其编码为无限循环是可以接受的?
c++ - 如何使用 avr-gcc 在 C/C++ 中执行预主初始化?
为了确保一些初始化代码在之前运行main
(使用 Arduino/avr-gcc),我有如下代码:
理想情况下,我希望能够简单地写:
但这不编译...
有没有更简洁的方法来达到同样的效果?
注意:代码是 Arduino 草图的一部分,因此该main
函数是自动生成的,不能修改(例如initialize
在任何其他代码之前调用)。
更新:理想情况下,初始化将在setup
函数中执行,但在这种情况下,还有其他代码取决于它发生在main
.
debugging - 如何可视化 AVR 程序的内存 (SRAM) 使用情况?
我在 AVR 微控制器 (ATMega328P) 上运行的 C 程序中遇到了问题。我相信这是由于堆栈/堆冲突,但我希望能够确认这一点。
有什么方法可以可视化堆栈和堆的 SRAM 使用情况?
注意:程序用avr-gcc编译,使用avr-libc。
更新:我遇到的实际问题是 malloc 实现失败(返回NULL
)。所有malloc
ing 都发生在启动时,所有free
ing 都发生在应用程序结束时(实际上从来没有,因为应用程序的主要部分处于无限循环中)。所以我确信碎片化不是问题。
c++ - 如何防止需要复制传递给 avr-gcc C++ 构造函数的字符串?
在ArduinoUnit单元测试库中,我提供了一种为 TestSuite 命名的机制。该库的用户可以编写以下内容:
这是预期的用法 - TestSuite 的名称是字符串文字。然而,为了防止难以发现的错误,我觉得有必要满足不同的用途,例如:
因此,我已经像这样实现了 TestSuite:
抛开无法处理构造函数中的内存分配失败的问题,我更愿意简单地将指针分配给这样的成员变量:
有什么方法可以更改接口以强制“正确”使用它,以便我可以取消动态内存分配?
c++ - 我可以在不使用 new 的情况下在 C++ 中实现工厂方法模式吗?
我在嵌入式环境(Arduino/AVR ATMega328)中工作,并希望在 C++ 中实现工厂方法模式。但是,我使用的编译器 (avr-gcc) 不支持该new
关键字。有没有办法在不使用的情况下实现这种模式new
?
avr-gcc - avr-gcc:抑制警告“'__progmem__' 属性被忽略”
有人知道如何抑制此警告吗?我无法避免它们(它们源于我使用的框架)。
谢谢!
embedded - 在串行输出上格式化字符!
我正在使用 EFSL 将 SD 卡连接到 ATmega128。卡已初始化,但我在串行端口输出上收到一条错误消息“未知错误 0xff(请参阅sandisk 文档 p5-13)”。
这还不是全部,我使用'sprintf'来形成我在串口上显示的字符串。令人费解的是,我还在输出中得到了像“%02d”这样的实际格式字符!我认为我的应用程序本身正在崩溃。我可以给我的源代码,但是它太大了。如果有人想看,我复制粘贴到这里。
我还检查了sandisk docs p5-13,但我无法弄清楚...
我需要这方面的帮助...请让我知道是否有人知道有关此 Thanxs 的任何信息...
gcc - 如何让 GNU AS 发出每行调试信息或 GDB 到(AVR)程序集中的单步行?
我无法弄清楚如何让 GAS 在汇编中为 gdb 发出行号调试信息。请注意,我使用的是 avr-gcc 交叉编译器,但怀疑是否相关。
我正在使用以下命令行选项进行组装:avr-gcc -g -ggdb -Os -mmcu=atmega644 -ffunction-sections -fsigned-char -Winvalid-pch -Wall -Wno-long-long -x assembler-with -cpp -Wa,-ggdb -c -o z813.o z813.s
当我使用一组几乎相同的参数来编译 C 代码时,我可以使用“objdump -l -d”查看行号和源文件扩充。
然而,装配对象没有。IE
在 avr-gdb 中(通过 simulavr 远程 gdb 连接)时,我无法让调试器单步执行我的汇编代码,尽管它确实识别符号名称和信息。我认为这是相关的。
我努力尝试在 info/man/google 中找到它并排列可能的标志。任何帮助表示赞赏!
optimization - 为什么这个代码是由 avr-gcc 生成的,它是如何工作的?
这是我正在处理的 C 项目中反汇编的 AVR 代码片段。我注意到正在生成这个奇怪的代码,但我无法理解它是如何工作的。我假设这是某种荒谬的优化...
解释是什么?
具体来说,为什么第二条指令从 R25 中减去 0xFF 而不是INC R25
?