Jump to content

    

Keil 5.17 error #247 (ошибка - переопределение #define)

Столкнулся с граблями переноса проекта Keil с одного камня (stm32l151xxx) на другой (stm32f427xxx).

После замены всех хидеров SMSIS с L151 на аналогичные F427 выдается ошибки типа:

C:\Keil_v5\ARM\PACK\ARM\CMSIS\4.5.0\CMSIS\Include\cmsis_armcc.h(57): error:  #247: function "__get_CONTROL" has already been defined

общее их количество за 500 шт...

Это как-то связано еще с версией библиотек CMSIS, во всяком случае для L151 используется core_cm3.h V3.01, а  для F427 core_m4.h V4.01...

В core_cm3.h V3.01 ссылок на cmsis_armcc.h просто нет...

Вот тут похожая ситуация, описывается переход с 4.3.0 на 4.5.0 библиотеку, но не понятно как он ее решил...

Никак не могу понять как нужно модифицировать проект, чтобы убрать дублирование объявлений.

Прошу пнуть в нужном направлении.

(поиском ничего похожего нигде не нашел)

Share this post


Link to post
Share on other sites

Починил ...

Есть две библиотеки STM32F4xx_DSP_StdPeriph_Lib_V1.8.0 и STM32L1xx_StdPeriph_Lib_V1.3.1

(качались с сайта STM, но в разное время)

Естественно не вдаваясь в подробности меняя в проекте камень меняю, кроме хидеров перефирии и core_m3.h (V1.3.1) на core_m4.h (V1.8.0),  логично?

Так вот этого делать не нужно, необходимо было оставить V1.3.1 (т.е. из библиотеки STM32L1xx_StdPeriph_Lib_V1.3.1) !

Это как-то связано с организацией проектов, когда все хидеры библиотек копируются  в  локальные директории конкретного проекта.

В более новых файлах (от 2015-16г) CMSIS есть ссылки на cmsis_armcc.h, который существует в библиотеках самого Keil.

 

-----------

Тогда возникает законный вопрос, тянущий на целую тему:

Как правильно обновлять библиотеки в Keil (использовать их новые версии), чтобы подобные конфликты не возникали?

Edited by Dimy

Share this post


Link to post
Share on other sites
26 minutes ago, Dimy said:

Тогда возникает законный вопрос, тянущий на целую тему:

Как правильно обновлять библиотеки в Keil (использовать их новые версии), чтобы подобные конфликты не возникали?

 

Собирать проекты вручную. Никаких pack-ов, никаких CMSIS-овских надстроек в среде (именно в среде).

У меня, например, в проекте есть отдельная папка System, в которой находятся файл startup, некоторые системные файлы проекта, а также папка CMSIS, в которой находятся все нужные заголовочные файлы CMSIS. Библиотеки периферии (если использую) хранятся в другой папке наравне с System (в одной директории). Если мне надо обновить версию SPL или CMSIS (хотя не понятно, на кой черт) - достаточно заменить папку CMSIS и SPL на свежие. Проект от этого не сломается и все так же соберется без ошибок и предупреждений.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now