zynq sdk如何将函数或变量放到指定内存地址? - minichao9901/TangNano-20k-Zynq-7020 GitHub Wiki

附录:xilinx sdk程序中,如何修改ld文件,自定义section,并将变量和函数放入指定的section?

  • 第一步,创建内存区域,创建自定义section,并将自定义section分配到指定内存区域 image image image

  • 用__attribute__((section(".my_section")))将某个函数放到my_section中,编译后,查看生成的elf文件,可以看到这个函数确实放到了指定的内存区域。 image image

  • 这样做的好处是,可以用void* Xil_MemMap(UINTPTR PhysAddr, size_t size, u32 flags)函数,对指定的区域设置存储属性。比如,我想让这个函数或这个变量所在的内存区域,关闭cache,那么我就可以这样做: myfunc()-->my_section-->my_addr_range-->Xil_Memmap进行属性设置。

  • 虽然可以这样做,但我们将disp_flush函数放到指定的内存区域,并对这段内存区域设置排除在NORM_NONCACHE属性外,屏幕就点不亮了,这个原因不清楚。