Jump to content

    

Ошибки библиотек. 1986ВЕ4У Миландр.

Recommended Posts

Fillya

Доброго времени суток. После пары программ на STM32 (я не очень опытный программист) решил попробовать отечественный контроллер 1986ВЕ4У. Написал на нём в своё время несколько программ и они работали. При открытии через год тех же программ, они работают (хотя появляются предупреждения вида (прил. 1). При попытке создать новый пустой проект появляются ошибки, которые начинаются с библиотечных (прил. 2). Кто-нибудь может подсказать, в чём тут дело? Допускаю, что может я что-то забыл.

 

 

 

 

1.png

2.png

3.png

4.png

Edited by Fillya

Share this post


Link to post
Share on other sites

Darth Vader

Для начала приведите в порядок дерево проекта. Там не должно быть категории CMSIS - у вас там нет никаких компонентов. Убериье её, раз не используете. Исключите файл .sct - это скрипт линкера, а не файл исходного кода. Уберите из дерева все явно включенные туда файлы-заголовки .h - им там не место. Они не являются самостоятельными единицами трансляции. Они сами автоматически подключатся к тем исходникам, куда они включены директивой #include. Они будут видны в разворачивающемся списке под соответствующими исходниками, если развернуть его нажатием на "+".

Share this post


Link to post
Share on other sites

Fillya
35 минут назад, Darth Vader сказал:

Для начала приведите в порядок дерево проекта. Там не должно быть категории CMSIS - у вас там нет никаких компонентов. Убериье её, раз не используете. Исключите файл .sct - это скрипт линкера, а не файл исходного кода. Уберите из дерева все явно включенные туда файлы-заголовки .h - им там не место. Они не являются самостоятельными единицами трансляции. Они сами автоматически подключатся к тем исходникам, куда они включены директивой #include. Они будут видны в разворачивающемся списке под соответствующими исходниками, если развернуть его нажатием на "+".

Я не могу убрать явно включённые файлы - они подключаются автоматически после включения библиотек ядра и периферии в Manage Run-time Environment и функции удаления для них нет. После компиляции они все, как вы и говорите, присутствуют в виде списка под соответствующим исходником.

 

З.Ы. Убрал библиотеку Core, оставил только драйвера блока тактовых частот и портов ввода-вывода - ошибки те же самые, а категория CMSIS исчезла

Edited by Fillya

Share this post


Link to post
Share on other sites

Forger
2 hours ago, Fillya said:

Допускаю, что может я что-то забыл.

В подобных случаях - навести порядок в заваленном хламом сарае - проще вытащить все оттуда наружу и переложить обратно в чистый от хлама сарай, соблюдая порядок, а не наваливая все кучей обратно.

Другими словами - создайте новый проект, добавляя туда свои файлы, после каждого шага проверяя как все собирается. Так намного проще найти "виновника" беспорядка )

Разумеется, старый проект не трогать (забэкапить хотя бы).

Share this post


Link to post
Share on other sites

Darth Vader

Закомментируйте строку

#define MDR_LEGACY_SUPPORT 153

в файле MDR32F9Qx_config.h

Все связанные с ним предупреждения уйдут. Останутся только ошибки.

В файле  MDR1986BE4.h в строке 22 должно быть

extern "C" {

а не

extern {

как сейчас. Исправьте и проверьте. Ошибки должны уйти.

Edited by Darth Vader
Дополнение

Share this post


Link to post
Share on other sites

Fillya
7 часов назад, Darth Vader сказал:

Закомментируйте строку

#define MDR_LEGACY_SUPPORT 153

в файле MDR32F9Qx_config.h

Все связанные с ним предупреждения уйдут. Останутся только ошибки.

В файле  MDR1986BE4.h в строке 22 должно быть

extern "C" {

а не

extern {

как сейчас. Исправьте и проверьте. Ошибки должны уйти.

 

Спасибо большое! Как вы и говорили, все трудности ушли. Касательно MDR_LEGACY я понимаю, что они хотят обновлять содержимое библиотек и внесли в версию предупреждения по этому поводу, а что касательно extern "C"? У меня нет старых версий, но кажется данное выражение там было. Можно услышать о том, почему такое включение сработало и предположение о том, почему его изначально там не было? Заранее благодарен за доп. ответы :)

Share this post


Link to post
Share on other sites

Darth Vader
7 часов назад, Fillya сказал:

Касательно MDR_LEGACY я понимаю, что они хотят обновлять содержимое библиотек и внесли в версию предупреждения по этому поводу

Там чуть сложнее. Они поменяли ряд имен макросов, функций, типов и т.д. Но старые можно оставить в действии, если определен этот макрос. Можно сделать поиск по всему проекту и увидеть, что чем там подменяется, когда он определён.

7 часов назад, Fillya сказал:

что касательно extern "C"? У меня нет старых версий, но кажется данное выражение там было

Да, было в версии 1.5.3. Именно такое для ВЕ4 - extern { . Т.е. ошибка была и там, ещё в версии 1.5.3. Если посмотреть все прочие аналогичные файлы для других МК Миландра из пака, то там эта строка написана правильно extern "C" { . Там никаких ошибок нет. Почему тогда, с паком версии 1.5.3 у вас ошибок не было, а сейчас они вдруг появились - не могу сказать.

Лично я вообще не понимаю смысла квалификатора extern "C" применительно к именам типов и макросов. Это можно смело убрать и ничего не изменится. Данный квалификатор имеет смысл лишь применительно к объявлению функций (прототипам функций). По отношению к именам макросов, типов и даже объектов (переменные, константы встроенных и пользовательских типов) это бессмысленно. Что это говорит компилятору? Что этот тип является типом Си? Или что этот макрос - это Си-макрос? Или что эта переменная - это Си-переменная? Вобщем, глупость какая-то, которую нужно просто убрать.

Напишите запрос в техподдержку Миландра, они должны оперативно исправить это.

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.