сборка проекта для STM32

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Вт июн 28, 2011 13:52:36

Сообщение Tibman »

Здравствуйте.
Возникла задача сборки проекта для контроллера STM32 из исходников (.h и .c). Когда-то и кем-то была написана прошивка в среде Keil, а теперь надо эту прошивку скорректировать, и залить в микроконтроллер.
Платными программами пользоваться нельзя, объём прошивки не маленький, поэтому поставил CooCox. Насколько я понимаю, надо ещё компилятор GCC-ARM установить, а также что-то ещё понадобится непосредственно для заливки прошивки в контроллер.

Пока проблемы следующие: загрузил файлы .h и .c в пустой проект, но программа не видит стандартных библиотек, появились следующие ошибки на следующих строках:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>,
Пишет unresolved iclusion. Но это же типовые библиотеки, не понимаю, как их подключать.
До этого с STM пору раз игрался через среду типа Nucleo, поэтому таких проблем не возникало.

Прошу помощи!
Как именно правильно собрать проект из таких исходников, и как его загрузить в мк. Прочитал уже много информации, но везде она довольно разрозненная. В крайнем случае могу ещё Cube поставить, если это может помочь.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 5750
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Откуда: Воронеж

Сообщение >TEHb< »

Раз такой настрой, то можно сразу CubeIDE и попробовать поставить. Бесплатная, полнофункциональная среда от производителя чипов. Там и библиотеки, и загрузчик, и отладчик.
"Привет!" - соврал он.
Контактная информация:
Реклама
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Вт июн 28, 2011 13:52:36

Сообщение Tibman »

Просто мне изначально показалось, что в Кокосе как-то проще в проект подкинуть исходники проекта, всё довольно очевидно даже если его включил первый раз. Все файлы легко подцепились, кроме указанных в первом сообщении главных библиотек.
А в Кубе я как-то разок попробовал, но там уже при формировании проекта куча каких-то "лишних" папок формируется, и с ходу не смог понять, как туда добавлять файлы с исходниками.
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

Tibman писал(а):Просто мне изначально показалось, что в Кокосе как-то проще в проект подкинуть исходники проекта
В EmBitz тоже не сложно и все что нужно (либы, компилятор, отладчик/прошивальщик) в комплекте. Нужно искать версию 2.30. Текущая 2.41 не стартует на русской винде из-за санкций!
Реклама
Эиком - электронные компоненты и радиодетали
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Вт июн 28, 2011 13:52:36

Сообщение Tibman »

Нашёл рекомендованную версию EmBitz. В нём удалось всё быстро собрать, всё довольно понятно, благодарю, на фоне всех остальных программ эта действительно дружелюбна.
Пытаюсь скомпилировать проект из исходников. Непонятно, как его писали, но якобы он был рабочий. Сначала у меня сыпалось много ошибок, но вот теперь осталась только одна, мешающая успешной компиляции.
Кусок кода, взаимодействующий с микросхемой eeprom по I2C.

int EE_WriteBlock(u16 addr, int len, void *buf)
{
int i;
for (i=0; i<len; i++) {
if (eewrite(addr++, *((byte*)buf)++)) break; - вот по этой строке выкидывает ошибку "lvalue required as increment operand"
}
return i;
}

Я хоть и читаю сейчас про работу с указателями, должным образом ещё не вник как следует в эту тему, и не могу с ходу понять суть ошибки.

Ругается что ли на то, что инкрементируем указатель ((byte*)buf) ?
Последний раз редактировалось Tibman Пн апр 11, 2022 15:30:58, всего редактировалось 2 раза.
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

Сообщение НовыйДень »

Ух блин, CooCox уже ж лет 10 как мертв, а тут его вспомнили всуе, (тьфу-тьфу, не к ночи будет помянут)... :)
Бесплатное - CubeIDE. Правда, чет краем уха слышал, его загрузку заблочили для РФии. Пробуйте Atollic поставить, он бесплатный, хоть и прекращен выпуск его из-за перекупа и ребрендинга под CubeIDE.
Кусок кода, взаимодействующий с eeprom.
EEPROM есть только сериях STM32L. В остальном - это эмуляция через тот же самый флеш.
Ругается что ли на то, что инкрементируем указатель ((byte*)buf) ?
Он не понимает, что за тип byte, если он не описан ранее. Учебник по языку программирования Си от авторов Ритчи и Кернигана - фпомощь!
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="НовыйДень",url="/forum/viewtopic.php?p=4212940#p4212940"]В остальном - это эмуляция через тот же самый флеш.[/uquote]Сказано же на I2C.

