问题标签 [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 回答
328 浏览

arrays - 打印时为空数组

我正在为 AVR MCU 编写一些 C/asm 程序。我仍在学习,所以我希望我在代码中犯了某种错误。

volatile unsigned char suart_0_rx_buffer[SUART_0_BUF_SIZE+1];我在我的 asm 代码中访问的 C 代码中有一个缓冲区,如下所示。我要做的就是在缓冲区中存储一个字节并每次s0_Rxbyte递增指针。s0_index's0_Rxbyte` 始终是一个非零值。

如果我尝试在我的 C 代码中循环打印内容,我将一无所获。

我不想在这里附上所有东西,因为它会很混乱。

那么有人看到上面的 asm 代码有什么问题吗?

0 投票
1 回答
470 浏览

makefile - 在 osx 上使用 make 编译

我正在使用 avr-gcc 在命令行上编译

我正在使用的其中一项包含以下几行:

当我运行 make 我得到:

第 86 行在#if F_CPU != 16000000上面。我不确定为什么会收到错误消息。

0 投票
3 回答
1044 浏览

avr-gcc - 无法从 USART 获取输入 - FreeRTOS - AT32UC3A0512

只是尝试使用 FreeRTOS。以下是我的设置 -

  1. 微控制器 - AT32UC3A0512
  2. 板 - EVK1105
  3. 使用 FreeRTOS
  4. 环境 - 带有 ASF 最新 2.3 框架的 AVR Studio 5

我刚刚从示例项目 FreeRTOS 创建了一个新项目。我目前正在检查 USART。运行示例项目时,我可以通过 USART 将字符从我的开发板传输到 PC,但是当我在我的 PC usart 终端程序(使用 Putty)上键入或输入内容时,我什么也看不到。任何人都可以建议可能出了什么问题吗?或者我是否需要更改当前示例代码中的代码以在我的终端程序上为 USART 获取输入和显示?

谢谢...

0 投票
2 回答
1622 浏览

assembly - 使用 AVR-GCC 内联汇编器的相对跳转

我刚刚开始在 AVR-GCC 中试验内联汇编器。我正在研究一个宏,它将两个 8 位无符号整数相乘并将结果存储在一个 16 位无符号整数中,用于没有硬件乘法的 AVR,比使用标准 C 函数的速度更快。代码是:

问题是我只能使用这个宏一次 - 编译器不喜欢在插入宏以对不同的参数集进行乘法时重新定义“mult:”和“end:”。有没有办法解决?

0 投票
2 回答
358 浏览

exception-handling - 在 XP 上使用 MinGW 处理内存访问异常

我正在尝试在 XP 上使用 MinGW GCC 工具链以及来自嵌入式项目的一些供应商代码,这些代码访问高内存(> 0xFFFF0000),我相信这超出了 XP 中“平民”进程中允许的虚拟内存地址空间。

我想以某种方式自己处理内存访问异常,以允许在异常之后的指令处继续执行,即忽略它。有什么方法可以用 MinGW 做到这一点吗?还是使用 MS 工具链?

因此,大大简化的图片是:

更多细节:我正在使用 AVR32-gcc 工具链在带有 freeRTOS 的 Atmel AVR32 平台上开发一个嵌入式项目。开发/调试独立于硬件(和慢速 avr32 模拟器)的高级应用程序代码是可取的。各种 gcc、makefile 和宏技巧允许我在 MinGW/Win32 freeRTOS 端口环境中构建我的 Avr32/freeRTOS 项目,并且我可以在 eclipse/gdb 中进行调试。但是(供应商提供的)Avr32 代码中的高内存硬件访问会使 MinGW exe 崩溃(由于内存访问异常)。

我正在考虑这些方法的一些组合:

1)管理SW中的访问异常。理想情况下,我会创建一种硬件模拟器,但我认为这很困难并且涉及一些粗糙的汇编代码。许多异常可能会被忽略。

2)创建Avr32头文件的修改副本,以便将硬件寄存器#defines重新定位到用户进程地址空间(并创建一些结构和链接器部分来提交这些虚拟内存空间区域)

3) 函数调用的条件编译导致 highMem/HW 访问,或者更多的宏技巧,以最大限度地减少“真实”硬件目标代码中的代码混乱。(这个项目还有其他开发人员。)

