Код
struct sFlashParam
{
uint32_t aaa;
uint16_t bbb;
uint8_t ccc;
uint8_t ddd;
};
struct sFlashParam flashParam;
{
uint32_t aaa;
uint16_t bbb;
uint8_t ccc;
uint8_t ddd;
};
struct sFlashParam flashParam;
Я делаю какие то изменения и копирую
Код
void ParsePacket(void)
{
struct sFlashParam tempParam;
//load the old content
memcpy(&tempParam, (uint32_t*)FLASH_PARAM_ADDR, sizeof (struct sFlashParam));
if (new_packet[0] != tempParam.aaa)
{
tempParam.aaa = new_packet[0];
//do something
}
if(new_packet[1] != tempParam.bbb)
{
tempParam.bbb = new_packet[1];
//do something
}
//and so on…..
WriteToFlash(FLASH_PARAM_ADDR, (uint32_t*) &tempParam, sizeof (struct sFlashParam));
flashParam = tempParam;
}
{
struct sFlashParam tempParam;
//load the old content
memcpy(&tempParam, (uint32_t*)FLASH_PARAM_ADDR, sizeof (struct sFlashParam));
if (new_packet[0] != tempParam.aaa)
{
tempParam.aaa = new_packet[0];
//do something
}
if(new_packet[1] != tempParam.bbb)
{
tempParam.bbb = new_packet[1];
//do something
}
//and so on…..
WriteToFlash(FLASH_PARAM_ADDR, (uint32_t*) &tempParam, sizeof (struct sFlashParam));
flashParam = tempParam;
}
теперь я хочу добавить в структуру пару массивов
Код
struct sFlashParam
{
uint32_t aaa;
uint16_t bbb;
uint8_t ccc;
uint8_t ddd;
uint8_t eee[4];
uint8_t fff[4];
};
{
uint32_t aaa;
uint16_t bbb;
uint8_t ccc;
uint8_t ddd;
uint8_t eee[4];
uint8_t fff[4];
};
прямое копирование (flashParam = tempParam;) я так понимаю не прокатит,так как есть подозрение что компайлер сделает shallow copy.
то есть мне надо добавить еще две строчки
Код
WriteToFlash(FLASH_PARAM_ADDR, (uint32_t*) &tempParam, sizeof (struct sFlashParam));
flashParam = tempParam;
memcpy(&flashParam.eee, &tempParam.eee,4);
memcpy(&flashParam.fff, &tempParam.fff,4);
flashParam = tempParam;
memcpy(&flashParam.eee, &tempParam.eee,4);
memcpy(&flashParam.fff, &tempParam.fff,4);
я прав или зря беспокоюсь?