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

 
 
> Передача структуры в функцию.
Jenya7
сообщение Apr 27 2016, 10:00
Сообщение #1


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

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



Есть глобальная структура.
Код
typedef struct sLoggerData
{
    uint32_t timestamp;
    uint32_t data;
    uint16_t type;
    uint16_t crc;
}sLoggerData;

sLoggerData loggerData;

Ставлю точку останова в дебагере на строчке
Код
LOGGER_Read(0,  &loggerData);

Вижу адрес структуры - 0x20000548

Перехожу в саму функцию - аргумент передается правильно.
Код
uint32_t LOGGER_Read(uint32_t log_to_read, sLoggerData * logData)  //тут адрес 0x20000548
{
    uint32_t log_addr = LOGGER_GetLogAddress(log_to_read);

    I2C_ChooseDevice(EEPROM_CHIP);

    I2C_ReadEeprom(log_addr, (uint8_t *)&logData, sizeof(sLoggerData));  //тут адрес 0x20009fd8
    uint32_t crc = crc16 (0, (uint8_t *)&logData, (sizeof(sLoggerData)-2));
    if (crc == logData->crc)
        return 1;
    else
        return 0;
}

А когда доходит до (uint8_t *)&logData тут при кастинге адрес меняется на 0x20009fd8. Наверно поэтому данные не считываются?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SlavaV
сообщение Apr 27 2016, 11:17
Сообщение #2


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

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



Моё мнение ошибка немного в другом:
Указав имя при определении структуры в конце (после фигурной скобки) вы создаёте объект sLoggerData на основе этой структуры, а потом ещё создаете один объект loggerData.
В теле функции у вас используется имя sLoggerData какой объект подсунет компилятор остаётся загадкой (по правилам должен локальный)

PS смысл так кодировать нельзя
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 27 2016, 11:53
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (SlavaV @ Apr 27 2016, 14:17) *
Указав имя при определении структуры в конце (после фигурной скобки) вы создаёте объект sLoggerData
Нет. Там в начале было typedef.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 26th June 2025 - 23:32
Рейтинг@Mail.ru


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