任何建议或有用的链接将不胜感激。

这个页面在正确的轨道上,但似乎过于复杂,并且是我想避免的 C++。但我可能会尝试一下,没有其他建议。 http://www.programmingunlimited.net/siteexec/content.cgi?page=mingw-seh

0 投票
2 回答
1180 浏览

avr-gcc - 解释有关 AVR 端口设置的代码

以下是做什么的?

AFAIK,0xFC 是一个十六进制值。那基本上是说11111100,因此PORTD0-PORTD1是输出,其余的是输入。

该代码的完整解释是什么?

0 投票
2 回答
12065 浏览

reference - 解决生成文件中的“未定义引用”错误

我的目录中有一些自定义源文件,我的src目录中有一些来自 Arduino 项目的源文件src/base

obj我使用以下 make 规则将所有源文件编译为存储在我的目录中的对象:

如您所见,它将编译src/tacho.cobj/bot_tacho.osrc/base/wiring_analog.cobj/core_wiring_analog.o

在我的 makefile 中,我编译了所有源文件,没有任何问题。在其中一个文件(即src/tacho.c)中,我添加了以下内容: #include "base/wiring.h"其中包含analogRead.

有趣的是,wiring.h它只包含“analogRead”函数的原型。它甚至都懒得包含实际定义函数的文件,但是一些周围的嗅探让我发现函数的定义可以在src/base/wiring_analog.c.

我认为编译声明函数的文件并将其与所有其他必要的 Arduino 对象文件链接到单个库中就足够了。我随意选择了它的名字lib/core.a。我lib/core.a通过执行以下操作:

不用说,我首先确保此 make 规则的先决条件是有序的。

这没有问题。但是,问题是尝试生成我的二进制文件会给我留下“未定义的引用”错误。

我做了一个对象的 objdump core_%.o,我确实注意到core_wiring_analog.o提到了analogRead. 如果我认为它的工作方式是正确core.a的,那么 containscore_wiring_analog.o应该包含analogRead. 我回去编译src/tacho.c它使用该函数analogRead并且每次我尝试编译都很好(预处理器没有看到需要抱怨我的包含)。我想这是导致问题的链接。

我已经在网上阅读了很多东西,但我似乎仍然无法自己弄清楚这一点。可能是一个愚蠢的错误,但我只是看不到它。我怎么解决这个问题?

为了完整起见,我把我的整个项目放在这里:googlecode repository for my project

0 投票
1 回答
1281 浏览

avr - 将 ADXL345 SPI 总线连接到 AtMega644 需要帮助

嗨,我正在尝试让 AtMega644 上的 SPI 总线与 ADXL345 加速度计通信。我总是得到一个 0 的回报,而且我没有出错的地方。任何帮助表示赞赏。我使用的是 avr-gcc 而不是 Arduino 代码库。谢谢

0 投票
3 回答
7306 浏览

c++ - AVR Studio 5:编译 C++ 代码

在 AVR Studio 5 中创建项目时,它会创建一个包含以下内容的 .c 文件:

构建这个 C 程序工作得很好:

但是当我将文件扩展名更改为 .cpp 时,构建会发出未定义的警告设备类型(如果尝试使用任何 AVR 特定寄存器,则会变成错误):

比较这两个输出表明,对于 C 代码,它添加了选项-mmcu=atmega328pavr-gcc.exe但对于 C++ 代码,它在执行avr-g++.exe. 我在使用 WinAVR 时遇到了类似的问题。如何解决这个问题?

0 投票
3 回答
1408 浏览

c - 有关 AVR 和串行端口的帮助

我在串行通信方面遇到问题。我已经将 AtMega644 连接到需要 9600 8N1 的串行 LCD。我只是得到垃圾。通过垃圾,我只是得到一些 U、P、T 和 @ 而不是所需的“U”。我正在使用带有下面列出的保险丝的内部 8Mhz RC Osc。我怀疑是时间问题,但我不确定我哪里出错了。我添加了一个闪烁的 LED,时间看起来正确(眼球和数字秒表)。任何帮助表示赞赏。

avrdude -pm644 -cavrisp2 -Pusb -b2400 -u -Uflash:w:ImpactTarget.hex:a -Ulfuse:w:0xe2:m -Uhfuse:w:0xd8:m -Uefuse:w:0xff:m