问题标签 [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.
c - 引脚变化中断 - 带内部中断的外部中断
在程序中,我正在使用定时器中断循环通过 LED,如果有人按下开关,它应该停止第一个中断并触发第二个中断,该中断应该根据按下的开关点亮 LED。在这里,我有点困惑正在调用哪个中断。我参考了一些关于 Pin Change Interrupt 的书,并写了几行来设置 PCMSK2。得到的输出是“最初所有的 LED 都在循环,当按下开关时...... LED 的循环停止并重新开始(这意味着程序正在读取输入,只是没有触发第二个中断)。它不会停止或暂停 & 不点亮后续的 LED。” 有人可以帮忙吗?
感谢您的支持。
usb - USB 编程
我想编写一个微控制器(AVR)来通过 USB 控制一些 LED。它只是出于对如何构建和编程 USB 设备的兴趣。有一些 AVR 微控制器支持 USB 协议,或者我可以自己在另一个微控制器中实现 USB 协议,但我想知道用什么在计算机上编写自己的驱动程序。
我在系统编程方面的水平:总菜鸟(因此问题)
那么,为了更好地了解 USB 技术以及如何编写自己的驱动程序及其他内容,您会建议哪些文献?
PS:我知道:
C(可能在这里需要它)
Java(这里可能不需要它)
Python(希望可以在这里使用)
汇编程序(希望这里不需要它 XD)。
...
PPS:不同操作系统的驱动程序开发不同。我使用 Linux 和 Windows,因此欢迎与这些系统中的一个或两个相关的任何材料。
android - Android 上的蓝牙控制信号(DTR、DSR、RTS、CTS)
我想通过蓝牙 SPP 通过 Android 远程重新编程我的 Arduino。第一步是重置 ATMEGA 微控制器。这是通过切换 DTR 线在 Arduino 上完成的。是否有任何 API 可以从 Android 环境控制蓝牙 SPP 控制线?
c - 使用 ATmega32 在 LCD 上显示阵列中的 ASCII 字符
我有一个 LCD,连接到 Atmega32,使用此功能处理单个字符:
我可以用一个字符作为参数来调用它:send_char('a');
它有效。
然后我尝试在它周围包装一个 send_string 函数:
这只会在我的 LCD 上显示乱码,表明 ASCII 值已经很远了。当我尝试传递一个空字符串 ( send_string("")
) 时,LCD 上至少会显示三个乱码。
c++ - 如何解决错误消息 USB_DEVICE_FEATURE 已禁用的问题?
我目前正在开发 ATMEL 的 AVR32 EVK1104 板,我正在尝试将 c++ 代码写入板上,但它不允许我这样做。该板正在运行,但我尝试向其添加代码并且它擦除了那里的内容。所以现在重新开始,我只是想在板上运行一个示例代码,但我似乎总是得到代码 USB_DEVICE_FEATURE 被禁用。我去了 Windows 注册表并将数据值更改为 3 以确保所有端口都已启用,但我仍然收到相同的错误消息。有人对此有任何想法吗?
c++ - 启动失败,因为找不到二进制文件
我正在使用 AVR32 studio 2.6 尝试编译一个 c++ 项目,但是每次我尝试运行它时,它都会说启动失败,因为找不到二进制文件。这个错误代码有解决办法吗?
c - C中带有#define的指针
功能:
函数调用:
bit_field 定义为这样的结构:
我不知道 &port 是在哪里定义的。
有人可以解释一下这个函数是如何读取的以及它是如何工作的吗?我对指针不是很好,尤其是这个例子很容易混淆前面和结尾的“*”以及端口的“&”。
谢谢
arrays - 如何将 38 位字节数组转换为 ASCII 十进制
我正在编写一个例程和一个 AVR ATMEGA88 来使用 TI TM3705A 芯片读取 FDX RFID 标签,并通过 UART 将其传输到另一个处理器。该芯片使用 15625 波特,而另一个处理器将以 19200 波特接收数据。
这个想法是读取输入数据(ID 号的 38 位 - 例如 00 11 E3 D6 7C),对其进行 CRC 校验,然后将其输出为代表标签唯一 ID 的友好 12 位十进制数(000300144252)。
到目前为止,我在一个数组中有这个 38 位数字:
我感兴趣的实际数字位于元素 2:6 中。没有的 2 个 MSB。6 应该被忽略,因为它们是下一个数据块的开始。
我正在寻找一种将数组中的字节输出为十进制“000300144252”的有效方法。
我尝试将它打包成 long long 类型,然后使用 sprintf %d 但它似乎在 temp = data << 32 上窒息。我不知道 sprintf 是否会处理这个大小数字。我承认我已经被 C# 和其他懒惰的语言宠坏了:)
有没有一种方法可以“随时”转换为十进制 - 换句话说,从最高有效位 (6) 读取并在 UART 上输出十进制 ASCII 数字,然后是 5、4、3、2 没有大型中间缓冲区和类似?这些芯片的内存有点受限。
string - 在 ATmega168V 上存储一个字符串并用 ASM 语言操作它(第一次家庭作业)
我正在尝试将一个字符串存储在内存中,访问该字符串并将小写字母更改为大写,反之亦然。我不明白的是如何引用该地址的字符串地址和 ascii 值。我相信我可以弄清楚逻辑,只是在数据和地址操作方面存在问题。我如何区分两者?注意:这是一个家庭作业编码作业。
c++ - c/c++ 优化调用函数中的常量变量
C/C++ 编译器仅在使用 -Os、-O1 和 -O2 时使用常量参数(在编译时已知)优化单层函数。它们不会优化所有层。只有 -O3 可以做到这一点。gcc 是 WinAVR 4.3.3,它不支持属性“优化”。
除了以下之外,还有哪些可能的解决方案?
- -O3 保存程序或文件(滥用会炸毁大小)
- 函数的属性优化-O3(4.3.3不支持)
- 宏(容易出错)
更新:
f1 已优化,但警告“_delay_us”是静态的,但用于内联函数“f1”,由于静态函数问题,该函数不是静态的。其他没有优化。
解决方案:
内联是关键。我的外部函数对于内联来说太大了。属性 always_inline 强制函数内联。这允许编译器以低于试图找出优化的编译成本来优化函数。-O3 足够聪明,可以进行优化,但 -Os 不行。-Os 可能需要一些编译器选项。(关键字 static 是必需的,因为内部函数也是静态内联的。)