用Ada编程Arduino

Sea*_*ean 10 avr arduino ada

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

方法1:

修改ATmega2560示例以使用WinAVR程序包.

更改:

with Atmega2560; use Atmega2560;
Run Code Online (Sandbox Code Playgroud)

至:

with AVR; use AVR;
with AVR.Atmega328p; use AVR.atmega328p;
Run Code Online (Sandbox Code Playgroud)

创建项目文件以包括:

with "C:\WinAVR-20100110\lib\gnat\avr.gpr";
with "C:\WinAVR-20100110\lib\gnat\avr_app.gpr";
Run Code Online (Sandbox Code Playgroud)

运行make我收到以下错误:

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

太好了,我有编译问题,但我看不出错误.

方法2:

在GPS中打开上面的项目文件.将构建设置更改为gnatmake.GPS现在开始报告错误和警告:

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

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

方法3:

要使用makefile直接使用WinAVR设置,然后给我错误:

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

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

平台:Windows 7.


结合上面的两个答案,我现在设法链接我的示例代码.至于它是否适用于Arduino,这是一个不同的问题.

非常感谢您的帮助.

到目前为止,我发现它有点令人沮丧,我想知道是否还有其他人可能会放弃Arduino上的Ada并回到Arduino IDE,因此错过了学习语言的机会更多结构.有很多误导性的页面也没有帮助.

Reg*_*ego 7

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

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;
Run Code Online (Sandbox Code Playgroud)

你可以编写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;
Run Code Online (Sandbox Code Playgroud)

由您的主文件或库导入.