问题标签 [avr]
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.
hardware - AVR 和 Arduino 之间有什么区别/关系?
最近对硬件编程很感兴趣,但是还没有开始。
我做了一些搜索工作,并有一个模糊的想法:
Arduino 是芯片和面包板的组合。
AVR 是单芯片,需要购买面包板才能上手。
这种说法是真的还是假的?
avr - 我的 AVR 闪存是否因太大的程序而溢出?
我有一个项目,其中一个 ATtiny2313V 正在控制一个 7x5 LED 矩阵来显示滚动文本。为了显示文本,我构建了一个字体,它与程序的其余部分一起存储在闪存中。
整个程序,包括整个字体,占用了 1106 个字节。但是当我将它加载到芯片中时,它似乎没有运行;相反,它只是点亮了几个 LED,仅此而已。
但是,当我删除大部分字体并仅使用字母 A 到 J 进行编译时,程序大小为 878 字节,并且运行良好。
这是因为 AVR 闪存的某种溢出吗?
ATtiny2313V 的数据表说它有 2KByte 的闪存!1106字节怎么会太多呢?
更新:为了清楚起见,我使用的工具链是 AVR Studio(用于编译代码),然后 AVRDude 将其上传到微控制器。据我所知,AVR Studio 使用一个版本的 avr-gcc 来编译代码。
c - 8位枚举,C语言
我必须存储指令,我将通过串行接收的命令。命令的长度为 8 位。
我需要保持命令名称及其值之间的透明度。以避免必须将串行接收的 8 位数字转换为任何类型。
我想在我的代码中使用枚举来处理它们。在这个平台上,只有一个枚举对应一个 16 位整数。
该平台是 AVR ATmega169V 微控制器,在Butterfly 演示板上。它是一个 8 位系统,对 16 位操作的支持有限。它不是一个快速的系统,并且有大约 1KB 的 RAM。它没有文件 I/O 或操作系统之类的奢侈品。
那么关于我应该使用什么类型来存储 8 位命令有什么建议吗?
必须有比#defines 的大量标题更好的东西。
list - 在嵌入式系统上使用动态数据结构有多糟糕?
因此,在我明年将在大学学习的嵌入式系统单元中,我们将了解到动态数据结构在嵌入式系统程序中是一件坏事。但是讲义没有说明原因。
现在我正在研究一个中等规模的嵌入式系统\“LURC”控制器,主要是利用 AVR169MEGA 的“蝴蝶”演示板的外围设备。产生4个PWM信号来控制伺服和ESC。并提供 9 段 LCD 屏幕。
现在我想不出比队列更好的方式来存储指令,因为它们是通过 USART 串行接收的。尤其是对于我需要等到收到未知数量的数据的事情:例如要在 LCD 屏幕上显示的字符串。
那么为什么不在嵌入式系统的微控制器上使用动态数据结构呢?仅仅是您处于内存严重受限的环境中,并且必须确保您的 malloc 成功吗?
programming-languages - 移植到 AVR 架构?
自从我听说谷歌的新语言 Go 后,我就想用它来进行微控制器编程。特别是 Atmel AVR 微控制器,如 Atmega 系列。这种架构有 Go 端口吗?
assembly - 如何使用 AVR 的 gnu 汇编程序相对于 PC 跳转?
我有一个使用 avr-objcopy 反汇编的二进制文件。中断向量表如下所示:
我想通过一些修改重新组装这个文件。我通过删除前 2 列对其进行了重新格式化,使其成为常规程序集文件。IE:
但是,当我跑步时
然后反汇编生成的文件。(使用 objcopy -S a.out)输出如下:
那么我怎样才能让 avr-as 尊重 PC 相关的跳跃呢?
usb - 使用 USB 设备打开 PC
我希望能够使用通过 USB 连接到 PC 的 IR 远程传感器打开和关闭我的 PC。该传感器是使用 AVR 微处理器和 V-USB 软件 USB 实现实现的定制 PCB。
现在,用软件关掉电脑是没有问题的,但是有没有办法用USB打开电脑呢?
(请注意,我不是在谈论从 USB 记忆棒或 USB 电源启动...)
linux - 我想继续进行 µC 编程,但我完全不知道从哪里开始
我一直在考虑“继续”进行 MCU 编程,但问题是我从未使用过任何微控制器或类似产品。有人告诉我,AVR 和 PIC 是业余爱好者中最常见的微控制器,显然大多数人建议像我这样的新手使用 AVR,因为它的“C 友好架构”(不管这意味着什么)、它的 C 编译器和它的大型爱好者社区。AVR 或 PIC 或其他任何东西,对我来说并不重要,我只想能够在 Linux 上用一个好的编译器编写 C 代码,并最终能够在我的 MCU 上添加一个 LCD 屏幕(只是为了输出基本的 ASCII 字符,也许在这里和那里画几个像素,单色,没什么大不了的)。我不需要任何复杂或极快甚至大量的内存,因为我喜欢有限(但不是太有限)的东西,你需要一点创造力来实现目标。我在互联网上四处查看,但我发现的大多数页面都有几十年的历史和/或没有建议我可以购买任何好的“包装”(这将支持上面提到的东西)。这就是我问你的原因,希望你能帮助我一点。:)
谢谢,霍法。
iphone - 无线通信:基于 AVR 的嵌入式系统和 iPhone
在嵌入式系统(基于 AVR 控制器)和 iPhone 之间实现无线通信的最佳方式是什么?我认为只有两种选择:WiFi 或蓝牙。范围并不是真正的问题,因为两个设备都应该放在同一个房间里。
我不知道,如果有任何有用的 WiFi 板可以连接到基于 AVR 的微控制器系统(或任何小型微控制器),任何提示都将受到高度欢迎。
我想更好的解决方案是蓝牙,但也有一个问题:哪个蓝牙板最适合连接到 AVR 系统,是否可以使用 iPhone 蓝牙堆栈通过蓝牙与 AVR 设备进行(串行)通信.
我希望有人已经实现了这样的系统并可以提供一些有用的提示......
c - 函数指针位置未通过
我有一些针对 AVR 的 C 代码。代码是用 avr-gcc 编译的,基本上是带有正确后端的 gnu 编译器。
我想要做的是在我的一个事件/中断驱动库中创建一个回调机制,但我似乎在保持函数指针的值时遇到了一些麻烦。
首先,我有一个静态库。它有一个头文件 ( twi_master_driver.h
),如下所示:
现在是 C 文件 ( twi_driver.c
):
然后我将这两个文件构建到一个静态库 (.a) 中并构建我的主程序 ( main.c
) #include #include #include #include #include "twi_master_driver.h"
我小心地触发导致中断触发的事件并调用适当的处理程序。使用一些 fprintfs,我可以看出函数中分配的位置twi->slave.slave_callback
与twi_init
函数中的位置不同twi_slave_interrupt_handler
。
虽然数字没有意义,twi_init
但值是 0x13b,twi_slave_interrupt_handler
打印时值是 0x100。
通过在中添加注释的解决方法行twi_driver.c
:
问题消失了,但这显然是一个神奇且不受欢迎的解决方案。我究竟做错了什么?
据我所知,我已经标记了适当的 variables volatile
,并且我尝试将其他部分标记为 volatile 并删除 volatile 标记。fprintf
当我注意到在赋值后删除语句twi_init
导致稍后以不同方式读取值时,我想出了解决方法。
问题似乎在于我如何传递函数指针——尤其是访问指针值的程序部分(函数本身?)在技术上位于不同的线程中。
有任何想法吗?
编辑:
解决了代码中的拼写错误。
链接到实际文件:http : //straymark.com/code/ [test.c|twi_driver.c|twi_driver.h]
fwiw:编译器选项:
-Wall -Os -fpack-struct -fshort-enums -funsigned-char -funsigned-bitfields -mmcu=atxmega128a1 -DF_CPU=2000000UL
我已经尝试过直接包含的相同代码(而不是通过库),但我遇到了同样的问题。
编辑(第 2 轮):
- 我删除了所有优化,没有我的“解决方法”,代码按预期工作。添加回 -Os 会导致错误。为什么 -Os 会破坏我的代码?