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

 
 
> Помогите разобраться со структурами, Одна структура объявлена в другой
Димон Безпарольн...
сообщение Dec 5 2016, 17:37
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



Компилятор С-Free ошибок не выдает, но виснет при выполнении. Тот же софт в ARM не виснет, но данные через структуру не передает - там мусор. Вот эти структуры:

Код
struct bme280_calibration_param_t {
    u16 dig_T1;/**<calibration T1 data*/
    s16 dig_T2;/**<calibration T2 data*/
    s16 dig_T3;/**<calibration T3 data*/
    u16 dig_P1;/**<calibration P1 data*/
    s16 dig_P2;/**<calibration P2 data*/
    s16 dig_P3;/**<calibration P3 data*/
    s16 dig_P4;/**<calibration P4 data*/
    s16 dig_P5;/**<calibration P5 data*/
    s16 dig_P6;/**<calibration P6 data*/
    s16 dig_P7;/**<calibration P7 data*/
    s16 dig_P8;/**<calibration P8 data*/
    s16 dig_P9;/**<calibration P9 data*/
    u8  dig_H1;/**<calibration H1 data*/
    s16 dig_H2;/**<calibration H2 data*/
    u8  dig_H3;/**<calibration H3 data*/
    s16 dig_H4;/**<calibration H4 data*/
    s16 dig_H5;/**<calibration H5 data*/
    s8  dig_H6;/**<calibration H6 data*/
    s32 t_fine;/**<calibration T_FINE data*/
};
struct bme280_t {
    struct bme280_calibration_param_t cal_param;
    /**< calibration parameters*/
    u8 chip_id;/**< chip id of the sensor*/
    u8 dev_addr;/**< device address of the sensor*/
    u8 oversamp_temperature;/**< temperature over sampling*/
    u8 oversamp_pressure;/**< pressure over sampling*/
    u8 oversamp_humidity;/**< humidity over sampling*/
    u8 ctrl_hum_reg;/**< status of control humidity register*/
    u8 ctrl_meas_reg;/**< status of control measurement register*/
    u8 config_reg;/**< status of configuration register*/
};


Далее определяю ссылку:

Код
static struct bme280_t *p_bme280; /**< pointer to BME280 */


В Main обращаюсь к структуре, заполняя ее поля:

Код
    p_bme280->cal_param.dig_T1 = (u16)1;
    p_bme280->cal_param.dig_T2 = (s16)2;
    p_bme280->cal_param.dig_T3 = (s16)3;
    p_bme280->cal_param.dig_P1 = (u16)4;
    p_bme280->cal_param.dig_P2 = (s16)5;
    p_bme280->cal_param.dig_P3 = (s16)6;
    p_bme280->cal_param.dig_P4 = (s16)7;
    p_bme280->cal_param.dig_P5 = (s16)8;
    p_bme280->cal_param.dig_P6 = (s16)9;
    p_bme280->cal_param.dig_P7 = (s16)10;
    p_bme280->cal_param.dig_P8 = (s16)11;
    p_bme280->cal_param.dig_P9 = (s16)12;
    p_bme280->cal_param.dig_H1 = (s16)13;        
    p_bme280->cal_param.dig_H2 = (s16)14;            
    p_bme280->cal_param.dig_H3 = (s16)15;


В том же Main пытаюсь вывести значения:

