ViKo 1 4 декабря, 2018 Опубликовано 4 декабря, 2018 · Жалоба 14 часов назад, toweroff сказал: Под Keil же ST выложили лицензию. Нормально регистрируется На сайте кайла можно найти Помогите найти. Или вы говорите про Кейловскую? https://www2.keil.com/stmicroelectronics-stm32/mdk Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 4 декабря, 2018 Опубликовано 4 декабря, 2018 · Жалоба 1 hour ago, ViKo said: Помогите найти. Или вы говорите про Кейловскую? https://www2.keil.com/stmicroelectronics-stm32/mdk Про неё, родимую Правда, только для F0 и L0, но, как говорится, на безрыбье... В концов конце, можно и гцц пользовать с эклипсой, если приспичит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tea1975 0 6 декабря, 2018 Опубликовано 6 декабря, 2018 · Жалоба Не хочу заводить новую тему, если никто не против, пусть эта тема будет моей темой с вопросами, пока я буду осваивать (или пока меня хватит). Следующий вопрос явно связан либо с синтаксисом Си (хотя не вижу особых затыков) либо с настройкой компилятора, которую я в МДК вообще не трогаю пока. Итак... Осваиваю вывод с датчика ВМЕ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», то компилируется вообще с кучей ошибок.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 6 декабря, 2018 Опубликовано 6 декабря, 2018 · Жалоба В C99 для функции должен быть прототип. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tea1975 0 6 декабря, 2018 Опубликовано 6 декабря, 2018 · Жалоба 4 minutes ago, ViKo said: В C99 для функции должен быть прототип. Странно, в коде урока ни одна функция не имеет прототипа, а ругается только на эту. Да и в цело код то работает, только на этом месте трабл случился. Дальше пока не иду, т.к. надо понять, почему вместо 22,34 градуса выводится 2234. Почему деление на сотню не отрабатывает. Причём в дебагере складывается ощущение, что он вообще строчку с делением пропускает. Пробовал ставить деление сразу в строку выше, результат тот же: temper_float = ((temper_int * 5 + 128) >> 8) / 100.0f Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 6 декабря, 2018 Опубликовано 6 декабря, 2018 · Жалоба Только что, tea1975 сказал: Странно, в коде урока ни одна функция не имеет прототипа, а ругается только на эту. Как оно вообще компилируется? Что за операция такая в Си <>? Где равенство открывающих и закрывающих скобок в выражении присвоения val1? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 6 декабря, 2018 Опубликовано 6 декабря, 2018 · Жалоба Потому, что в других случаях по умолчанию возвращается int, а в данном нужен float. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tea1975 0 6 декабря, 2018 Опубликовано 6 декабря, 2018 · Жалоба 4 minutes ago, Arlleex said: Что за операция такая в Си <>? Странно, копировал прямо из урока, там >> а сюда так вставилось Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 6 декабря, 2018 Опубликовано 6 декабря, 2018 (изменено) · Жалоба 1. МК какой? 2. Если в нем есть FPU, включен ли он? 3. Уровень оптимизации какой? 4. По шагам если идти, состояния переменных temper_int, temper_float правильные? Сделайте полную очистку и последующую пересборку проекта. И да, прототип все-таки нужно сделать. Изменено 6 декабря, 2018 пользователем Arlleex Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tea1975 0 6 декабря, 2018 Опубликовано 6 декабря, 2018 · Жалоба 1 minute ago, Arlleex said: МК какой? 2. Если в нем есть FPU, включен ли он? 3. Уровень оптимизации какой? 4. По шагам если идти, состояния переменных temper_int, temper_float правильные? 1. STM32L476RG 2. Вроде как есть, но я не думаю что в этом проблема, я так понимаю, просто если нет FPU, то просто получу код побольше размером. Не матрицы в конце концов считаю. 3. пробовал и нулевой и 4ый, на нулевом только предупреждения все пропадают, но результат тот же. 4. Да вот никак с отладчиком не разберусь, в whatch переменные добавил, но значения отображаются только на части из них. Загуглил, вроде как пишуть у кейла есть такой косяк, надо переменные глобальными назначать, тогда он их нормально отображает в отладчике Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tea1975 0 6 декабря, 2018 Опубликовано 6 декабря, 2018 · Жалоба 14 minutes ago, Arlleex said: Сделайте полную очистку и последующую пересборку проекта. И да, прототип все-таки нужно сделать. Спасибо! Поставил прототип и вуаля - температура в норме. Пипец, не зря про Си и плюсы говорят, что выстрелить себе в ногу очень просто.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 5 6 декабря, 2018 Опубликовано 6 декабря, 2018 · Жалоба 50 minutes ago, tea1975 said: выстрелить себе в ногу очень просто Варнинг был? Был. Следует считать любой (ну, почти любой) варнинг как предупредительный выстрел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться