我想编写一个非常简单的驱动程序来初始化,写入/读取微控制器上的某些外设,就像我在C中完成的那样.我以GPIO外设为例进行初始化,写入和读取.
GPIOA : GPIO_Register with
Volatile,
Address => System'To_Address (GPIOA_Base);
pragma Import (Ada, GPIOA);
Run Code Online (Sandbox Code Playgroud)
如果我声明一个列表来访问所有GPIO:
type GPIO_Register_ptr is access all GPIO_Register with volatile;
Gpio_List_Pointers : array (Integer range 1 .. 8) of aliased GPIO_Register_ptr;
Run Code Online (Sandbox Code Playgroud)
然后分配:
Gpio_List_Pointers(1) := GPIOA'Access;
Run Code Online (Sandbox Code Playgroud)
我收到错误:
142:29 prefix of "ACCESS" attribute must be aliased
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决?
我已经安装了GNAT 2012 for Bare Boards并调整了为STM32F4XX(发现板)发布的sfp运行时(ravenscar配置文件),以将其用于STM32F2XX微控制器.修改后的SFP运行时工作,它已经与应用程序,库和一些驱动程序集成:UART,SPI和DMA也用Ada编写,它工作正常.
唯一的问题是编译器已开始抱怨SRAM.更具体地说,".bss"部分被"x"个字节溢出.
为了公平比较,我们有一个类似的项目(应用程序,库和驱动程序)用C语言在相同的微控制器上运行,我们可以看到(内存映射)内存使用率几乎是内存的一半(STM32F2XX:128 Kb RAM) .所以我想知道ADA是否需要比C运行更多的内存是否正常?
提前感谢您的意见!:)