我不知道这是否可行但是我试图定义但不分配(声明)一个数组,主要是因为我需要保持与使用三维数组的现有代码的兼容性。 这个"阵列"实际上是一个指向特定内存地址的指针,在那里我映射了外部图形控制器的视频内存,很明显我可以声明一个指向我特定地址内存的指针:
unsigned int* PlaneSecondary = (unsigned int*)_Lime_PPC_Base_;
但是通过这种方式,我应该通过指针算法访问PlaneSecondary,而我之前存在的代码并没有这样做。
我设法在特定的绝对地址中定义和声明一个数组:
#pragma push
#pragma section ".LIME_Plane_section" ".LIME_Plane_section"
unsigned int __attribute__((section (".LIME_Plane_section"))) PlaneSecondary[_Lime_n_layers][_Lime_Y_res][_Lime_X_res];
#pragma pop
.lcf的一部分:
lime_mem : origin = 0x60000000, length = 0x01000000 //16MB ram LIME R/W
/* .... */
.LIME_Plane_section 0x60000000 :
{
} > lime_mem
但是这样,当我真的不需要时,编译器会为我的PlaneSecondary物理分配一些空间。
如果这是可能的,我猜我错过了.lcf或PlaneSecondary上的某些属性。
提前致谢。
答案 0 :(得分:1)
您可以定义指向数组的指针:
unsigned int (*PlaneSecondary)[_Lime_Y_res][_Lime_X_res] = (void*)_Lime_PPC_Base_;
然后你可以访问它:
PlaneSecondary[layer][y][x]