stm32f469 FreeRTOS + STemWin с CubeMX и keil: неверные типы операндов (UnDefOT, Constant) для оператора (*

Я делаю проект, созданный с помощью STM32CubeMX для stm32f469i-disco.

Я основал установку на «FreeRTOSconfig.h» из проекта «Демонстрация» в репозитории STM32CubeFWF4V1.16.0. Свежий проект из CubeMX компилируется без проблем, но после добавления STemWin lib "STemWin532_CM4_OS_Keil_ot.lib" выдает ошибку

".......... \ Middlewares \ ThirdParty \ FreeRTOS \ Source \ Portable \ RVDS \ ARMCM4F \ port.c (507): error: A1586E: Неверные типы операндов (UnDefOT, Constant) для оператора ( "

Интересный факт: "Демонстрация" компилируется без этой ошибки.

Как мне настроить проект:

В CubeMX:

  1. Добавьте необходимые периферийные устройства: DMA2D, DSIHost, FMC и т. Д.

  2. Добавьте драйверы BSP для тачскрина и т. Д. Теперь он копируется без проблем.

  3. Клонировать «Конфигурацию часов» на основе «Демонстраций»

  4. На вкладке «Конфигурация» я клонирую всю конфигурацию на основе кода из «Демонстрации».

Затем в Keil: 5. Я обновляю «Включить путь» в целевых параметрах.

  1. Добавьте все файлы STemWin, и когда я попытаюсь скомпилировать: "... Неверные типы операндов ..."

Когда я отключаю freertos в CubeMX и добавляю не-OS STemWin lib, он компилируется без проблем. Когда я пытаюсь скомпилировать non_OS STemWin lib с включенным FreeRTOS, он терпит неудачу с тем же сообщением.

Что я пытался сделать? Обновить port.c. Ничего не изменилось.

Я что-то упустил при создании проекта?


person pondito    schedule 15.08.2017    source источник


Ответы (2)


Потратив 2 дня на то, чтобы выяснить, в чем может быть причина этой ошибки, я только что нашел ее, и теперь мой проект компилируется с включенным FreeRTOS и всеми другими исходными кодами, которые использовались изначально. Ну, очевидно, это рекурсивное включение для файла stm32f4xx_hal.h. Я добавил несколько модулей из демонстрационного пакета, и у них есть некоторые зависимости. Поскольку я хотел убрать некоторые функции из некоторых модулей, я вручную добавил include / resources для необходимых функций, что способствовало этой ошибке, поскольку я не добавлял никаких средств защиты в свои включения.

Оскорбительная строка была в файле port.c, и ошибка возникла из-за неправильного постоянного значения, переданного на сборочную строку 483: mov r0, #configMAX_SYSCALL_INTERRUPT_PRIORITY

Замена configMAX_SYSCALL_INTERRUPT_PRIORITY любым числовым значением помогла в компиляции кода, но я подумал, что не должен оставлять это в таком виде, и было бы намного лучше, если бы я выяснил причину проблемы.

Больше можно найти здесь: https://community.st.com/thread/44751-portc483-error-a1586e-bad-operand-types-undefot-constant-for-operator

person Embedded Music    schedule 29.10.2017

У меня возникла такая же проблема при сборке прошивки платы Nucleo-F401RE с CubeMX 4.25.
Эта проблема началась сразу после установки использования драйвера LL (низкоуровневого драйвера) вместо HAL в диалоговом окне настроек CubeMX.
Я думаю, что это проблема связана с определением C файла заголовка. Включение заголовка драйвера LL может где-то изменить определение __NVIC_PRIO_BITS.

#ifdef __NVIC_PRIO_BITS
#define configPRIO_BITS         __NVIC_PRIO_BITS
#else
#define configPRIO_BITS         4
#endif
#define configMAX_SYSCALL_INTERRUPT_PRIORITY (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))

Изменение __NVIC_PRIO_BITS на 4 в сгенерированном исходном коде решит проблему.

/* mov r0, #configMAX_SYSCALL_INTERRUPT_PRIORITY */
mov r0, #(configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - 4))
person Hill    schedule 23.05.2018