Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

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

Пн апр 11, 2022 10:56:46

Здравствуйте.
Возникла задача сборки проекта для контроллера 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

Раз такой настрой, то можно сразу CubeIDE и попробовать поставить. Бесплатная, полнофункциональная среда от производителя чипов. Там и библиотеки, и загрузчик, и отладчик.

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

Пн апр 11, 2022 12:09:41

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

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

Пн апр 11, 2022 12:59:40

Tibman писал(а):Просто мне изначально показалось, что в Кокосе как-то проще в проект подкинуть исходники проекта
В EmBitz тоже не сложно и все что нужно (либы, компилятор, отладчик/прошивальщик) в комплекте. Нужно искать версию 2.30. Текущая 2.41 не стартует на русской винде из-за санкций!

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

Пн апр 11, 2022 15:13:44

Нашёл рекомендованную версию 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 раз(а).

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

Пн апр 11, 2022 15:22:40

Ух блин, CooCox уже ж лет 10 как мертв, а тут его вспомнили всуе, (тьфу-тьфу, не к ночи будет помянут)... :)
Бесплатное - CubeIDE. Правда, чет краем уха слышал, его загрузку заблочили для РФии. Пробуйте Atollic поставить, он бесплатный, хоть и прекращен выпуск его из-за перекупа и ребрендинга под CubeIDE.

Кусок кода, взаимодействующий с eeprom.

EEPROM есть только сериях STM32L. В остальном - это эмуляция через тот же самый флеш.

Ругается что ли на то, что инкрементируем указатель ((byte*)buf) ?

Он не понимает, что за тип byte, если он не описан ранее. Учебник по языку программирования Си от авторов Ритчи и Кернигана - фпомощь!

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

Пн апр 11, 2022 16:35:43

В остальном - это эмуляция через тот же самый флеш.
Сказано же на I2C.

Добавлено after 59 seconds:
и не могу с ходу понять суть ошибки.
Ошибку стоит приводить как её выдаёт компилятор, чтобы не гадать в хрустальном шаре.

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

Пн апр 11, 2022 17:13:16

Топикстартер позже это исправил, вначале было иначе написано.
А в остальном - там просто неправильная работа с указателями и постинкрементом при явном приведении типов, ошибка так и записана полностью, как и выдает ее компилятор, да и догадаться можно. Следует записать *((uint8_t*)buf++), перенеся скобку. Или, если тип byte определен, тогда *((byte *)buf++)

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

Пн апр 11, 2022 17:37:26

У инкремента приоритет выше. Скобки в обоих случаях лишние и ничего не меняют.

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

Пн апр 11, 2022 17:45:17

Зато не в том месте поставленная скобка меняет всё! :) могли бы и сами уж догадаться, коль про приоритеты фкурсах.

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

Пн апр 11, 2022 17:52:22

НовыйДень писал(а):Бесплатное - CubeIDE. Правда, чет краем уха слышал, его загрузку заблочили для РФии.

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

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

Пн апр 11, 2022 17:58:17

Да и врот им компот, путь подавятся. Нынче в ближайшем обозримом будущем актуальность продукции ST вообще упала до практически нуля, учитывая расколбас 2020 года и нынешний. Ищем альтернативы - GD, ESP32 и иное подобное.

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

Пн апр 11, 2022 19:04:47

у меня ST блокирует и через VPN.
Актуальность STM никуда не делась. Процы продаются на алибабе.
Более того - среда и код STM32 подходят к соответствующим моделям GD32.

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

Пн апр 11, 2022 19:05:17

Не нужны там скобки, как ты их не расставляй через 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

Знатный бредогенератор.

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

Пн апр 11, 2022 20:56:33

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

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

Вт апр 12, 2022 05:54:14

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


Качай.

https://cloud.mail.ru/public/nHhe/3KgLU3G9w

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

Вт апр 12, 2022 05:57:18

tonyk, да, спасибо, и остальным полезно будет :)) Всегда знал, что есть обходные пути.

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

Вт апр 12, 2022 07:03:49

Изображение
void_increment.png
(7.62 KiB) Скачиваний: 597
Ответить