问题标签 [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.
arduino - LUFA 编码 AT90USB162 的示例
我为支持 USB 的AVR 微控制器LUFA (2011-10-09)提供了一个开源 USB 库,并且我正在尝试将CDC(引导加载程序)示例编码到我的AT90USB162芯片中。示例代码位于文件夹中/Bootloads/CDC
,为构建AT90USB1287的 CDC 做好了准备。所以我需要更改 makefile 参数以设置正确的微芯片。
在生成文件中,我更改了以下内容:
- MCU = at90usb162
- F_CPU = 16000000
- FLASH_SIZE_KB = 16
- BOOT_SECTION_SIZE_KB = 4
并构建了代码。这发生时没有错误,但是当我尝试使用 .hex 文件刻录芯片时,它返回消息:
地址超出范围
为什么会发生这种情况?
更新
在makefile
中,BOOT_START
配置为:
也许错误会出现在 BOOT_START 记帐中?我应该配置更多东西吗?
c - C中的定点数字振铃滤波器
我正在尝试在 AVR 微控制器上编写数字振铃滤波器,但在定点算术中实现状态图时遇到了一些麻烦。这是我尝试为其编写代码的信号流图片:
编辑:(我相信上面 T_c 的等式应该是 e^[-1/(F_s*D)] )
这是我到目前为止所拥有的。我有一个名为 smultfix 的例程,它对两个 8 位有符号整数进行定点有符号乘法并返回一个 16 位有符号乘积。F_c 和 T_c 是 8 位有符号二进制小数。“输出”和 T_c 的输入与延迟元件 z1 连接处的中间步骤被视为 16 位二进制小数。所以我有:
(假设 F_c 和 T_c 在别处定义)
不幸的是,我似乎刚刚创建了一个糟糕的随机数生成器,因为这段代码会产生大量垃圾填满我的输出缓冲区!如果有人能指出我可能出错的地方,或者他们有一个更好的实现想法,将不胜感激。
linker - AVR 链接器错误,“重定位被截断以适应”
我正在尝试为 ATmega328 micro 编译一些代码,我想使用 Arduino 的库和核心。我正在使用CMake。我已经编译了核心库和我的代码的所有对象以及 Arduino 的库。但是当它链接时,他们向我显示以下错误。
...“重定位被截断以适应:R_AVR_13_PCREL 针对符号”...“avr5/libgcc.a”...
我通过 Google发现这是一个常见错误,但没有任何解决方案对我有用。我唯一不能做的就是将“-lm”和“-lc”标志放在链接器语句的末尾,因为我不知道如何使用 CMake 做到这一点。
编辑:我也尝试过用 makefile 编译它,但我得到了相同的结果,甚至在链接器语句的末尾放置了“-lm”和“-lc”标志。
我把我的 Makefile 和 CMake 文件放在这里:
CMakeList.txt主 CMake 文件
arduino.cmake。由 CMakeList.txt 导入:
Arduino 核心 CMake 文件。这是一个放入libarduinocore
目录的 CMakeList.txt 文件。
生成文件
c - 编译包含包含 C 定义的头文件的汇编代码
我试图一起编译程序集和 C 代码(不是 C 到程序集),但无法完成。
例如
文件 common.h
文件common.S
当我尝试编译这个时:
有什么方法可以使用 gcc 将 C 定义放入汇编中?
提前致谢。
string - 在 FLASH 中留下数据数组(字体) - AVR GCC 中的 PROGMEM
啊,PROGMEM,指针,指向指针的指针,指针的地址......我的头晕了。
我有相关字体的数据数组
我在其中添加了 PROGMEM
这在另一个类似的结构中被引用;
结构定义为;
我是否正确假设这需要更改为;
当我这样做时,它抱怨说
对于 FONT_INFO 变量中的这一特定行;
然后使用函数绘制;
最后绘制字形;
我在我头上:/谁能给我一些指导?我花了几个小时尝试使用 PGM_P 和 pgm_read_byte 等都无济于事 - 我总是在屏幕上看到垃圾。
救我!
c - 在嵌入式系统中存储大整数/值
我正在开发一个可以测试大量电线(最多 360 根)的嵌入式系统——本质上是一个连续性检查系统。该系统通过在测试向量中计时并从另一端读取输出来工作。然后将输出与存储的结果(将在 SD 卡上)进行比较,该结果告诉输出应该是什么。测试向量只是一个行走的向量,因此无需将它们存储在任何地方。该过程将如下所示:
- 打卡测试向量(行走的)
- 读入输出测试向量。
- 从 SD 卡读取相应的输出测试向量,它告诉输出向量应该是什么。
- 比较第 2 步和第 3 步的测试向量。
- 在单独的数组中记下错误/故障。
- 除非检查了所有电线,否则继续返回步骤 1。
- 将错误/故障输出到 LCD。
我的硬件由一个大的移位寄存器组成,它与 AVR 微控制器同步。对于每个测试向量(也将是 360 位),我需要读取 360 位。因此,对于 360 根线,数据总量将是 360*360 = 16kB 左右。我已经知道我不能一次性做到这一点(即读取整个数据然后比较),所以它必须是一个测试向量一个测试向量。
由于没有可以容纳如此大数字的固有类型,我打算使用长度为 360 位的位数组。现在,我的问题是,我应该如何将这个位数组存储在 txt 文件中?
一种方法是存储原始值,即在每一行存储我从移位寄存器读取的原始二进制数据。因此,对于 8 根线,它将是 0b10011010。但这对于多达 360 根线来说可能会变得很丑 - 每条线将包含 360 个字节。
另一种方法是存储十六进制值 - 这将只是 8 位的两个字符(以上为 9A)和 360 位的大约 90 个字符。但是,这将需要我逐行读取文本,并以某种方式将十六进制值转换为位数组中表示的值。
那么对于此类问题的最佳解决方案是什么?我需要完全“确定性”的解决方案——我不能调用 malloc 之类的。从我读过的内容来看,它们在嵌入式系统中有点禁忌。
概括
我需要存储任何传统变量类型都无法表示的大值。目前我打算将这些值存储在位数组中。将这些值存储在 SD 卡上的文本文件中的最佳方法是什么?
size - 如何知道在avr32上编译后的最终程序大小
我正在使用 avr studio 5。我的控制器是 AT32UC3A0512。我想知道在刻录程序之前将在闪存上占用的最终程序大小。请告诉我怎么知道这个?
avr - AVR 上的软件 PWM 使用延迟
我正在尝试使用 AVR ATMega16 上的延迟来完成简单的 PWM 生成
我想要做的只是简单地将 LED 从 100% 淡化到 0% 占空比,稍后我将扩展它以控制双色 LED 的两种颜色以产生很好的效果。
我之前在 mikroC 中使用 PIC 完成了此操作,但不知何故,在 avr-gcc 中它并不容易,或者我可能遗漏了一些东西。
我的问题是我希望 LED 在 3 秒内完全褪色,但我觉得它褪色更快。我还认为它在高占空比上花费的时间比在低占空比上花费的时间更多。我的意思是我看到 LED 亮了一会儿,然后它就消失了,但是当它变暗时,它会非常快地移动到不同的占空比,或者我认为..
您对我所缺少的有什么想法吗?
代码可在此处获得:http: //ideone.com/lUP5f
谢谢
c - 内联 if (?:) 在 _delay_us() 中不起作用
当我尝试_delay_us(condition ? value_if_true : value_if_false)
在我的 1-Wire 实现中使用时,延迟不起作用,并且我的设备没有得到任何答复,但是当我将其替换为:
当我在液晶显示器上显示内联值时,它显示正确的值。
那么这两种符号有什么区别呢?如果在 _delay_us() 中工作,我如何进行内联?
c - 在 C 中更改全局变量
我在 AVR 芯片上运行 C 程序。每当听到串行信号时,它就会运行串行中断 ISR (USART_RX_vect)。在这种方法中,它应该打开 change to = 1;
。然后在我的主while
循环中,它应该清除 LCD 并显示它,然后change = 0
再次设置。
这是为了阻止它继续进行计算,并在 LCD 上每分钟显示一百万次结果。
但是,当中断方法将 change 变量更改为 1 时,它似乎并没有“全局”更改它,并且在 main 方法中它始终为 0..
这里有一些用于调试目的的东西。