Страница 1 из 2
сборка проекта для STM32
Добавлено: Пн апр 11, 2022 10:56:46
Tibman
Здравствуйте.
Возникла задача сборки проекта для контроллера STM32 из исходников (.h и .c). Когда-то и кем-то была написана прошивка в среде Keil, а теперь надо эту прошивку скорректировать, и залить в микроконтроллер.
Платными программами пользоваться нельзя, объём прошивки не маленький, поэтому поставил CooCox. Насколько я понимаю, надо ещё компилятор GCC-ARM установить, а также что-то ещё понадобится непосредственно для заливки прошивки в контроллер.
Пока проблемы следующие: загрузил файлы .h и .c в пустой проект, но программа не видит стандартных библиотек, появились следующие ошибки на следующих строках:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>,
Пишет unresolved iclusion. Но это же типовые библиотеки, не понимаю, как их подключать.
До этого с STM пору раз игрался через среду типа Nucleo, поэтому таких проблем не возникало.
Прошу помощи!
Как именно правильно собрать проект из таких исходников, и как его загрузить в мк. Прочитал уже много информации, но везде она довольно разрозненная. В крайнем случае могу ещё Cube поставить, если это может помочь.
Re: сборка проекта для STM32
Добавлено: Пн апр 11, 2022 11:56:02
>TEHb<
Раз такой настрой, то можно сразу CubeIDE и попробовать поставить. Бесплатная, полнофункциональная среда от производителя чипов. Там и библиотеки, и загрузчик, и отладчик.
Re: сборка проекта для STM32
Добавлено: Пн апр 11, 2022 12:09:41
Tibman
Просто мне изначально показалось, что в Кокосе как-то проще в проект подкинуть исходники проекта, всё довольно очевидно даже если его включил первый раз. Все файлы легко подцепились, кроме указанных в первом сообщении главных библиотек.
А в Кубе я как-то разок попробовал, но там уже при формировании проекта куча каких-то "лишних" папок формируется, и с ходу не смог понять, как туда добавлять файлы с исходниками.
Re: сборка проекта для STM32
Добавлено: Пн апр 11, 2022 12:59:40
Мурик
Tibman писал(а):Просто мне изначально показалось, что в Кокосе как-то проще в проект подкинуть исходники проекта
В EmBitz тоже не сложно и все что нужно (либы, компилятор, отладчик/прошивальщик) в комплекте. Нужно искать версию 2.30. Текущая 2.41 не стартует на русской винде из-за санкций!
Re: сборка проекта для STM32
Добавлено: Пн апр 11, 2022 15:13:44
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) ?
Re: сборка проекта для STM32
Добавлено: Пн апр 11, 2022 15:22:40
НовыйДень
Ух блин, CooCox уже ж лет 10 как мертв, а тут его вспомнили всуе, (тьфу-тьфу, не к ночи будет помянут)...
Бесплатное - CubeIDE. Правда, чет краем уха слышал, его загрузку заблочили для РФии. Пробуйте Atollic поставить, он бесплатный, хоть и прекращен выпуск его из-за перекупа и ребрендинга под CubeIDE.
Кусок кода, взаимодействующий с eeprom.
EEPROM есть только сериях STM32
L. В остальном - это эмуляция через тот же самый флеш.
Ругается что ли на то, что инкрементируем указатель ((byte*)buf) ?
Он не понимает, что за тип byte, если он не описан ранее. Учебник по языку программирования Си от авторов Ритчи и Кернигана - фпомощь!
Re: сборка проекта для STM32
Добавлено: Пн апр 11, 2022 16:35:43
VladislavS
[uquote="НовыйДень",url="/forum/viewtopic.php?p=4212940#p4212940"]В остальном - это эмуляция через тот же самый флеш.[/uquote]Сказано же на I2C.
Добавлено after 59 seconds:
[uquote="Tibman",url="/forum/viewtopic.php?p=4212934#p4212934"]и не могу с ходу понять суть ошибки.[/uquote]Ошибку стоит приводить как её выдаёт компилятор, чтобы не гадать в хрустальном шаре.
Re: сборка проекта для STM32
Добавлено: Пн апр 11, 2022 17:13:16
НовыйДень
Топикстартер позже это исправил, вначале было иначе написано.
А в остальном - там просто неправильная работа с указателями и постинкрементом при явном приведении типов, ошибка так и записана полностью, как и выдает ее компилятор, да и догадаться можно. Следует записать *((uint8_t*)buf++), перенеся скобку. Или, если тип byte определен, тогда *((byte *)buf++)
Re: сборка проекта для STM32
Добавлено: Пн апр 11, 2022 17:37:26
VladislavS
У инкремента приоритет выше. Скобки в обоих случаях лишние и ничего не меняют.
Re: сборка проекта для STM32
Добавлено: Пн апр 11, 2022 17:45:17
НовыйДень
Зато не в том месте поставленная скобка меняет всё!

