224得票20回答
如何对Arduino代码进行单元测试?

我希望能够对我的Arduino代码进行单元测试。理想情况下,我希望能够运行任何测试而不必上传代码到Arduino。有哪些工具或库可以帮助我完成这个任务? 目前正在开发一款Arduino模拟器(Arduemu),这可能会有所帮助,但它似乎还没有准备好供使用。 Atmel的AVR Studio...

90得票4回答
在8位嵌入式系统上编写像Flex/Bison一样可用的解析器

我正在使用avr-gcc工具链,用C语言在AVR微控制器上作为练习编写一个类似BASIC的小型解释器。如果我要在Linux上运行该程序,我可以使用flex/bison。既然我限定了自己使用8位平台,那我应该如何编写解析器呢?

81得票9回答
如何防止GCC优化掉一个忙等待循环?

我想为Atmel AVR微控制器编写C代码固件。我将使用GCC进行编译。此外,我想启用编译器优化(-Os或-O2),因为我认为没有理由不启用它们,而且它们可能会比手动编写汇编代码更快地生成更好的汇编代码。 但是我想要一个不经过优化的小段代码。我想要延迟执行一个函数一段时间,因此我想编写一个空...

66得票2回答
__cxa_pure_virtual的目的是什么?

在使用avr-gcc编译时,我遇到了以下链接器错误:undefined reference to `__cxa_pure_virtual' 我发现了这份文档,其中声明: __cxa_pure_virtual函数是一个错误处理程序,当调用纯虚函数时将被调用。 如果您正在编写一个有纯虚函数的C+...

45得票1回答
crt0.o和crt1.o有什么区别?

最近我一直在尝试调试一些低级的代码,但是我找不到编译器(avr-gcc)的 crt0.S 文件,但我找到了一个crt1.S文件(以及相应的 .o 文件)。 这两个文件有什么区别? crt1 是不是完全不同的东西? 它们似乎都与 '引导' 有关(设置 stack frame 等),但为什么要区分?

26得票6回答
8位枚举,在C中

我必须通过串口存储指令和命令,这些命令长度为8个比特。 我需要保留命令名称和其值之间的透明度,以避免将通过串口接收到的8位数字转换成任何类型。 我想使用枚举来处理它们在我的代码中。只有一个枚举对应于这个平台上的16位整数。 该平台是AVR ATmega169V微控制器,在 Butterf...

25得票4回答
对'operator delete(void*)'的未定义引用

我是C++编程的新手,但已经在C和Java上工作很长时间了。我正在尝试在我正在处理的一些串行协议中进行类似接口的层次结构,并不断收到以下错误:Undefined reference to 'operator delete(void*)' 以下是(简化后的)代码: PacketWriter.h...

25得票8回答
我该如何可视化AVR程序的内存(SRAM)使用情况?

我在一个运行在AVR微控制器(ATMega328P)上的C程序中遇到了问题。我认为这是由于堆栈碰撞引起的,但我想确认一下。 是否有任何方法可以可视化堆栈和堆对SRAM使用情况? 注意:该程序使用avr-gcc编译,并使用avr-libc。 更新:我遇到的实际问题是malloc实现失败(返...

12得票3回答
如何在AVR上实现一个编译时[分派]表?

我在如何在C语言中实现动态调度表问题上和Dave Durbin有相同的先决条件,但我的目标是AVR。以下是我的限制: 模块应该像Linux编译内核模块一样在列表中选择 C(可以是C ++)模块数量在编译时已知 模块应该静态链接(显然) 我希望将表存储在程序存储器中,而不是SRAM中,如此操...

11得票3回答
AVR Studio 5:编译C++代码

在创建 AVR Studio 5 项目时,它会创建一个包含以下内容的 .c 文件:#include <avr/io.h> int main(void) { while(1) { //TODO:: Please write your applicat...