问题标签 [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 投票
1 回答
351 浏览

c++ - 是否可以指示 GNU ld 打印链接期间需要哪些 .o 文件?

一点背景知识:我正在尝试为嵌入式传感器系统构建 AVR 二进制文件,并且我正在运行接近我的大小限制。我使用了一些外部库来帮助我,但是当每个库编译成一个对象时它们相当大。我想把它们拉成更小的对象,这样只有我需要的功能才链接到我的程序中。通过拆分一个大型库,我已经设法将二进制大小减少了 2k。

知道在游戏的每个阶段使用了哪些对象会很有帮助,这样我就可以更有效地拆分它们。有没有办法ld打印它正在链接的对象?

0 投票
2 回答
1200 浏览

assembly - 在 avr tiny 中,当微控制器通电时,如何初始化存储在 sram 中的数据?

首先是一些背景。在 avr tiny 中,数据可以存储在寄存器、sram、eeprom 或程序空间中。寄存器和 sram 是易失性存储器,而 eeprom 和程序空间则不是。(即:未通电时数据保持不变。)

在 c 中编程时(使用 avr-gcc 库),典型的代码可能如下所示:

编译:

并从 .elf 中提取一个 intel .hex :

我们得到以下 test.hex :

以及以下反汇编:

那么我们想要放入 sram 的数据(0xef)是如何初始化的呢?
答案是通过 main 之前的例程。

应存储在 sram 中的数据位于程序空间中的地址 0x5a。它以下列方式放入 sram 中:

  1. x 寄存器的高字节和低字节设置为我们要在 sram 中放入数据的地址。(0x60)注意这个地址不在程序存储器中,而是在数据存储器中。
  2. z 寄存器相同,但数据在程序空间中的地址(0x5a)
  3. 存储在 z 寄存器中的地址处的程序存储器内容通过 lpm 操作码加载到寄存器 r0 中。请注意,z 寄存器值递增以指向(最终,这里没有)要加载到 sram 中的下一个数据。
  4. 然后将 r0 中的数据存储在 sram 中存储在 x 寄存器中的地址处。
  5. 重复直到所有应该在 sram 中的数据都被初始化。

这发生在对 main 的 rcall 之前。

有更好/更清晰的答案吗?

0 投票
2 回答
6868 浏览

c - 如何将 pgm_read_byte 宏 (AVR-GCC) 移植到 Mircrochip C18 编译器?

我正在将基于 T6963 的 LCD 驱动程序从 AVR-GCC 移植到微芯片 C18 编译器。我看过宏“ pgm_read_byte ”:有人知道如何移植这个宏吗?

更新

这里我可以看到宏的实现

0 投票
1 回答
8881 浏览

eclipse - Eclipse Arduino 制作:*** 错误 1

以下是我尝试构建项目时遇到的错误。我不确定它在说什么文件或目录。所有文件和目录都在项目目录中。

我按照http://arduino.cc/playground/Code/Eclipse中的说明设置了我的 IDE。

Arduino 核心文件是否应该在项目目录中并专门添加到 Arduino 核心库中?我给它的只是liArduinoCore.a我的 Arduino IDE 生成的文件。这可能是问题吗?

错误信息

0 投票
2 回答
1669 浏览

arduino - 无法链接 Arduino 项目以包含 Simulink 代码

在工作中,我最近接受了 MATLAB/Simulink 培训,包括可以为嵌入式应用程序生成 C 代码的 Simulink Coder。我想尝试一下,所以我买了一个 Arduino,并投入其中。我能够毫无问题地编写简单的草图,但在尝试集成 Simulink 生成的代码时遇到了障碍。

我最初使用的是 Arduino IDE,然后是带有 Arduino 插件的 Eclipse,最后是带有 embedXcode 模板的 Xcode。(我使用 Simulink 的工作机器是 PC,但我不允许安装“未经授权的软件”,所以我在家里的 Mac 上完成了剩下的工作。)所有三个都使用相同的 avr-gcc 编译器。

这三个都有相同的故障点:生成的函数调用上出现“未定义的引用”错误。我认为这是一个链接器问题,而不是基本语法或标头包含,因为 Eclipse 和 Xcode 代码完成工作正常,如果我以任何方式更改调用签名,错误就会改变。我可以对数据结构进行引用。

据我所知,默认的 makefile 设置为编译和链接文件夹中的任何文件。至少使用 Xcode 创建一个“mass_model2.o”文件。最后,如果我使用简单的函数调用手动编写单独的“myFunction.c”和“MyFunction.h”文件,它会按预期在设备上编译和运行。

setup()无奈之下,我复制了生成的“.c”文件的全部内容,并将它们粘贴到我的和函数之后的主草图文件中loop(),保持相同的“.h”引用,并从项目中删除了“.c”文件. 这实际上确实编译并运行了!但是,我不应该为了使用它而触摸生成的代码。

我需要做什么才能正确编译和链接?

Simulink 代码非常冗长,因此这里是关键部分:

mass_model2.h 摘录:

mass_model2.c 摘录:

其他引用的标头“rtwtypes.h”和“mass_model2_private.h”定义了生成代码使用的特定类型,例如int16_T. 这些文件包含在项目中,我没有收到任何与它们相关的错误。

在我的草图文件中,setup()函数调用mass_model2_initialize(). loop()读取我的输入(电位器),在 中设置值mass_model2_U.PotPos,然后调用mass_model2_step(). 然后它获取mass_model2_Y.ServoCmd并将值写入伺服输出,最后有一个delay().

0 投票
6 回答
1903 浏览

c++ - 将所有数组复制到没有向量的新数组 C++

我尝试执行上述操作,我将循环 idx,将一个新序列复制到 led_pa​​ttern 中,然后循环那个,回来,得到下一个。

我在这里找到了一种使用向量传递整个数组的方法; C++:复制数组

但是向量(我相信)不适用于我正在使用的编译器(avr-gcc/c++)

如何在 C++ 中实现这一点?我知道在python中下面会起作用,我可以将一个数组分配给另一个变量,然后它“克隆”它。

谢谢

0 投票
3 回答
808 浏览

avr - ATMega2560 上的 vsnprintf

我正在使用一个工具包在 ATMega2560 上做一些椭圆曲线密码学。尝试使用工具包中的打印功能时,我得到一个空字符串。我知道打印功能可以正常工作,因为 x86 版本可以毫无问题地打印变量。我对 ATMega 没有经验,并且希望在这件事上提供任何帮助。打印代码包含在下面。

打印大数字的代码(它本身称为 util_print)

实际打印大数字变量的代码:

编辑:我确实初始化了 UART,并且可以将 printf 语句输出到控制台。

0 投票
2 回答
8971 浏览

c++ - 在 avr g++ 中禁用函数声明错误

我正在使用这个Makefile来编译我的 Arduino 草图,它具有以下 CPP 和 C 标志

当我编译一个 cpp 文件时,如果在声明函数之前使用了这些函数,我会收到一个致命错误。我浏览了avr g++ 选项,发现选项 -Wimplicit-function-declaration 启用了它。它也由 make 文件中使用的 -Wall 选项启用。

我想启用 -Wall 选项(因为它启用了许多其他警告)但仅禁用 -Wimplicit-function-declaration 选项。

我检查了文档,但无法弄清楚如何做到这一点。有人可以告诉我该怎么做吗?

0 投票
1 回答
1052 浏览

c++ - 在 C++ 中跨多个文件使用多个命名空间中的类

我在使用avr-g++(AVR 微控制器的 C++ 编译器)编译以下代码时遇到问题。

请注意,我在这个文件中定义了几个枚举和类,这些枚举和类在这个类中使用但没有被包含在内,以防止代码太长。

我收到错误

在我的项目中,我有几个代表modules我正在处理的项目的特定文件。这些文件位于名为Modules. 头文件LIBcpp.hpp在上面的目录中。它包括Modules子目录中的所有头文件。

Pin在命名空间内定义,命名空间IO在命名空间内uC。此类定义在名为 的头文件中IO.hpp,该文件包含在LIBcpp.hpp.

我试过的:

IO.hpp在头文件中包含SPI.hpp头文件——导致同样的错误

我不知道如何解决这个错误。如果需要更多代码或信息来解决这个问题,我会提供。

谢谢!

这是IO.hpp,根据要求:

0 投票
4 回答
721 浏览

c++ - NULL 指针参数有多贵?

在用 C(++) (AVR-Gcc) 在嵌入式系统上实现菜单时,我最终得到了带有参数的 void 函数指针,并且通常会使用它们。

在某些情况下(实际上不少),该函数实际上不需要参数,所以我会这样做:

我知道我可以重载到不同的函数类型,但实际上我试图不这样做,因为我正在实例化多个对象并希望它们保持轻便。

使用 NULL 指针调用多个函数(当它们用于实际指针时)是否比实现更多函数原型更糟糕?