Добавлено after 59 seconds:
[uquote="Tibman",url="/forum/viewtopic.php?p=4212934#p4212934"]и не могу с ходу понять суть ошибки.[/uquote]Ошибку стоит приводить как её выдаёт компилятор, чтобы не гадать в хрустальном шаре.
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

Сообщение НовыйДень »

Топикстартер позже это исправил, вначале было иначе написано.
А в остальном - там просто неправильная работа с указателями и постинкрементом при явном приведении типов, ошибка так и записана полностью, как и выдает ее компилятор, да и догадаться можно. Следует записать *((uint8_t*)buf++), перенеся скобку. Или, если тип byte определен, тогда *((byte *)buf++)
Собутыльник Кота
Аватара пользователя
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

У инкремента приоритет выше. Скобки в обоих случаях лишние и ничего не меняют.
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

Сообщение НовыйДень »

Зато не в том месте поставленная скобка меняет всё! :) могли бы и сами уж догадаться, коль про приоритеты фкурсах.
Открыл глаза
Сообщения: 46
Зарегистрирован: Вт июн 05, 2012 23:32:13

Сообщение The Rock »

НовыйДень писал(а):Бесплатное - CubeIDE. Правда, чет краем уха слышал, его загрузку заблочили для РФии.
Да для РФ заблочили софт от ST, но через VPN Скачать можно
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

Сообщение НовыйДень »

Да и врот им компот, путь подавятся. Нынче в ближайшем обозримом будущем актуальность продукции ST вообще упала до практически нуля, учитывая расколбас 2020 года и нынешний. Ищем альтернативы - GD, ESP32 и иное подобное.
Потрогал лапой паяльник
Сообщения: 314
Зарегистрирован: Чт ноя 29, 2012 08:27:22

Сообщение pixar »

у меня ST блокирует и через VPN.
Актуальность STM никуда не делась. Процы продаются на алибабе.
Более того - среда и код STM32 подходят к соответствующим моделям GD32.
Собутыльник Кота
Аватара пользователя
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Не нужны там скобки, как ты их не расставляй через void не перепрыгнешь. Правильно вот так

Код: Выделить всё

uint32_t EE_WriteBlock(uint32_t addr, uint32_t len, uint8_t *buf)
{
  uint32_t i;
  for (i=0; i<len; i++) 
    if (eewrite(addr++, *buf++)) break;
  return i;
}
или вот так

Код: Выделить всё

uint32_t EE_WriteBlock(uint16_t addr, uint32_t len, void *buf)
{
  uint32_t i;
  uint8_t *pbuf = (uint8_t *)buf;
  for (i=0; i<len; i++) 
    if (eewrite(addr++, *pbuf++)) break;
  return i;
}
Я предпочитаю первое, чтобы при каждом вызове c чем-то отличным от (uint8_t *) компилятор предлагал подумать что ты делаешь.
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

Сообщение НовыйДень »

Блин, да я че, что-то другое про скобки написал? Там проблема была в скобке не в том месте. Лишние скобки ошибкой не считаются и в текстах могут использоваться для визуального отделения. А про явное приведение типов - почитай учебник по языку Си и не гунди :) Приведение типов можно делать сразу в параметрах ф-ции, а не выносить это отдельно в лишнюю переменную. И void* - это универсальный и удобный тип, нередко применяется. Благодаря нему в ту ф-цию можно передать указатель хоть на 4-байное слово или любую структуру, а разбито оно будет всё равно побайтно, указатель будет двигаться побайтно.
Почитай про void*, посмотри реализацию этого во FreeRTOS например:

Код: Выделить всё

BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,
                            ...
                            ...
                   ----->  void * const pvParameters, <---- 
                            ....
                            .... )
Без void* реализация показанной ф-ции на Сях была бы невозможна.
Собутыльник Кота
Аватара пользователя
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Знатный бредогенератор.
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

Сообщение НовыйДень »

Вы самокритичны :))) Ну чтож, запутались в приведении типов и инкрементах указателей, ну это не страшно, не отчаивайтесь, не всем дано понять указатели :)))
Это не хвост, это антенна
Сообщения: 1324
Зарегистрирован: Вт ноя 19, 2019 06:10:18

Сообщение tonyk »

Да для РФ заблочили софт от ST, но через VPN Скачать можно
Качай.

https://cloud.mail.ru/public/nHhe/3KgLU3G9w
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 362
Зарегистрирован: Вс апр 03, 2022 07:01:29

Сообщение НовыйДень »

tonyk, да, спасибо, и остальным полезно будет :)) Всегда знал, что есть обходные пути.
Собутыльник Кота
Аватара пользователя
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Изображение
void_increment.png
(7.62 КБ) 1128 скачиваний
Ответить

Вернуться в «ARM»