Jump to content

    

Darth Vader

Участник
  • Content Count

    457
  • Joined

  • Last visited

Everything posted by Darth Vader


  1. Защитный козырёк или экран от воды - чем не навесная деталь?
  2. Именно. Без понимания этого в программировании МК не обойтись. Начните с чего-нибудь простого. Или вот хороший цикл статей для начинающих. И книжка, как дополнение к этому курсу.
  3. Про С++ на МК я бы посоветовал посмотреть эти статьи, но это не для вашего нынещнего уровня. Сейчас вы там ничего не поймете. Пока изучайте язык и простейшие способы работы с регистрами периферии МК через указатели на структуры (CMSIS-стиль). А HAL, Cube-MX и прочие генераторы кода по функциональной схеме - отложите в сторону. С ними вы ничему не научитесь.
  4. Судя по вашим вопросам, вам просто язык надо узнать сначала. Так что начните хотя бы с этого. Найдите там главу про конструкторы и изучите. Тогда вопрос по реализации конструктора обретет ответ. Но появится много других.
  5. Реализация - описание тела функции, заключенное в блок (скобки { } ). Для конструктора класса её нет, хотя он вызывается. Какой код генерировать для конструктора - компилятор не знает. От вас требуется написать его. Очевидно, взять не думая там, где вы взяли этот код. Кстати, там, откуда вы его взяли, класс тоже объявляется в файле main.cpp, или это ваша инициатива?
  6. Нарисуйте электрическую схему для одного знакоместа. Разрисуйте его внутренности до уровня отдельных светодиодов каждого сегмента. Рассчитайте ток коллектора транзистора в цепи общего катода одного знакоместа. Рассчитайте токи каждого светодиода (сегмента) для случая отображения символа "1" и "8". Для расчета предположите, что общий ток катода всего знакоместа делится между всеми горящими сегментами поровну.
  7. Там чуть сложнее. Они поменяли ряд имен макросов, функций, типов и т.д. Но старые можно оставить в действии, если определен этот макрос. Можно сделать поиск по всему проекту и увидеть, что чем там подменяется, когда он определён. Да, было в версии 1.5.3. Именно такое для ВЕ4 - extern { . Т.е. ошибка была и там, ещё в версии 1.5.3. Если посмотреть все прочие аналогичные файлы для других МК Миландра из пака, то там эта строка написана правильно extern "C" { . Там никаких ошибок нет. Почему тогда, с паком версии 1.5.3 у вас ошибок не было, а сейчас они вдруг появились - не могу сказать. Лично я вообще не понимаю смысла квалификатора extern "C" применительно к именам типов и макросов. Это можно смело убрать и ничего не изменится. Данный квалификатор имеет смысл лишь применительно к объявлению функций (прототипам функций). По отношению к именам макросов, типов и даже объектов (переменные, константы встроенных и пользовательских типов) это бессмысленно. Что это говорит компилятору? Что этот тип является типом Си? Или что этот макрос - это Си-макрос? Или что эта переменная - это Си-переменная? Вобщем, глупость какая-то, которую нужно просто убрать. Напишите запрос в техподдержку Миландра, они должны оперативно исправить это.
  8. Закомментируйте строку #define MDR_LEGACY_SUPPORT 153 в файле MDR32F9Qx_config.h Все связанные с ним предупреждения уйдут. Останутся только ошибки. В файле MDR1986BE4.h в строке 22 должно быть extern "C" { а не extern { как сейчас. Исправьте и проверьте. Ошибки должны уйти.
  9. Для начала приведите в порядок дерево проекта. Там не должно быть категории CMSIS - у вас там нет никаких компонентов. Убериье её, раз не используете. Исключите файл .sct - это скрипт линкера, а не файл исходного кода. Уберите из дерева все явно включенные туда файлы-заголовки .h - им там не место. Они не являются самостоятельными единицами трансляции. Они сами автоматически подключатся к тем исходникам, куда они включены директивой #include. Они будут видны в разворачивающемся списке под соответствующими исходниками, если развернуть его нажатием на "+".
  10. System Viewer File

    Надо найти исходник - файл SVD, отредактировать его, скомпилировать, и получить на выходе новый исправленный SFR. Структура SVD файла и работа с ним хорошо описана тут. Читайте, пробуйте. Там внутри ничего сложного, обычный xml.
  11. Почитайте тут. В вашем случае, собственно, загрузчика не будет. Будет просто проект, содержащий все нужные вам функции. И константную структуру из указателей на них, размещённую по фиксированному адресу во флеш-памяти, а не в ОЗУ, как предлагается в этой статье.
  12. Да, нужна. Для этого опишите и создайте структуру (можно массив или объединение структуры и массива - насколько вам фантазии хватит) вашей таблицы векторов в любом исходном Си-файле проекта. Задайте ей аттрибут размещения в именованной секции. А эту секцию через линкер-скрипт разместите в адресном пространстве ITCMRAM. И не забудьте про требование к выравниванию адреса таблицы векторов. В рантайме, когда будете делать перенос, просто скопируете содержимое оригинальной таблицы в эту. С другой стороны, можно инициализировать эту таблицу векторов значениями в момент создания - заполнить её тем же, чем заполняется оригинальная таблица векторов в стартапе. Тогда к моменту входа в main() она уже будет содержать корректные значения. Останется лишь сообщить ядру её новый адрес.
  13. Падение напряжения на светодиоде посмотрите. Оно может оказаться бОльшим, чем вы думаете. До 4 В. И с большим разбросом.
  14. Удалите из папки проекта файл с настройками отладчика (что-то типа jlink_settings.ini) и при заходе в отладку среда у вас снова спросит ядро - выберете правильное.
  15. Самая ненужная и бесполезная их функция. Что она мне даёт? То, что теперь я возьму смартфон, запущу приложение, нажму в нем кнопку и чайник/утюг начнёт греться? А зачем это всё, если мне, чтобы налить себе кипятка в чашку надо дойти до него и взять его в руки? Зачем мне это, если, чтобы погладить штаны я должен дойти до утюга, взять его в руки и сам погладить им? Пока они сами не смогут всего этого сдедать, все их выходы в интернет - как собаке пятая нога. Вот только когда они всё это сами смогут, боюсь, люди им будут уже не нужны.
  16. 1. Зайти в отладку, поставить точку останова в подходящем месте, вывести в окно просмотра переменных требуемые 2. Сбросить и запустить программу 3. Когда выполнение программы остановится на точке останова - изменить значения требуемых параметров в окне просмотра переменных 4. После чего продолжить выполнение программы далее. Далее повторяем шаги 2-4, задавая каждый раз новые значения параметров, пока не подберете устраивающие вас значения.
  17. Это нормальная ситуация. Обычная. В любом случае, ВСЯ работа с периферией сводится к операциям чтения и записи по заранее известным адресам (адресам регистров) в едином адресном пространстве.
  18. Доступ к оборудованию осуществляется путем чтения/записи беззнаковых целых чисел по определенным адресам памяти (которые, в свою очередь, также являются беззнаковыми целыми числами) внутри единого линейного адресного пространства 4 ГБайт. Язык позволяет записать число по известному адресу. И прочитать оттуда же. Пусть по адресу 0x400А8000 размещается (отображается) 32-битный регистр какого-то периферийного устройства. Тогда: #include <stdint.h> // Создаём имя для доступа к целевому 32-битному регистру по адресу 0x400A8000 #define MY_TERGET_REG (*((volatile uint32_t*)0x400A8000)) MY_TERGET_REG = 0x00000100; // Запись значения 0x00000100 в 32-битный регистр по адресу 0x400A8000 uint32_t tmp_data = MY_TERGET_REG; // Чтение в tmp_data 32-битного слова из регистра по адресу 0x400A8000 Как видите, синтаксис языка позволяет работать с регистрами периферии, находящимися в едином адресном пространстве, напрямую.
  19. Может. Но мой вопрос был конкретно про 1986ВЕ9х, 1986ВЕ1Т, 1986ВЕ3Т. И ответ был именно про них, а не про, условно, 1309ЕНхх. На счет обычных рядовых сотрудников - на презентации и продвижение своей продукции совсем простые не ездят. Лично я разговаривал с нынешним исполнительным директором Мякочиным Ю.О. (тогда он занимал должность директора ЦП РЭА), и директором по маркетингу Новосёловым А.Ю. - см. кто есть кто. В своем интервью Михаил Павлюк прямо говорит о контрактном изготовлении пластин на иностранных фабриках: Ещё оттуда же: Вот ещё одно интервью: И ещё до-кучи: И опять: Так что доверия к словам гендиректора компании, которые он стабильно повторяет из одного интервью в другое, у меня больше, чем к статье на Википедии. Кто хочет ещё ссылок - поищите тут. Я остановился на шестой странице :) P.S. А это - просто хорошее автобиографическое интервью - как все начиналось, этапы становления компании, первые шаги, попытки, удачи/неудачи и пр.
  20. Опять же, не совсем ДЕЛАЕТ. Он их разработал. А пластины изготавливаются на китайской фабрике. Из личной беседы с сотрудниками на одном из семинаров по продвижению их продукции. Миландр - фаблесс компания. У них есть оборудование для отбраковки кристаллов, тестирования, распила пластин на кристаллы, корпусирования и испытания готовых микросхем. Но ПЛАСТИНЫ они заказывают на контрактных производствах в Китае и Тайване.
  21. Вопрос здесь в окупаемости производства. Без постоянной 100% загрузки производственной линии, затраты на фабрику не отбить. А внутрироссийский рынок не в состоянии обеспечить такую загрузку. Мы не потребляем микросхемы в таких количествах. Делать по контрактам за рубеж - не выдержим конкуренции по цене и срокам с Китаем. Плюс санкции. Микрон, например, решил проблему с загрузкой 180 нм производства, "подсадив" много кого на электронные билеты и транспортные карты. Чипы для них они как раз там делают. Это дает постоянный спрос и загрузку линии. Разрабатываются они в РФ, но пластины изготавливаются в Китае. Т.н. интегральная схема 2-го уровня.
  22. Передавайте 0х55 в цикле и по картинке на осциллографе измерьте длительность битового интервала.
  23. Попробуйте в .cpp файле убрать из ОПРЕДЕЛЕНИЯ функции extern "C" Оставить это только в объявлении (прототипе) в заголовочном .h файле. И что за ошибку выдает линкер?
  24. Да, я именно это и имел ввиду. Неправильно выразился. Сами обработчики могут быть раскиданы как угодно. Часть во флеше, часть в ОЗУ.
  25. Один вектор? Или несколько? Или всю таблицу векторов полностью?