могли бы и сами уж догадаться, коль про приоритеты фкурсах.
Re: сборка проекта для STM32
Добавлено: Пн апр 11, 2022 17:52:22
The Rock
НовыйДень писал(а):Бесплатное - CubeIDE. Правда, чет краем уха слышал, его загрузку заблочили для РФии.
Да для РФ заблочили софт от ST, но через VPN Скачать можно
Re: сборка проекта для STM32
Добавлено: Пн апр 11, 2022 17:58:17
НовыйДень
Да и врот им компот, путь подавятся. Нынче в ближайшем обозримом будущем актуальность продукции ST вообще упала до практически нуля, учитывая расколбас 2020 года и нынешний. Ищем альтернативы - GD, ESP32 и иное подобное.
Re: сборка проекта для STM32
Добавлено: Пн апр 11, 2022 19:04:47
pixar
у меня ST блокирует и через VPN.
Актуальность STM никуда не делась. Процы продаются на алибабе.
Более того - среда и код STM32 подходят к соответствующим моделям GD32.
Re: сборка проекта для STM32
Добавлено: Пн апр 11, 2022 19:05:17
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 *) компилятор предлагал подумать что ты делаешь.
Re: сборка проекта для STM32
Добавлено: Пн апр 11, 2022 20:15:28
НовыйДень
Блин, да я че, что-то другое про скобки написал? Там проблема была в скобке не в том месте. Лишние скобки ошибкой не считаются и в текстах могут использоваться для визуального отделения. А про явное приведение типов - почитай учебник по языку Си и не гунди

Приведение типов можно делать сразу в параметрах ф-ции, а не выносить это отдельно в лишнюю переменную. И void* - это универсальный и удобный тип, нередко применяется. Благодаря нему в ту ф-цию можно передать указатель хоть на 4-байное слово или любую структуру, а разбито оно будет всё равно побайтно, указатель будет двигаться побайтно.
Почитай про void*, посмотри реализацию этого во FreeRTOS например:
Код: Выделить всё
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,
...
...
-----> void * const pvParameters, <----
....
.... )
Без void* реализация показанной ф-ции на Сях была бы невозможна.
Re: сборка проекта для STM32
Добавлено: Пн апр 11, 2022 20:52:59
VladislavS
Знатный бредогенератор.
Re: сборка проекта для STM32
Добавлено: Пн апр 11, 2022 20:56:33
НовыйДень
Вы самокритичны

Ну чтож, запутались в приведении типов и инкрементах указателей, ну это не страшно, не отчаивайтесь, не всем дано понять указатели

Re: сборка проекта для STM32
Добавлено: Вт апр 12, 2022 05:54:14
tonyk
Да для РФ заблочили софт от ST, но через VPN Скачать можно
Качай.
https://cloud.mail.ru/public/nHhe/3KgLU3G9w
Re: сборка проекта для STM32
Добавлено: Вт апр 12, 2022 05:57:18
НовыйДень
tonyk, да, спасибо, и остальным полезно будет

Всегда знал, что есть обходные пути.
Re: сборка проекта для STM32
Добавлено: Вт апр 12, 2022 07:03:49
VladislavS