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

14 часов назад, toweroff сказал:

Под Keil же ST выложили лицензию. Нормально регистрируется

На сайте кайла можно найти

Помогите найти. Или вы говорите про Кейловскую?

https://www2.keil.com/stmicroelectronics-stm32/mdk

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


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

1 hour ago, ViKo said:

Помогите найти. Или вы говорите про Кейловскую?

https://www2.keil.com/stmicroelectronics-stm32/mdk

Про неё, родимую

Правда, только для F0 и L0, но, как говорится, на безрыбье... :pardon:

В концов конце, можно и гцц пользовать с эклипсой, если приспичит.

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


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

Не хочу заводить новую тему, если никто не против, пусть эта тема будет моей темой с вопросами, пока я буду осваивать (или пока меня хватит).

Следующий вопрос явно связан либо с синтаксисом Си (хотя не вижу особых затыков) либо с настройкой компилятора, которую я в МДК вообще не трогаю пока.

Итак...

Осваиваю вывод с датчика ВМЕ280 информации в UART (пока). Функция содрана из уроков. Задал этот вопрос и там, но автор не часто видимо просматривает комментарии, а у меня аж чешется от нерешённой проблемы:

Можете прояснить, почему у меня не отрабатывает в функции закомментированная строка?

float BME280_ReadTemperature(void)
{
float temper_float = 0.0f;
uint32_t temper_raw;
int32_t val1, val2;
BME280_ReadReg_BE_U24(BME280_REGISTER_TEMPDATA,&temper_raw);
temper_raw >>= 4;
val1 = ((((temper_raw>>3) — ((int32_t)CalibData.dig_T1 <> 11;
val2 = (((((temper_raw>>4) — ((int32_t)CalibData.dig_T1)) *
((temper_raw>>4) — ((int32_t)CalibData.dig_T1))) >> 12) *
((int32_t)CalibData.dig_T3)) >> 14;
temper_int = val1 + val2;
temper_float = ((temper_int * 5 + 128) >> 8);
//temper_float = temper_float/100.0f;
return temper_float;
}

т.е. и при отсутствии комментирующих слэшей и с ними результат в терминале температура умноженная на 100. Причем в main.c напротив вызова этой функции стоит предупреждение: implicit declaration of function 'BME280_ReadTemperature' is invalid in C99.
Если в настройках во вкладке С/С++ убрать галочку с «C99 mode», то компилируется вообще с кучей ошибок..

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


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

4 minutes ago, ViKo said:

В C99 для функции должен быть прототип.

Странно, в коде урока ни одна функция не имеет прототипа, а ругается только на эту.

Да и в цело код то работает, только на этом месте трабл  случился. Дальше пока не иду, т.к. надо понять, почему вместо 22,34 градуса выводится 2234. Почему деление на сотню не отрабатывает. Причём в дебагере складывается ощущение, что он вообще строчку с делением пропускает. Пробовал ставить деление сразу в строку выше, результат тот же:

temper_float = ((temper_int * 5 + 128) >> 8) / 100.0f

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


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

Только что, tea1975 сказал:

Странно, в коде урока ни одна функция не имеет прототипа, а ругается только на эту.

Как оно вообще компилируется?:shok:

Что за операция такая в Си <>?

Где равенство открывающих и закрывающих скобок в выражении присвоения val1?

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


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

Потому, что в других случаях по умолчанию возвращается int, а в данном нужен float.

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


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

4 minutes ago, Arlleex said:

Что за операция такая в Си <>?

Странно, копировал прямо из урока, там >> а сюда так вставилось :blush:

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


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

1. МК какой?

2. Если в нем есть FPU, включен ли он?

3. Уровень оптимизации какой?

4. По шагам если идти, состояния переменных temper_int, temper_float правильные?

 

Сделайте полную очистку и последующую пересборку проекта. И да, прототип все-таки нужно сделать.

Изменено пользователем Arlleex

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


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

1 minute ago, Arlleex said:

МК какой?

2. Если в нем есть FPU, включен ли он?

3. Уровень оптимизации какой?

4. По шагам если идти, состояния переменных temper_int, temper_float правильные?

1. STM32L476RG 

2. Вроде как есть, но я не думаю что в этом проблема, я так понимаю, просто если нет FPU, то просто получу код побольше размером. Не матрицы в конце концов считаю.

3. пробовал и нулевой и 4ый, на нулевом только предупреждения все пропадают, но результат тот же.

4. Да вот никак с отладчиком не разберусь, в whatch переменные добавил, но значения отображаются только на части из них. Загуглил, вроде как пишуть у кейла есть такой косяк, надо переменные глобальными назначать, тогда он их нормально отображает в отладчике

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


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

14 minutes ago, Arlleex said:

Сделайте полную очистку и последующую пересборку проекта. И да, прототип все-таки нужно сделать.

Спасибо! Поставил прототип и вуаля - температура в норме. Пипец, не зря про Си и плюсы говорят, что выстрелить себе в ногу очень просто..

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


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

50 minutes ago, tea1975 said:

выстрелить себе в ногу очень просто

Варнинг был? Был. Следует считать любой (ну, почти любой) варнинг как предупредительный выстрел.

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


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

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

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

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

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

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

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

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

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

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