Fillya 0 Posted September 10, 2021 (edited) · Report post Доброго времени суток. После пары программ на STM32 (я не очень опытный программист) решил попробовать отечественный контроллер 1986ВЕ4У. Написал на нём в своё время несколько программ и они работали. При открытии через год тех же программ, они работают (хотя появляются предупреждения вида (прил. 1). При попытке создать новый пустой проект появляются ошибки, которые начинаются с библиотечных (прил. 2). Кто-нибудь может подсказать, в чём тут дело? Допускаю, что может я что-то забыл. Edited September 10, 2021 by Fillya Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Darth Vader 0 Posted September 10, 2021 · Report post Для начала приведите в порядок дерево проекта. Там не должно быть категории CMSIS - у вас там нет никаких компонентов. Убериье её, раз не используете. Исключите файл .sct - это скрипт линкера, а не файл исходного кода. Уберите из дерева все явно включенные туда файлы-заголовки .h - им там не место. Они не являются самостоятельными единицами трансляции. Они сами автоматически подключатся к тем исходникам, куда они включены директивой #include. Они будут видны в разворачивающемся списке под соответствующими исходниками, если развернуть его нажатием на "+". Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Fillya 0 Posted September 10, 2021 (edited) · Report post 35 минут назад, Darth Vader сказал: Для начала приведите в порядок дерево проекта. Там не должно быть категории CMSIS - у вас там нет никаких компонентов. Убериье её, раз не используете. Исключите файл .sct - это скрипт линкера, а не файл исходного кода. Уберите из дерева все явно включенные туда файлы-заголовки .h - им там не место. Они не являются самостоятельными единицами трансляции. Они сами автоматически подключатся к тем исходникам, куда они включены директивой #include. Они будут видны в разворачивающемся списке под соответствующими исходниками, если развернуть его нажатием на "+". Я не могу убрать явно включённые файлы - они подключаются автоматически после включения библиотек ядра и периферии в Manage Run-time Environment и функции удаления для них нет. После компиляции они все, как вы и говорите, присутствуют в виде списка под соответствующим исходником. З.Ы. Убрал библиотеку Core, оставил только драйвера блока тактовых частот и портов ввода-вывода - ошибки те же самые, а категория CMSIS исчезла Edited September 10, 2021 by Fillya Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Forger 0 Posted September 10, 2021 · Report post 2 hours ago, Fillya said: Допускаю, что может я что-то забыл. В подобных случаях - навести порядок в заваленном хламом сарае - проще вытащить все оттуда наружу и переложить обратно в чистый от хлама сарай, соблюдая порядок, а не наваливая все кучей обратно. Другими словами - создайте новый проект, добавляя туда свои файлы, после каждого шага проверяя как все собирается. Так намного проще найти "виновника" беспорядка ) Разумеется, старый проект не трогать (забэкапить хотя бы). Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Darth Vader 0 Posted September 10, 2021 (edited) · Report post Закомментируйте строку #define MDR_LEGACY_SUPPORT 153 в файле MDR32F9Qx_config.h Все связанные с ним предупреждения уйдут. Останутся только ошибки. В файле MDR1986BE4.h в строке 22 должно быть extern "C" { а не extern { как сейчас. Исправьте и проверьте. Ошибки должны уйти. Edited September 10, 2021 by Darth Vader Дополнение Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Fillya 0 Posted September 11, 2021 · Report post 7 часов назад, Darth Vader сказал: Закомментируйте строку #define MDR_LEGACY_SUPPORT 153 в файле MDR32F9Qx_config.h Все связанные с ним предупреждения уйдут. Останутся только ошибки. В файле MDR1986BE4.h в строке 22 должно быть extern "C" { а не extern { как сейчас. Исправьте и проверьте. Ошибки должны уйти. Спасибо большое! Как вы и говорили, все трудности ушли. Касательно MDR_LEGACY я понимаю, что они хотят обновлять содержимое библиотек и внесли в версию предупреждения по этому поводу, а что касательно extern "C"? У меня нет старых версий, но кажется данное выражение там было. Можно услышать о том, почему такое включение сработало и предположение о том, почему его изначально там не было? Заранее благодарен за доп. ответы :) Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Darth Vader 0 Posted September 11, 2021 · Report post 7 часов назад, Fillya сказал: Касательно MDR_LEGACY я понимаю, что они хотят обновлять содержимое библиотек и внесли в версию предупреждения по этому поводу Там чуть сложнее. Они поменяли ряд имен макросов, функций, типов и т.д. Но старые можно оставить в действии, если определен этот макрос. Можно сделать поиск по всему проекту и увидеть, что чем там подменяется, когда он определён. 7 часов назад, Fillya сказал: что касательно extern "C"? У меня нет старых версий, но кажется данное выражение там было Да, было в версии 1.5.3. Именно такое для ВЕ4 - extern { . Т.е. ошибка была и там, ещё в версии 1.5.3. Если посмотреть все прочие аналогичные файлы для других МК Миландра из пака, то там эта строка написана правильно extern "C" { . Там никаких ошибок нет. Почему тогда, с паком версии 1.5.3 у вас ошибок не было, а сейчас они вдруг появились - не могу сказать. Лично я вообще не понимаю смысла квалификатора extern "C" применительно к именам типов и макросов. Это можно смело убрать и ничего не изменится. Данный квалификатор имеет смысл лишь применительно к объявлению функций (прототипам функций). По отношению к именам макросов, типов и даже объектов (переменные, константы встроенных и пользовательских типов) это бессмысленно. Что это говорит компилятору? Что этот тип является типом Си? Или что этот макрос - это Си-макрос? Или что эта переменная - это Си-переменная? Вобщем, глупость какая-то, которую нужно просто убрать. Напишите запрос в техподдержку Миландра, они должны оперативно исправить это. Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...