Перейти к содержанию
    

Копирование структур.

Есть структура

struct sFlashParam  
{
    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  
{
    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, Вы же не храните в структуре ссылки или указатели.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

все сработает flashParam = tempParam, Вы же не храните в структуре ссылки или указатели.

есть подозрение что скопируется адрес масива а не сам массив.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если не перегружена операция = происходит почленное копирование, Вы в структуре создали массив, а не указатель на массив, и выделили память для всех элементов массива

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если не перегружена операция = происходит почленное копирование, Вы в структуре создали массив, а не указатель на массив, и выделили память для всех элементов массива

спасибо. успокоили. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...