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

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

Вт апр 12, 2022 07:15:58

У вас гранаты не той сисьтемы :))) Долго же вы "саабражали" и пыхтели :) Лучше хорошенько почитайте учебник по Си, коль не умеете пользоваться приведением типов и указателями :))) Я понимаю, что хочется выкрутиться любой ценой, но зачем же сцать против ветра вместо того, чтобы просто прочитать, что void вообще-то имеет размерность 1 байт, и указатель на void* указывает на нечто размером 1 байт. Но суть тут не в этом! Там ошибка была в неверно установленной скобке при приведении типов и постинкременте, о чем и было указано в мессаге компилятора! Либо перенести одну скобку, либо убрать обе парные скобки. Хотя лишние скобки в разумных кол-вах ошибкой не считаются. А всё остальное - это уже частности общих реализаций. Конкретно к показанной выше проблеме отношения не имеют.

Изображение

PS. И запомните, ВладиславС, раз и навсегда: иная точка зрения не является "хамством", и незачем так истерично реагировать, и сами тоже не хамите!. Давайте нормально, конструктивно общаться. Я более 20 лет занимаюсь разработкой микроэлектроники, сотни реализованных прожэктов и уж стопудово знаю поболее ваших потуг разобраться в трех соснах :))) Договорились?

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

Вт апр 12, 2022 09:24:58

Лучше хорошенько почитайте учебник по Си
Может просто в стандарт С заглянуть?
6.2.5 Types
СпойлерИзображение
vp2.png
(16.88 KiB) Скачиваний: 69

6.5.6 Additive operators
СпойлерИзображение
vp1.png
(92.31 KiB) Скачиваний: 57


Добавлено after 27 minutes 24 seconds:
А вот реакция разных компиляторов на это выражение
GCC
СпойлерИзображение
vp3.png
(9.34 KiB) Скачиваний: 59

CLANG
СпойлерИзображение
vp4.png
(2.86 KiB) Скачиваний: 47

IAR
СпойлерИзображение

Компиляторы в режиме С++ для более строгого контроля. Все они в один голос говорят, что это арифметика с указателем на void. А она согласно 6.5.6 стандарта С запрещена. Хотите находиться в зоне UB - ваше право, но другим такого советовать не надо.

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

Вт апр 12, 2022 11:42:32

Спасибо большое за правильные подсказки, помогло!

Добавлено after 1 hour 3 minutes 54 seconds:
Столкнулся с ошибками в заголовочном файле при объявлении структур. Проект был изначально сделан в Keil. Предполагается, что в нём он компилировался безошибочно.

На сайте keil.com приведён код подобной структуры:
Код:
typedef __packed struct
{
    char x;                   // all fields inherit the __packed qualifier
    int y;
} X;                          // 5 byte structure, natural alignment = 1


Однако в коде схожее решение вызывает следующие ошибки:

Код:
typedef __packed struct {                              (error: expected ';' before 'struct')
   u16 SensorType;
   float R0; // Начальное сопротивление для RTD
   float Inom; // Измерительный ток для RTD
   u16 Inom_INT; // Измерительный ток для RTD - код ЦАП
   u16 filterType; // Не используется
   u16 Reserved;
   __packed struct cal_struct                      (error: expected specifier-qualifier-list before '__packed')
   {
      float x0;
      float y0;
      float x1;
      float y1;
   } cal;
} SensorConfigRegStruct;


Тут ошибки из-за "продвинутости Keil", и без редактирования код не подходит для EmBitz?

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

Вт апр 12, 2022 11:44:56

Tibman писал(а):(error: expected ';' before 'struct')

Ищите пропущенную точку с запятой строчкой выше.

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

Вт апр 12, 2022 12:13:12

Tibman, __packed нестандартное ключевое слово, вот так правильно
Код:
struct __attribute__((__packed__)) SensorConfigRegStruct
{
   u16 SensorType;
   float R0; // Начальное сопротивление для RTD
   float Inom; // Измерительный ток для RTD
   u16 Inom_INT; // Измерительный ток для RTD - код ЦАП
   u16 filterType; // Не используется
   u16 Reserved;
   struct __attribute__((__packed__)) cal_struct
   {
      float x0;
      float y0;
      float x1;
      float y1;
   }  cal;
};

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

Вт апр 12, 2022 13:27:18

Значит правильные были подозрения, что это код написан с учетом особенностей Keil.
Правка кода с использованием "__attribute__((__packed__))" прошла успешно, исправил во всех подобных структурах.
Огромное спасибо!

Благодаря помощи удалось решить проблемы со всеми заголовочными файлами, проект почти собран.
Судя по сообщениям компилятора, только в одном .c файле остались ошибки, который отвечает за обмен по i2c.

Добавлено after 1 hour 1 minute 32 seconds:
Решил исключить из проекта этот подозрительный файл i2c.c, вызывающий большое количество ошибок, т.к. не обнаружил к нему отсылок в файле Main.c, посчитав, что в случае необходимости компилятор выдаст сообщение об обсутствии необходимого файла.
Но результат вышел неожиданным.

Ошибка появилась по файлу stm32f4xx_conf.h, причем я посмотрел содержимое альтернативных файлов из сети с таким же названием, и там всё написано аналогично.
Но компилятор почему-то ругается именно на него.

Код:
void assert_failed(uint8_t* file, uint32_t line);
#else
  #define assert_param(expr) ((void)0)          error: expected identifier or '(' before 'void' и error: expected ')' before numeric constant
#endif /* USE_FULL_ASSERT */

#endif /* __STM32F4xx_CONF_H */

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

Пн апр 18, 2022 08:05:05

Платными программами пользоваться нельзя, объём прошивки не маленький, поэтому поставил CooCox.


у кейла есть лицензия комьюнити, (не для коммерческого использования)
вот https://www2.keil.com/mdk5/editions/community
Ответить