Jump to content

    

Сергей Борщ

Модераторы
  • Content Count

    9047
  • Joined

  • Last visited

Everything posted by Сергей Борщ


  1. Чтобы не создавать по отдельной ветке на каждый мелкий вопрос, предлагаю обсуждать здесь всякие вопросы, касаемые работы в среде Eclipse. В крайнем случае можно будет при необходимости что-то "отпочковать" в отдельную ветку. Вопрос первый - как в перспективе Debug расположить окно с переменными, регистрами и т.д. вдоль всего правого края экрана сверху вниз? Вопрос второй - как заставить его показывать в окне регистров содержимое SPSR (для ARM), а также "затененных" регистров SP и LR (IAR их как-то показывает)? Вопрос третий - как поставить точку останова на конкретный адрес не перезапуская отладку? Про break *addres в Debug dialog->commands->'Run' commands я знаю, но это требует перезапуска отладки. На строку в исходнике поставить можно, а если мне надо поставить на конкретную команду, причем не дожидаясь пока эта команда попадет в окно дизассемблера? Вопрос четвертый - как его заставить показать в окне дизассемблера кусок с произвольного адреса или как "пролистать" дизассемблированный текст дальше вверх-вниз? Попутный вопрос - можно ли его заставить в этом окне показывать команды по порядку адресов - мне он часто показывает команды с пропусками или в причудливо перемешанном порядке. Вопрос пятый - (ARM) можно ли как-то сбросить ядро не перезапуская сеанс отладки? Т.е. легким движением перевести его в ARM, SYSTEM, записать в PC 0 и остановить его на нулевом адресе. Вопрос шестой - как его заставить запомнить, что в окне memory я хочу всегда видеть шестнадцатиричные цифры и не спрашивать об этом после каждого перезапуска отладки? При добавлении адреса в окно он этого дурацкого вопроса не задает. Вопрос седьмой - где ставится галочка "открывать преспективу Debug при запуске отладки"? Оно спросило когда-то при создании не то проекта, не то воркспейса, я ответил неправильно а теперь не могу найти где это изменить. Вопрос восьмой - работа с системой контроля версий. Что из каталога .metadata надо хранить в репозитории, а что создается само при старте среды? Хранить весь каталог не подходит - в нем после каждого старта среды создается куча новых файлов. Не хранить его тоже неудобно. Как я понял, в нем живут настройки Debug. Во всяком случае при переносе только проекта (без workspace) на другую машину настройки отладки пропадают (кто это придумал?? ведь в этих настройках указывается конкретный проект и выходной файл, т.е. эти настройки больше привязаны к конкретному проекту а не к workspace.)
  2. Инициализация констант по умолчанию

    Компилятор не обладает телепатией. Он привык "джентельменам верить на слово". Вы ему сказали, что содержимое данной переменной не меняется? Сказали. Он имеет полное право не вычитывать ее каждый раз из памяти, а вставить ее значение в код команды, если посчитает это более эффективным. Более того, он не только имеет право, но и делает так (в свое время обжегся в такой же ситуации - объявил серийный номер устройства без volatile и программировал его в нужную ячейку на последнем этапе производства. Долго разбирался, почему устройство не отзывается на свой адрес). Добавлено: и volatile ничего никуда не размещает.
  3. Инициализация констант по умолчанию

    Из тех, что сейчас у всех на слуху - STM32Lxxx. Были еще какие-то, сейчас уже не вспомню.
  4. Да. Он не меняется в течении всего времени выполнения программы. Увы, нет. Потому что при следующем запуске в "больших" машинах программа может быть загружена в другое место и адрес переменной будет другим.
  5. А он должен? Честно говоря никогда не обращал внимания, просто записывал сначала 1, потом ноль и фразу "It will be automatically cleared after reset." воспринимал как "будет автоматически очищен после аппаратного сброса". Возможно вы и правы, логика в ваших рассуждениях мне понятна. Может у вас что-то напутано с адресацией? Попробуйте вычитать какой-либо регистр, в котором после сброса должно быть ненулевое значение, например, RCR - считаете из него 0x08? Использовал Direct bus address mode, боюсь, мало чем смогу помочь.
  6. Инициализация констант по умолчанию

    Потому что они не "не инициализируемые". Они по-умолчанию проинициализированы нулем в соответствии со Стандартом языка. Не нравится - жалуйтесь в лигу сексуальных реформ коммитет по стандартизации языка C.
  7. Reset и NMI могут и прерывают, ибо имеют еще более высокий приоритет. Какое именно? А то я ставлю точку останова в обработчике HardFault и она там срабатывает. Что я делаю не так?
  8. Нету, к сожалению, никаких тайных имен. Просто любой пользователь может в любой момент изменить отображаемое имя. Оно же используется как имя пользователя при входе на форум. Вот такая вот дыра появилась после обновления движка. Много раз жаловались, но исправить, похоже, невозможно.
  9. Навык анализа листингов

    Смотрю при отладке постоянно. Потому что отлаживаюсь всегда с максимальной оптимизацией, однозначного соответствия между плюсовым и асемблерным кодом нет и отладчик просто не в состоянии адекватно бродить по исходнику. К тому же есть определенные сложности с установкой точек останова в шаблонах или встроенных (inline) функциях - у отладчика банально не хватает аппаратных точек останова на каждое место, куда встроен код из этой строки исходника. Но я не вижу никаких сложностей в просмотре листинга или дизассемблированного кода. Это как с иностранным языком - одно дело читать, другое писать, а говорить - вообще третье. Команд минимум, ADD, SUB, CMP, MOV, LD, ST и тому подобные понятны интуитивно, порядок операндов и типы адресации один раз в описании системы команд достаточно посмотреть, за подглядывание на незнакомые команды в описание системы команд не бьют.
  10. "Любая работа кажется простой в начале и в конце".
  11. Я тоже начал писать подобный комментарий, но в процессе подумал, что там по-другому только вектора прерываний и присваивание начальных значений указателям стека. Эту часть без ассемблера не сделать. Все остальное, собственно сам cstartup, отличаться не должно и может быть написано на Сях.
  12. Подгорел. Подтяните резистором к земле. Не поможет - или выкидывать, или городить схему на двух транзисторах.
  13. Не учите других жить. Делайте. CADiLO это как-нибудь переживет.
  14. STM32G070CB защита от записи страниц

    OBL_LAUNCH не для этого придуман?
  15. Так и делаю. В блоке настроек есть поле "версия". По нему прошивка определяет, подходит ли ей текущий набор настроек. Если версия отличается - конвертирует. Один минус - невозможно без потери настроек поверх записать ПО с более старой версией блока. С этим боролся только в одном изделии, там во внешней флешке была организована FAT12 и настройки хранились в текстовом файле. Более старая версия просто вычитывала из этого файла только нужные ей настройки. В ОЗУ создаю образ новых настроек со значениями по-умолчанию. Таким образом, одним вызовом memcpy() или приваиванием структуры все новые настройки получают значения по-умолчанию. Потом, вычитывая настройки из блока старой версии, заменяю ими одноименные в новом блоке. Далее, записываю этот новый блок на свое место во флеш. В случае несовпадения контрольной суммы блока настроек точно так же создаю образ в ОЗУ, одним вызовом memcpy() заполняю весь блок значениями по-умолчанию, переписываю во флеш. Ой, блин. Опять вторую страницу не заметил.
  16. Спасибо, теперь стало понятно.
  17. Подумал, что отстал от жизни. Пошел на грамота.ру, вбил слово "аттач". Оно нашлось только в орфографическом словаре. Во всех остальных, включая большой толковый словарь, это слово отсутствует. Значит и в русском языке такого слова тоже нет. Вы можете эту фразу пересказать русскими словами? Я знаю, что в английском языке есть слово "attach", означающее "присоединять". Вы его имели ввиду? Ладно, пусть вам лень переключать раскладку, но соединение чего с чем проверяется?
  18. Переведите, пожалуйста.
  19. Длина имени указателя IAR AVR

    Ответ на вопрос в названии темы: Это из стандарта 99 года.
  20. Длина имени указателя IAR AVR

    Браво. Это пять. Продолжайте сами создавать себе трудности и героически их преодолевать. На ум приходит переписка о варке яиц в микроволновке.
  21. stm32f407+lwip+eth+pppos

    У вас включен аппаратный расчет контрольной суммы в MAC. Надо что-то одно - или аппаратный в MAC, или программный в lwIP. Можно сделать так, чтобы программно считался для pppos, а аппаратно - для MAC. Для этого надо установить в 1 define LWIP_CHECKSUM_CTRL_PER_NETIF, включить программный подсчет (CHECKSUM_GEN_xxx, CHECKSUM_CHECK_xxx) и после инициализации интерфейса, работающего через MAC, отключить для него программный подсчет при помощи макроса NETIF_SET_CHECKSUM_CTRL(&NetIF, NETIF_CHECKSUM_DISABLE_ALL); Думаю, это вещи никак не связанные. Смотрите свою реализацию драйвера модема. Возможно, ваш оператор разрывает неактивное соединение, а вы некорректно это обрабатываете. Включайте вывод отладочной информации и штудируйте ее.
  22. И вы не находите это достаточным поводом промолчать?
  23. Бред. На PDP-11 И писать для них на ассемблере? Потому что компилятор С всего один и тот невменяемый (SDCC), а компиляторов C++ нет совсем.
  24. А... понятно. Устройства в локальной сети оператора за NAT. То есть невозможно с, скажем, произвольного умного телефона залезть прямо в устройство - все только через сервер. Теперь ясно.
  25. Слушайте, вот все пишут про эти PSM, eDRX, а как на этот модуль стучаться-то? Неужели оператор дает каждому модулю свой отдельный белый IPv4? Их же вроде не осталось уже, а обещают nb-iot в каждый чайник засунуть.