void copydata(void) { int *src_rom = (int *)XPAR_FLASH_MEM0_BASEADDR; // pointer src_rom gets the base address of flash int *dst_ram = &__data_start; // pointer dst_ram gets the value(address) of .data section int *end_ram = &__data1_end; // pointer end_ram gets the ending address of .data1 section while (dst_ram < end_ram) { // copy the data from ROM to RAM *dst_ram++ = *src_rom++; } return; } /* end of copy.c */
/* Call __init */ bl __init /* copy data section */ bl copydata /* Let her rip */ bl main
.data : { . = ALIGN(4); __data_start = .; *(.data) *(.data.*) *(.gnu.linkonce.d.*) __data_end = .; } > ilmb_cntlr_dlmb_cntlr /* create a section */ .datacopy : { . = ALIGN(4); __datacopy = .; . += SIZEOF(.data); } > ilmb_cntlr_dlmb_cntlr
#include "xparameters.h" #include "stdio.h" #include "xutil.h" //==================================================== volatile int i = 0xDEADBEEF; extern unsigned char __datacopy; extern unsigned char __data_start; extern unsigned char __data_end; int main (void) { unsigned char *dataCopyStart = &__datacopy; unsigned char *dataStart = &__data_start; unsigned char *dataEnd = &__data_end; if (i == 0xDEADBEEF) while(dataStart < dataEnd) *dataCopyStart++ = *dataStart++; else while(dataStart < dataEnd) *dataStart++ = *dataCopyStart++; print("-- Entering main() --\r\n"); i = 0; print("-- Exiting main() --\r\n"); return 0; }
Answer Number | Answer Title | Version Found | Version Resolved |
---|---|---|---|
34609 | 12.x EDK - Master Answer Record List | N/A | N/A |