Jump to content

    
Sign in to follow this  
_dark_

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

Recommended Posts

Столкнулся с граблями переноса проекта 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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this