如何从嵌入式臂处理器中的某个物理内存中分配一块内存?

时间:2017-01-10 07:47:33

标签: c arm embedded zynq

我正在使用zynq设备,试图通过一个独立的程序(没有操作系统)将数据从DRAM传输到ARM的外围设备。在示例代码中,我发现此代码用于声明事务的源地址和目标地址。

volatile static u8 SrcBuffer[BUFFER_BYTESIZE] __attribute__ ((aligned (64)));
volatile static u8 DestBuffer[BUFFER_BYTESIZE] __attribute__ ((aligned (64)));

由于没有操作系统,地址的价值是什么?我怎样才能改变它?

2 个答案:

答案 0 :(得分:3)

您需要在链接器文件中定义a部分,然后使用(对于GCC)将数据放入其中:

__attribute__ (( section ( "your_section" ) ) )

在链接器文件中(其中还有其他内容)类似于:

MEMORY
{
   ....will be other stuff here
   ....
   YOUR_MEMORY_NAME : ORIGIN = 0xWhatever, Length = a_length // Creates a memory region 
}

SECTIONS
{
   ...
   ...

   .something_data :
   {
      *(your_data)
   } > YOUR_MEMORY_NAME 

   ...

}

答案 1 :(得分:0)

查看所提供的信息,似乎代码正在对DRAM进行DMA处理以及从微控制器外围设备的特定硬件缓冲寄存器进行DMA。

应该有一个代码,其中使用硬件外设寄存器地址,如SBUF或I2C_DATA_REG或类似的东西。 如果您想知道两个缓冲区的地址,您可能需要调试器,您可以使用它来查看两个阵列的地址,或者如果您有UART工作,那么您可以在控制台上打印它。 如果你想修复两个缓冲区的内存,那么你需要遵循@Realtime Rik建议的内容