We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I am working on STM32L432KB with Keil uVesion5 and need to write its internal flash using IAP method. For that I use below API: HAL_FLASH_Program (uint32_t TypeProgram, uint32_t Address, uint64_t Data)
The last argument(data) of the API accepts data of type uint64_t. Data to be written in flash in stored in and array of type uint8_t.
While developing logic for the same, I am facing 2 issues.
1. Data is stored in uint8_t buf[500] and I want to copy its 8 consecutive bytes in uint64_t data variable. The code for the same is:
uint8_t buf[500] = {1,2,3,4,5,6,7,8,9,0}; uint64_t data, *ptr; ptr = (uint64_t*)&buf[0]; data = *ptr;
Here, when control reaches to the line data = *ptr;, it stuck there and never execute next line (the next line not shown here).
Can you guide me why control stuck there ?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2. Instead of typecasting the data into uint64_t, when I try typecasting it in uint16_t or uint32_t, problem discussed in point 1 is solved. Mean the controller can now process data = *ptr line (where ptr is of type uint16_t or uint32_t) But here, I am facing issues of endianness. See code below for more understanding:
uint8_t buf[500] = {1,2,3,4,5,6,7,8,9,0}; uint16_t data, *ptr; ptr = (uint16_t*)&buf[0]; data = *ptr;
here, I except data = 0x0102, but actual output is data = 0x0201. Why swapping of bytes takes place here ? Any Idea ? Please guide me how I can achieve excepted answer ?