10

我无法让 avr-elf-windows 和 WinAVR 工作。我已经设法构建了 avr-elf-windows ( ATmega2560 ) 提供的示例。但是,如果我尝试扩展以使用另一个芯片或开始使用 WinAVR 提供的包和项目,我会不断收到错误,我无法解决。

方法一:

修改 ATmega2560 示例以使用 WinAVR 包。

改变:

with Atmega2560; use Atmega2560;

到:

with AVR; use AVR;
with AVR.Atmega328p; use AVR.atmega328p;

创建一个项目文件以包括:

with "C:\WinAVR-20100110\lib\gnat\avr.gpr";
with "C:\WinAVR-20100110\lib\gnat\avr_app.gpr";

运行 make 我得到以下错误:

avr-gnatmake: "C:\WinAVR-20100110\lib\gnat\avr_lib\avr-int_img.adb" 编译错误

太好了,我有一个编译问题,但我看不到错误。

方法二:

在 GPS 中打开上述工程文件。将构建设置更改为 gnatmake。GPS 现在开始报告错误和警告:

项目警告:找不到对象目录“avr_lib/avr5/obj” 项目库目录“C:\WinAVR-20100110\lib\gnat\avr_lib\avr5\lib\”不存在

后一个问题很明显是我没有正确设置 GPS 来告诉它微控制器和架构的价值,但我似乎找不到任何解决这个问题的方法。

方法三:

要使用直接使用 makefile 设置的 WinAVR,则会出现错误:

avr-gnatmake:RTS 路径无效:缺少 adainclude 和 adalib 目录

如果我按照我可以通过搜索网络找到的说明进行操作,我只能找到在 Linux 下构建所需库的详细信息。

平台:Windows 7。


结合上面的两个答案,我现在已经设法链接我的示例代码。至于它是否可以在 Arduino 上工作,这是一个不同的问题。

非常感谢您的帮助。

我发现走到这一步有点令人沮丧,我想知道是否还有其他人可能会放弃 Arduino 上的 Ada 并返回 Arduino IDE,因此错过了学习语言的机会更多的结构。那里有许多误导性的页面也无济于事。

4

3 回答 3

7

您可能想查看在 Ada 中集成 8 位 AVR 微控制器的论文。基本上你可以使用 GPS 项目文件arduino.gpr,如

project Arduino is

   for Source_Dirs use (".", "src");
   for Object_Dir use "obj";
   for Exec_Dir use "bin";
   for Main use ("main.adb");

   package Compiler is 
    for Default_Switches ("ada") use ("-mmcu=avr5");
   end Compiler;

   package Ide is
      for Gnat use "avr-gnat";
      for Gnatlist use "avr-gnatls";
      for Debugger_Command use "avr-gdb";
   end Ide;

   package Builder is
      for Executable_Suffix use ".elf";
      for Default_Switches ("ada") use ("--RTS=rts-zfp");
   end Builder;

   package Linker is
      for Default_Switches ("ada") use ("obj\crtm328p._o", "-nostdlib", "-lgcc", "-mavr5", "-Tdata=0x00800200", "-mmcu=avr5");
   end Linker;

end Arduino;

你可以为你的 ATmega328P 编写一个规范,比如

with Interfaces; use Interfaces;
with System;

package ATmega328P is

   -- PORTB: Port B Data Register
   PORTB : Unsigned_8;
   for PORTB'Address  use System'To_Address (16#25#);

   -- DDRB: Port B Data Direction Register
   DDRB : Unsigned_8;
   for DDRB'Address  use System'To_Address (16#24#);

   -- PINB: Port B Input Pins
   PINB : Unsigned_8;
   for PINB'Address  use System'To_Address (16#23#);

end ATmega328P;

由您的主文件或库导入。

于 2013-03-30T23:27:33.837 回答
3

如果这不是直接的答案,请耐心等待;我只在 Linux 上使用过 AVR-Ada 工具链,所以除非其他人首先发现问题,否则我们可能不得不迭代解决方案。

首先要破译的是您拥有哪个版本的 AVR-Ada 工具:

您曾经需要的项目文件(使用 avr-ada 1.1)

with "C:\WinAVR-20100110\lib\gnat\avr.gpr";

现在使用 avr-ada 1.2.1 你需要(而不是)

with "C:\WinAVR-20100110\lib\gnat\avr_app.gpr";

用于构建应用程序和<same path>/avr_lib.gpr库。

我不相信你永远都需要!而且它们可能会相互冲突。

我不知道 Windows 二进制构建的状态,但如果您需要最新版本(推荐:这是一个真正的改进),您可能需要从源代码构建它。

方法 1:您是从命令行运行 Make 吗?如果是这样,我希望看到他们所有血腥细节中的错误。

方法2:这里帮不了你,我对GPS不太了解。但是我可以说在 Linux 上 [wherever]/avr/lib/gnat/avr_lib 中没有“avr5”文件夹。(AVR5 对 328p 是正确的)

Instead there IS a [wherever]/avr/lib/avr5 containing libc and other C-related objects - including the crtm328p.o that Rego names in his linker switches, and a [wherever]/lib/gcc/avr/4.7.2/avr5 folder containing libgcc.a. You probably need to find the former and point GPS at it...

Method 3 : This looks the easiest to fix. The "gnatmake" command needs an --RTS= option pointing at the correct RTS for the 328p. This should be --RTS=rts/avr5 assuming the RTS is correctly installed.

Alternatively a full path ought to work. Here, that would be

--RTS=/opt/avr_472_gnat/lib/gcc/avr/4.7.2/rts/avr5

on Windows you may have to poke around to find the correct path. Using Method 1 this --RTS option is automatically generated by avr_app.gpr.

于 2013-03-30T23:37:13.137 回答
1

It appears that having a mix of 3 or 4 tool chains installed that provide one of aspects of WinAvr, AvrAda causes significant problems (these included WinAvr, Avr-Ada, Cygwin, AVR compiler by Adacore and MinWG).

Starting with a brand new Win7 or Win8 installation perform the following:

Install WinAVR-20100110 to C:\WinAVR-20100110

Copy the content of the Avr-Ada-1.2.0_bin to C:\avr-ada-1.2.0

Add C:\avr-ada-1.2.0\bin to the PATH 

Compiling the content of each of the examples in C:\avr-ada-1.2.0\share\doc\avr-ada\apps identifies that some DLLs are missing: libiconv-2.dll, libgmp-10.dll, libmpc-2.dll, libmpfr-1.dll

These can be found in a MinGW installtion. 
Create a virtual machine to install MinGW on, in order to ensure it did not mess with the main PC. 
Copy the missing DLLs in C:\WinAVR-20100110\bin

The example in DS1820 will not compile due to crc_lib being missing. 

In order to upload to the Arduino the makefiles must be modified for your local installation, board type etc.
于 2013-04-27T07:08:54.467 回答