Other Parts Discussed in Thread: HALCOGEN
I have a structure.
struct TelemPackStruct { uint32_t tmMarker; float32_t wx ; float32_t wy ; float32_t wz ; float32_t m1 ; float32_t m2 ; float32_t m3 ; float32_t q0 ; float32_t q1 ; float32_t q2 ; float32_t q3 ; struct BinData{ uint32_t seconds :32; uint32_t indication :8; uint32_t mode :8; uint32_t modeArea :8; }binDataTM; };
I need to save this type of structure every second with different values in the emif.
I enabled the emif in the Halcogen (sdram, async1,2,3, pinmux, driver).
I modified the linker file :
MEMORY { VECTORS (X) : origin=0x00000000 length=0x00000020 KERNEL (RX) : origin=0x00000020 length=0x00008000 FLASH0 (RX) : origin=0x00008020 length=0x001F7FE0 FLASH1 (RX) : origin=0x00200000 length=0x00200000 STACKS (RW) : origin=0x08000000 length=0x00000800 KRAM (RW) : origin=0x08000800 length=0x00000800 RAM (RW) : origin=(0x08000800+0x00000800) length=(0x0007F800 - 0x00000800) /* USER CODE BEGIN (2) */ SDRAM (RXW) : origin=0x80000000 length=0x007FFFE0 /* USER CODE END */ }
and
SECTIONS { .intvecs : {} > VECTORS /* FreeRTOS Kernel in protected region of Flash */ .kernelTEXT align(32) : {} > KERNEL .cinit align(32) : {} > KERNEL .pinit align(32) : {} > KERNEL /* Rest of code to user mode flash region */ .text align(32) : {} > FLASH0 | FLASH1 .const align(32) : {} > FLASH0 | FLASH1 /* FreeRTOS Kernel data in protected region of RAM */ .kernelBSS : {} > KRAM .kernelHEAP : {} > RAM .bss : {} > RAM .data : {} > RAM /* USER CODE BEGIN (4) */ .telem : {} > SDRAM /* USER CODE END */ }
I defined an array of structs
#define NUM_OF_PACKS 1024 struct TelemPackStruct telemetry [NUM_OF_PACKS] __attribute__((section(".telem")));
The problem i found is the following.
__attribute__((section(".telem"))) volatile struct TelemPackStruct telemetry [NUM_OF_PACKS]; void foo(){ volatile struct TelemPackStruct tmToRead; //filling tmToRead telemetry[0]=tmToRead; //telemetry[0].q1=tmToRead.q1; does the same problem }
When i try to write telemetry[0] that is stored in the EMIF, it writes only one variable (not single in the structure) and writes it on the WHOLE SDRAM (include ).