我正在使用zynq设备,试图通过一个独立的程序(没有操作系统)将数据从DRAM传输到ARM的外围设备。在示例代码中,我发现此代码用于声明事务的源地址和目标地址。
volatile static u8 SrcBuffer[BUFFER_BYTESIZE] __attribute__ ((aligned (64)));
volatile static u8 DestBuffer[BUFFER_BYTESIZE] __attribute__ ((aligned (64)));
由于没有操作系统,地址的价值是什么?我怎样才能改变它?
答案 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建议的内容