Код
    printf("\nT1:%x ",p_bme280->cal_param.dig_T1);    //0x89 = 0x6C, 0x88 = 0x9E
    printf("T2:%x ",  p_bme280->cal_param.dig_T2);    //0x8B = 0x64, 0x8A = 0xFD
    printf("T3:%x ",  p_bme280->cal_param.dig_T3);    //0x8D = 0x00, 0x8C = 0x32
    printf("P1:%x ",  p_bme280->cal_param.dig_P1);    //0x8F = 0x93, 0x8E = 0x43
    printf("P2:%x ",  p_bme280->cal_param.dig_P2);    //0x91 = 0xD4, 0x90 = 0xED
    printf("P3:%x ",  p_bme280->cal_param.dig_P3);    //0x93 = 0x0B, 0x92 = 0xD0
    printf("P4:%x ",  p_bme280->cal_param.dig_P4);    //0x95 = 0x1D, 0x94 = 0x10
    printf("P5:%x ",  p_bme280->cal_param.dig_P5);    //0x97 = 0xFF, 0x96 = 0xFC
    printf("P6:%x ",  p_bme280->cal_param.dig_P6);    //0x99 = 0xFF, 0x98 = 0xF9
    printf("P7:%x ",  p_bme280->cal_param.dig_P7);    //0x9B = 0x26, 0x9A = 0xAC
    printf("P8:%x ",  p_bme280->cal_param.dig_P8);    //0x9D = 0xD8, 0x9C = 0x0A
    printf("P9:%x ",  p_bme280->cal_param.dig_P9);    //0x9F = 0x10, 0x9E = 0xBD
    printf("H1:%x ",  p_bme280->cal_param.dig_H1);    //0xA1 = 0x4B
    printf("H2:%x ",  p_bme280->cal_param.dig_H2);    //0xE2 = 0x01, 0xE1 = 0x69
    printf("H3:%x ",  p_bme280->cal_param.dig_H3);    //0xE3 = 0x00
    printf("H4:%x ",  p_bme280->cal_param.dig_H4);    //0xE4 = 0x14, 0xE5[3..0] = 0x00
    printf("H5:%x ",  p_bme280->cal_param.dig_H5);    //0xE6 = 0x00, 0xE5[7..4] = 0x00
    printf("H6:%x\r", p_bme280->cal_param.dig_H6);    //0xE7 = 0x1E 33 ?????


Что здесь не так?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
k155la3
сообщение Dec 6 2016, 06:52
Сообщение #2


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

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Димон Безпарольный @ Dec 5 2016, 21:37) *
. . . .
Далее определяю ссылку:

Код
static struct bme280_t *p_bme280; /**< pointer to BME280 */

. . . .


Это указатель объявлен. ссылка в С есть нечто другое со знаком &.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 6 2016, 07:51
Сообщение #3


Гуру
******

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



QUOTE (k155la3 @ Dec 6 2016, 09:52) *
ссылка в С есть нечто другое со знаком &.
Ссылок в C нет совсем, они есть в C++.


--------------------
На любой вопрос даю любой ответ
"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
k155la3
сообщение Dec 6 2016, 10:04
Сообщение #4


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

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Сергей Борщ @ Dec 6 2016, 10:51) *
Ссылок в C нет совсем, они есть в C++.

Нэ знал. Пробелы в консерватории sm.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Димон Безпарольный   Помогите разобраться со структурами   Dec 5 2016, 17:37
- - megajohn   Цитата(Димон Безпарольный @ Dec 5 2016, 20...   Dec 5 2016, 17:44
- - Димон Безпарольный   И правда. Спасибо. Заработало.   Dec 5 2016, 18:01
- - Димон Безпарольный   Пытаюсь доконца разобраться. Для того, чтобы элеме...   Dec 6 2016, 10:10
|- - Lagman   Цитата(Димон Безпарольный @ Dec 6 2016, 13...   Dec 6 2016, 11:16
||- - Димон Безпарольный   Цитата(Lagman @ Dec 6 2016, 14:16) bme280...   Dec 6 2016, 13:22
||- - Lagman   А как и где у вас объявляются p_BME280 и BME280_cf...   Dec 6 2016, 13:55
||- - Димон Безпарольный   Цитата(Lagman @ Dec 6 2016, 16:55) А как ...   Dec 6 2016, 14:51
||- - conan   Цитата(Димон Безпарольный @ Dec 6 2016, 17...   Dec 7 2016, 22:49
|- - XVR   Цитата(Димон Безпарольный @ Dec 6 2016, 13...   Dec 8 2016, 10:28
- - esaulenka   Если эта структура bme280 одна, и размножать их не...   Dec 6 2016, 11:02
- - Lagman   А заголовочный файл у вас подключается к двум исхо...   Dec 6 2016, 15:59
- - Димон Безпарольный   Спасибо за развернутый ответ, но речь шла об одном...   Dec 8 2016, 05:40
|- - conan   Цитата(Димон Безпарольный @ Dec 8 2016, 08...   Dec 8 2016, 09:29
|- - Димон Безпарольный   Цитата(conan @ Dec 8 2016, 12:29) Что зна...   Dec 8 2016, 09:41
- - gerber   Значит, ваш код каким-то образом "сносит...   Dec 8 2016, 08:55
- - Lagman   Автор топика не может посмотреть соседние файлы в ...   Dec 8 2016, 11:49


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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 22:59
Рейтинг@Mail.ru


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