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

c - 将 C 代码放在另一个文件中

我正在编写 AVR 微控制器,并在 WINAVR 套件的程序员记事本中。

我正在尝试分离我的代码,但是 sepeaet .c 文件我无法使用 AVR 预定义变量。(AVR 提供的变量指向某些 BIT)

例如,此代码将在我的 main.c 文件中运行。但不在另一个 random.c 文件中:

它给出了错误:

在我的 main.c 文件中,它只有以下内容:

0 投票
3 回答
8129 浏览

c - AVR C如何停止中断

我正在编写 AVR MCU。

它有一个可以读取模拟引脚的 POT。似乎不断调用中断,并且必须在 LCD_display 方法期间调用它,因为它弄乱了我的 LCD。

有没有办法在块运行之前停止中断?

0 投票
2 回答
1018 浏览

avr - avr-gcc 重新编译的 ledramp 示例出现分段错误

我在 Ubuntu 上安装了 simavr。我安装了以下软件包:avrdude binutils-avr gcc-avr avr-libc gdb-avr libelf-dev libglut3-dev gtkwave build-essential。

我尝试运行 ledramp 示例(simarv 文件夹中的一个示例),工作正常。但是,当我将 board_ledramp 文件夹复制到 board_ledramp2 文件夹时,在 board_ledramp2 文件夹中,我重新编译并执行它,我得到了分段错误错误。

我的命令是:

make 命令后的控制台日志为:

错误消息是:

我尝试使用“file”命令比较原始elf文件和我的elf文件,输出是一样的:

任何人都可以解释出了什么问题?

谢谢!

0 投票
2 回答
384 浏览

assembly - 避免意外的固件覆盖

首先是一些背景。当固件由于某种原因崩溃(例如堆栈溢出、损坏的函数指针......)时,它可能会跳转到某个地方并开始执行一些代码。这迟早会导致看门狗复位。MCU 将重置,我们重回正轨。除非...

当我们有写入闪存的代码(例如引导加载程序)时呢?现在可能会发生我们会不小心直接跳入闪存写入代码 - 跳过所有检查。在看门狗吠叫之前,您最终会得到损坏的固件。这正是发生在我身上的事情。

现在有些人可能会说 - 修复导致我们甚至开始编写代码的根本错误。好吧,当您进行开发时,您会不断更改代码。即使目前那里没有这样的错误,明天也可能会有。此外,没有代码是没有错误的——或者至少不是我的。

所以现在我正在做某种交叉检查。我有一个名为“wen”的变量,在进行常规检查之前我将其设置为 0xa5(例如,检查以确保目的地有效)。然后在进行实际擦除或写入之前,我检查“wen”是否真的设置为 0xa5。否则这意味着我们不知何故意外地跳入了编写代码。成功写入后,'wen' 被清除。我已经在 C 中做到了这一点,并且效果很好。但是理论上仍然有轻微的损坏发生的可能性,因为从最终检查“wen”到写入 SPMCR 寄存器的指令很少。

现在我想通过在写入 SPMCR 和 spm 指令之间将此检查放入汇编中来改进这一点。

代码还没试过,明天试试。你看有什么问题吗?你如何/将如何解决这样的问题?

0 投票
1 回答
813 浏览

gcc - 我可以告诉 gcc/ld 排除未使用的模块吗?

我想知道我是否可以告诉 gcc/ld 省略未使用的模块,不要将其放入输出文件中。

假设我有模块a.cb.cc.ca.c并且b.c相互依赖,其中一个包含 a main(),并且由于任何原因,c.c都没有引用 of 的任何部分。

如果我将这些东西捆绑到一个库c.c中,则输出中不会有任何代码:

但是,如果我将.o文件直接提供给 gcc,则来自c.c相应的代码。c.o已经包括了。

无论如何,我可以告诉 gcc 忽略未使用的模块而不将它们放入库中吗?

我正在编写 AVR µC 并使用 AVR Studio,它不允许创建库,但想省略未使用的源文件,具体取决于构建配置。

0 投票
2 回答
5343 浏览

c++ - C++;日食链接器错误

所以努力让我的 Eclipse IDE 运行,这样我就可以在 Eclipse 中开发我的 arduino uno。我的 C++ 很弱,所以这可能是我的一个 nube 错误。

我有一个 Blink 程序,用于查找我从 arduino IDE 的库中编译的 arduino 库。我的代码指向头文件,我的代码发现它很好;意思是我可以点击:

并查看标题

这个:“C:/programs/arduino-1.0/hardware/arduino/cores/328p_lib/libuno_library.a”是一个有效的路径......但我收到以下错误:

0 投票
1 回答
331 浏览

c - 关于 int 上未定义增量的警告

我对 avr-gcc 有一个奇怪的问题。如果我这样做:

它会导致编译器警告:

这里有什么问题?

如果重写为

它不会导致警告。

avr-gcc 是 4.3.4 版本,我在 Ubuntu 10.04 上运行它。

0 投票
1 回答
1932 浏览

avr - 如何使用 avr-gcc 将变量绑定到未使用的 AVR I/O 寄存器?

我想使用 avr-gcc 将全局变量绑定到未使用的 I/O 寄存器(例如 PORTB),以减少代码大小。我在 AVR 的应用笔记AVR035(第 14 页)中学到了这个技巧。

在应用笔记中,他们使用 IAR 编译器并将变量绑定到 I/O 寄存器,如下所示:

使用 avr-gcc,我可以使用以下行将变量绑定到标准寄存器(在本例中为 r3):

但是,这不适用于 I/O 寄存器。有没有办法对 I/O 寄存器执行此操作?

0 投票
2 回答
933 浏览

c - 如何手动有效地计算C中的模数?

我编写了一个使用查找表的正弦函数的基本定点变体(针对不带 FPU 的 AVR 微控制器)。我的实现也接受负值和超过 2π 的值,就像它在math.h中的浮点挂件一样。

所以我需要将给定值映射到 0 到 2π 之间的范围(即它们的固定点对应物)。对于积极的论点,很容易用 C 的内置余数运算符%来修剪它们。由于这不是负值的选项,因此我使用以下(明显)方法:

ab是整数类型的值,而 INT_FLOOR() 只是暗示 (a/b) 的小数部分被截断。该公式确保计算出的模数(用作表格数组的索引)始终为正,并且负参数也映射到它们的正对应物(保持两个方向的相移)。

我对这种方法的问题是它似乎过于复杂,因为它涉及不少于五个算术运算。我缺少更有效的方法吗?

0 投票
2 回答
2715 浏览

c++ - 温度将两个 int 数字转换为浮点数

如何将表示浮点数的数字和小数部分的两个无符号整数转换为一个浮点数。

我知道有几种方法可以做到这一点,例如将小数部分转换为浮点数并将其相乘以获得小数并将其添加到数字中,但这似乎不是最佳选择。

我正在寻找执行此操作的最佳方法。

我想获取 Digit 和 Decimal 部分并将它们转换为浮点类型,使其看起来像 digit.decimal 。

它最终可能看起来像这样,但我想找到最优化的解决方案。

////更新/// - 7 月 5 日

我能够获得源代码,而不仅仅是利用库。我在这个GIST DS12B20.c中发布了它。

尽管该函数不会强制我们将单独的部分作为数字和小数返回,但从温度传感器读取似乎需要这样做(除非我遗漏了某些东西并且可以将其作为浮点数检索)。

我认为最初的问题仍然是使用这两个部分将其变为 C 中的浮点数的最佳方法(这是用于 AVR 和 8 位微处理器,使优化关键)或能够直接检索它作为一个浮子。