реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
Jenya7
сообщение Jan 12 2016, 07:24
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Есть структура
Код
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);

я прав или зря беспокоюсь?
Go to the top of the page
 
+Quote Post
SlavaV
сообщение Jan 12 2016, 09:01
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 100
Регистрация: 13-06-06
Из: г.Улан-Удэ
Пользователь №: 18 024



все сработает flashParam = tempParam, Вы же не храните в структуре ссылки или указатели.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 12 2016, 09:26
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(SlavaV @ Jan 12 2016, 14:01) *
все сработает flashParam = tempParam, Вы же не храните в структуре ссылки или указатели.

есть подозрение что скопируется адрес масива а не сам массив.
Go to the top of the page
 
+Quote Post
SlavaV
сообщение Jan 12 2016, 09:48
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 100
Регистрация: 13-06-06
Из: г.Улан-Удэ
Пользователь №: 18 024



если не перегружена операция = происходит почленное копирование, Вы в структуре создали массив, а не указатель на массив, и выделили память для всех элементов массива
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jan 12 2016, 10:13
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(SlavaV @ Jan 12 2016, 14:48) *
если не перегружена операция = происходит почленное копирование, Вы в структуре создали массив, а не указатель на массив, и выделили память для всех элементов массива

спасибо. успокоили. sm.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 05:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.01388 секунд с 7
ELECTRONIX ©2004-2016