Перейти к содержанию
    

esaulenka

Свой
  • Постов

    1 454
  • Зарегистрирован

  • Посещение

  • Победитель дней

    2

Весь контент esaulenka


  1. Хорошо бы давать ссылки на эти "просторы". Сходу нашёл только http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0801g/zme1476352914494.html Это описание а) ассемблера от кейла, не стандартного набора команд и б) со ссылкой на ARMv8. У Вас IAR и ARMv4TDMI, т.е. "мимо" по обоим пунктам. Хочется undefined instruction - берёте какой-нибудь массив с мусором (пара строк из "Евгения Онегина" отлично подойдёт) и передаёте туда управление. Если не на первой инструкции, так на второй-третьей обязательно грохнется. А вообще, имхо, уровень "совсем-совсем начинающего" - это взять готовый стартап и моргать лампочкой в цикле в мейне. В запуске подобных камней особых трудностей нету, стартап примитивный. Но начинать лучше с готового - есть на что опереться. Имхо 2: если это "поиграться", купите отладку с STM'кой. И какие-то курсы-уроки на каждом углу, и само железо поудобнее (хотя тут спорно - косяков и у STM'ок полно), и в современных IDE работает "само".
  2. Мне кажется, надо весь этот класс по-человечески назвать, и всё. using Adc2_sel=PinPair_c<'B', 13, 14>; Adc2_sel::on2(); // почему 2 ?! Adc2_sel::off();
  3. Читать исходный вопрос. Если Вы думаете, что при перезапуске контроллера подтяжка не отключается - ну... Вы очень странно думаете. Проблема, возможно, в том, что виндовс как-то неадекватно себя ведёт при исчезновении COM-порта. Когда-то давно (в эпоху WinXP/Win7) разбирались. Если устройство пропало, потом появилось, в этот порт ничего записать уже нельзя (что логично, в принципе). Но и после того, как его закроешь, он как-то странно открывалось. Самое лучшее, что придумали - писишный программист сразу же после исчезновения устройства закрывал порт, при подключении пытался открыть обратно. Ну либо костыль: "дрыгать" коннект со стороны железки, если этот порт никто не открывает в течении N секунд. На win10 я с этой проблемой не сталкивался, вероятно, в майкрософте это поправили.
  4. Хост - STM, девайс - NRF. В качестве отправной точки брал https://github.com/adafruit/Adafruit_DAP, а они, в свою очередь, взяли реализацию у Алекса Тарадова. Я оттуда выкинул к чертям промежуточный уровень (сложить в буфер команду, а потом сразу же разобрать). Портирование собственно на STM примитивное - там требуются только функции "установить вход/выход", "установить 0/1", "прочитать" для трёх ножек. Выкладывать, пожалуй, не буду - это я на работе делал... И, да, надо сразу настраиваться, что оно медленное. Я уж не знаю, как устроен JFlash, но пара сотен кило зашивается две минуты. Вот, собственно, и собираюсь переделать - загружать этим методом в ОЗУ пару килобайт загрузчика, а дальше по UART'у...
  5. Я занимаю интерфейс только во время обновления прошивки. В этот момент - да, отладчик не работает (и я не проверял, будет ли в принципе работать обновление с подключенным отладчиком). Всё остальное время ноги хост-контроллера в z-state, и отладке особо не мешают (только как дополнительная нагрузка, разве что).
  6. Подниму тему. Сходу не смог разобраться, как читать-писать регистры контроллера. Задача: мелкий cortex-m через SWD подключен к "большому". Необходимо загрузить в RAM некий кусок кода и передать ему управление. Первая часть задачи готова (большое спасибо Александру (Алексею?) Тарадову - freedap работает и довольно быстро портируется). А вот дальше - проблемы: готовых примеров не вижу, описание ADI какое-то мутное (детально прописано, что это такое, но как оно сопрягается с ядром, я не разобрался)... UPDATE. А всё потому, что обращение к регистрам ядра там ооочень непрямое. Спасибо Energy Micro за документ и mcheb за ссылку. Код из приложения к AN0062: /********************************************************** * Writes a value to a CPU register in the target. * * @param reg * The register number to write to * * @param value * The value to write to the register **********************************************************/ void writeCpuReg(int reg, uint32_t value) { /* Wait until debug register is ready to accept new data */ waitForRegReady(); /* Write value to Data Register */ writeAP(AP_TAR, (uint32_t)&(CoreDebug->DCRDR)); writeAP(AP_DRW, value); /* Write register number ot Selector Register. * This will update the CPU register */ writeAP(AP_TAR, (uint32_t)&(CoreDebug->DCRSR)); writeAP(AP_DRW, 0x10000 | reg); }
  7. Стряхнул пыль с MDK 5.14 (другого нет, да и этот несколько лет не запускал). Ругается, как и положено. Действительно, нельзя верить всему, что пишут в интернетах :-( Извините.
  8. В линкере кейла существует какой-то странный костыль - подобный код собирается нормально. Какой магией он "схлопывает" два объекта в один, я не знаю. Была как-то тема "написал код в кейле, переношу в гцц, памагите, неработает!!", сам я вопрос не исследовал.
  9. Случаи разные бывают... Программно получить номер с этикетки через какой-то интерфейс (экран, провод, интернет) - очень часто пригождается и поддержке, и самим пользователям. Но вопрос с ремонтом надо предусмотреть сразу, да. Сейчас у нас изделия не очень сложные, и номерной (с гарантийником) только основной блок (можно считать, что он цельный - без паяльника не разбирается). Периферия простенькая, и какие-то номерки на ней в гарантийный талон не попадают (я даже не знаю, являются ли те цифры уникальными). А вот когда в изделии было две более-менее одинаковые по стоимости части, отдел ремонта регулярно хотел подменить серийник (записан во флешке контроллера, который находится только в одной части; вторая - дорогая, но "тупая"). А вот тут начинались проблемы... В общем, если у вас объемы хоть сколько-то заметны, попробуйте автоматизацию (идеи aaarrr и jcxz не новы, но по-прежнему актуальны). Да, автоматизация ломается, но люди на этой тупой однообразной работе ошибаются чаще.
  10. На грабли Advanced-control timer должен наступить каждый программист стм-ок, как мне кажется :-) Bit 15 MOE: Main output enable This bit is cleared asynchronously by hardware as soon as the break input is active. It is set by software or automatically depending on the AOE bit. It is acting only on the channels which are configured in output. оно?
  11. Всего-то лет 15 назад, да. Есть только стоны "у друга программатор Громова, он поддерживается только в алгоритм билдере". Одна (ОДНА!) минута поисков показывает, что это не так. Ладно, закрыли вопрос. Что Вам не задачу решать надо, а просто поговорить, уже понятно.
  12. Автор статьи производит впечатление весьма общительного человека. Проще ему лично написать, тут указано больше десятка разных способов связи. PS кстати, ссылка на гитхаб MIPSfpga там тоже есть.
  13. Потому что ресет хэндлер, очевидно. Контроллер перезапускается. Почему он это делает, надо разбираться. Судя по упоминанию вэйк-ап, возможно, он это делает из-за слишком глубокого режима энергосбережения. PS судя по слову RxCpltCallback, там ещё и кубо-хал. Работать одновременно через регистры и хал с одной и той же периферией - прямейший путь к граблям. Оно там уже байтик из USART->DR вычитало, и вам, возможно, уже отдают следующий. Или этот же. Как повезёт...
  14. Первая же ссылка в гугле по словам "программатор Громова" - со статьёй на изиэлектронике об этом самом программаторе и некоей утилите UniProf.
  15. Если б не было, они б горели как спички. Тексас, например, английским языком пишет, что при напряжении на выходе ниже нуля или выше питания максимальный допустимый ток - 20 мА. Т.е. диоды есть, но не особо мощные. На HC597, впрочем, точно такое же ограничение.
  16. Подробнее опишите, что вы хотите сделать. (глядя в хрустальный шар): Вы хотите запустить связку эклипс + тулчейн (это компилятор, линкер, опционально - отладчик, какие-то вспомогательные утилиты). Вариант первый: взять обычный эклипс CDT, самостоятельно написать мейк-файл, сказать клипсе "запускай мэйк, больше ничего не делай". Отлаживаться неудобно (нужно знать ещё и систему команд GDB). Вариант второй: возможно, кто-то написал нужный плагин к эклипсу (это java-приложение, которое общается с внешним миром через API клипсы. Визуально выглядит как несколько дополнительных окошек и пунктов меню в эклипсе). И уже этот плагин умеет вызывать компилятор, запускать отладчик и проч. Вообще, рекомендую внимательно почитать раздел инструкций вот тут: https://gnu-mcu-eclipse.github.io/
  17. Из гугла, очевидно. Первая ссылка по запросу "удельная расчетная электрическая нагрузка электроприемников квартир жилых зданий" (половину запроса не я вбил, а гугловское автодополнение). От какого фонаря эта таблица составлялась в не таком уж далёком 2003 году - вопрос интересный, конечно... PS нафлудили знатно... Началось с вопроса "хочу на кухне из подножных материалов что-нибудь соорудить", закончилось какими-то промышленными частотниками на 100500 киловатт...
  18. Насколько я понимаю (посмотреть внимательно RTX руки так и не дошли), эта osMutexNew() использует heap. Размер хипа какой? Увеличить пробовали?
  19. Для надёжности надо провода перерезать, чтоб уж точно ничего не засиралось. Нормально функционирующий CAN-передатчик с установленным флажком auto retransmit передаёт в шину ровно ОДНО сообщение, получает подтверждение и замолкает, пока его не попросят передать что-то ещё. Пока нет этого банального понимания функционирования шины (и механизма разрешения коллизий в этой самой шине), разговаривать дальше смысла немного...
  20. Зная остальные темы jenya7, необходимо предполагать наиболее дурацкую ошибку. И, кончено же, она есть: CAN_InitStructure.CAN_NART = ENABLE; //ENABLE DISABLE NO AUTOMATIC RETRANSMITTION
  21. Посмотрел asm. Что-то мне не нравится флажок LCCNENSE_NO. Во-первых, название плохое, а во-вторых, какие-то при его выставлении манипуляции странные происходят. Где он проверяется, правда, я не нашёл. И какой-то FL_LCCN непонятный встречается... Ну и я правильно понял, что начальная калибровка выполняется с помощью какой-то программы с ПК? Такое подозрение, что она в EEPROM пишет какую-то константу в этот момент (специфичную для данной конкретной версии прошивки). PS плотно с 51-ми никогда не работал, бог миловал...
  22. Распишите подробнее, пожалуйста. Я попробовал посчитать - у меня погрешность на несколько порядков меньше получается...
  23. Дурацкая идея - автор исходного прибора сделал какую-то самопальную защиту. Если не сходится контрольная сумма, иногда оно что-то где-то будет портить. Для проверки - поменять ОДНУ букву (или даже цифру), проверить, что в бинарнике поменялся только один байт, и включать...
  24. Делать какие-то выводы, прочитав два слова из полусотни - тоже признак... не очень умного человека.
  25. Ого! Круто! Мы пока что возимся с оригинальным стеком, большого желания писать полностью своё пока нет. Тем более, планов громадьё, хочется почти полный набор "фишек" протокола. Но на определённые грабли уже наступили, разбираемся...
×
×
  • Создать...