问题标签 [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.

0 投票
20 回答
71498 浏览

unit-testing - 如何对 Arduino 代码进行单元测试?

我希望能够对我的 Arduino 代码进行单元测试。理想情况下,我可以运行任何测试,而无需将代码上传到 Arduino。哪些工具或库可以帮助我解决这个问题?

开发中的Arduino 仿真器可能很有用,但似乎还没有准备好使用。

Atmel 的AVR Studio包含一个可能有用的芯片模拟器,但我不知道如何将它与 Arduino IDE 结合使用。

0 投票
2 回答
47872 浏览

c++ - __cxa_pure_virtual 的目的是什么?

在使用 avr-gcc 进行编译时,我遇到了如下链接器错误:

我发现这个文件说:

__cxa_pure_virtual函数是在调用纯虚函数时调用的错误处理程序。

如果您正在编写具有纯虚函数的 C++ 应用程序,则必须提供自己的__cxa_pure_virtual错误处理函数。例如:

extern "C" void __cxa_pure_virtual() { while (1); }

按照建议定义此函数可修复错误,但我想知道:

  • 这个函数的目的是什么,
  • 为什么我需要自己定义它和
  • 为什么将其编码为无限循环是可以接受的?
0 投票
9 回答
9894 浏览

c++ - 如何使用 avr-gcc 在 C/C++ 中执行预主初始化?

为了确保一些初始化代码在之前运行main(使用 Arduino/avr-gcc),我有如下代码:

理想情况下,我希望能够简单地写:

但这不编译...

有没有更简洁的方法来达到同样的效果?

注意:代码是 Arduino 草图的一部分,因此该main函数是自动生成的,不能修改(例如initialize在任何其他代码之前调用)。

更新:理想情况下,初始化将在setup函数中执行,但在这种情况下,还有其他代码取决于它发生在main.

0 投票
8 回答
30411 浏览

debugging - 如何可视化 AVR 程序的内存 (SRAM) 使用情况?

我在 AVR 微控制器 (ATMega328P) 上运行的 C 程序中遇到了问题。我相信这是由于堆栈/堆冲突,但我希望能够确认这一点。

有什么方法可以可视化堆栈和堆的 SRAM 使用情况?

注意:程序用avr-gcc编译,使用avr-libc。

更新:我遇到的实际问题是 malloc 实现失败(返回NULL)。所有mallocing 都发生在启动时,所有freeing 都发生在应用程序结束时(实际上从来没有,因为应用程序的主要部分处于无限循环中)。所以我确信碎片化不是问题。

0 投票
6 回答
846 浏览

c++ - 如何防止需要复制传递给 avr-gcc C++ 构造函数的字符串?

ArduinoUnit单元测试库中,我提供了一种为 TestSuite 命名的机制。该库的用户可以编写以下内容:

这是预期的用法 - TestSuite 的名称是字符串文字。然而,为了防止难以发现的错误,我觉得有必要满足不同的用途,例如:

因此,我已经像这样实现了 TestSuite:

抛开无法处理构造函数中的内存分配失败的问题,我更愿意简单地将指针分配给这样的成员变量:

有什么方法可以更改接口以强制“正确”使用它,以便我可以取消动态内存分配?

0 投票
7 回答
3535 浏览

c++ - 我可以在不使用 new 的情况下在 C++ 中实现工厂方法模式吗?

我在嵌入式环境(Arduino/AVR ATMega328)中工作,并希望在 C++ 中实现工厂方法模式。但是,我使用的编译器 (avr-gcc) 不支持该new关键字。有没有办法在不使用的情况下实现这种模式new

0 投票
2 回答
2752 浏览

avr-gcc - avr-gcc:抑制警告“'__progmem__' 属性被忽略”

有人知道如何抑制此警告吗?我无法避免它们(它们源于我使用的框架)。

谢谢!

0 投票
2 回答
318 浏览

embedded - 在串行输出上格式化字符!

我正在使用 EFSL 将 SD 卡连接到 ATmega128。卡已初始化,但我在串行端口输出上收到一条错误消息“未知错误 0xff(请参阅sandisk 文档 p5-13)”。

这还不是全部,我使用'sprintf'来形成我在串口上显示的字符串。令人费解的是,我还在输出中得到了像“%02d”这样的实际格式字符!我认为我的应用程序本身正在崩溃。我可以给我的源代码,但是它太大了。如果有人想看,我复制粘贴到这里。

我还检查了sandisk docs p5-13,但我无法弄清楚...

我需要这方面的帮助...请让我知道是否有人知道有关此 Thanxs 的任何信息...

0 投票
1 回答
4217 浏览

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 中找到它并排列可能的标志。任何帮助表示赞赏!

0 投票
2 回答
989 浏览

optimization - 为什么这个代码是由 avr-gcc 生成的,它是如何工作的?

这是我正在处理的 C 项目中反汇编的 AVR 代码片段。我注意到正在生成这个奇怪的代码,但我无法理解它是如何工作的。我假设这是某种荒谬的优化...

解释是什么?

具体来说,为什么第二条指令从 R25 中减去 0xFF 而不是INC R25