-
Постов
7 287 -
Зарегистрирован
-
Посещение
-
Победитель дней
12
Сообщения, опубликованные haker_fox
-
-
2 minutes ago, jcxz said:
Тогда ведь вы не сможете свободно изменить адрес расположения вашего загружаемого для отладки образа.
Так отладка запускается для приложения. А отладчику указывается адрес начала загрузчика. Т.е. при отладке приложения этот ключ сначала позволяет запустить загрузчик.
-
Добрый день, коллеги!
Данный вопрос не от меня, а от уважаемого мной коллеги (у него нет возможности задать вопрос самому). Именно поэтому я по его просьбе задаю его и задаю не в оффтопике, хотя чувствую, что там этому вопросу самое место. Тем не менее, коллега имеет высшее образование, а я, возможно, что-то не понимаю в физике. Также прошу модераторов данного раздела дать шанс этой теме побыть здесь в текущем разделе)
Итак, есть текущий способ измерения каких-то (неважно) параметров трубопровода выполняется по следующей схеме:
Я стрелочками показал, что через вольтметр течёт ток, как и должно быть. Т.е. имеется замкнутый контур.
Коллега утверждает, что можно делать так:
Т.е. заменить гальваническую связь радиосвязью (неважно, какая частота, протокол и т.п.).
Вопрос: как-то это вообще возможно? Может быть есть какие-то ссылки на статьи, опытные работы, или иные принципы, которые не имеют широкой огласки?
P.S. Заранее благодарю)
-
@VladislavS, @makc, коллеги, я понял, что Вы имеете в виду. Но в наших приложениях "ремап" таблицы векторов не требуется. По крайней мере за 10 лет мы эту возможность не использовали, кроме случая с загрузчиком. Если понадобится, то приложение это сделает, модифицировав VTOR.
-
17 minutes ago, VladislavS said:
Почему приложение само себе VTOR не устанавливает? Ведь только оно знает где у него таблица векторов.
Насколько я понимаю, загрузчик тоже обязан знать положение таблицы векторов приложения, иначе как он запустит это приложение?
-
Выспался
На свежую голову докладываю!
Итак, стёр полностью МК. Зашил приложение с адреса 0x08008000. Начальный (стартовый адрес) процессора: 0x08000000 (GD32F450ZKT6). Запускаю отладку, старт идёт с адреса приложения, т.е. с 0x08008000. С адреса 0x08000000 записаны 0xff, там ПО выполняться не может: по адресу 0x08000004 находится адрес 0xffffffff. Т.е. IAR - действительно умный!
Записываю в микроконтроллер загрузчик с адреса 0x08000000. Приложение остаётся записанным. Приложение запускается загрузчиком без отладки, как и должно быть.
Зашиваю приложение под отладкой. По адресу 0x08000004 находится адрес начала программы загрузчика.
Ставлю туда точку останова:
И никогда сюда не попадаю, отлаживая приложение. Вернее, сейчас отлаживать приложение бесполезно, т.к. VTOR = 0. Но всё же оно запускается до возникновения первого прерывания, которое реально обрабатывается, и неправильно, в области таблицы векторов загрузчика из-за некорректного VTOR.
Итого, имею зашитые загрузчик и приложение. Под отладкой стартует сразу приложение. Без отладки, естественно, всё как и положено работает в штатном режиме.
Добавляю отладчику ключ, указывающий расположение таблицы векторов. И говорю ему, что она расположена по адресу 0x08000000, т.е. в области записанного мной загрузчика.
Запускаю отладку приложения.
Сразу попадаю на адрес начала загрузчика!
Нажимаю F5, запускаю исполнение ПО и... всё работает! Т.е. мой загрузчик запускает приложение, VTOR имеет адекватное значение 0x08008000.
Бррр.... Урра!
-
Just now, jcxz said:
PS: Никаких специальных телодвижений не делал - IAR у меня по умолчанию так делает (IAR 7.80.4 for ARM).
Вы меня окончательно смутили)))) У меня 9.30.1 и за сегодняшний день о вёл себя по-разному. При этом в экспериментах я стирал всю память FLASH утилитой SEGGER J-Flash Lite... Ладно, сегодян у меня уже вечер. Завтра на свежую голову всё перепроверю.
-
9 minutes ago, dimka76 said:
Интересно, а Eclipse + GCC так можно ?
С ними не работаю. Увы, ответить тоже нечего...
-
8 minutes ago, Сергей Борщ said:
Поскольку ИАР тоже использует формат .elf - наверняка в нем тоже есть подобный механизм.
На текущий момент не знаю, что Вам ответить) С одной стороны, после перезагрузки компьютера с IAR всё стало работать ожидаемо. С другой стороны появилась альтернатива в виде отладки двух образов: и загрузчика и приложения. Понаблюдаю за ситуацией.
-
18 minutes ago, Сергей Борщ said:
Странные проблемы.
Согласен. Я и сам так думал. И ожидал такого поведения, т.к. микроконтроллеру ничего не остаётся, как начать исполнять код, где уже зашит мой загрузчик. Тем не менее, не получив такого поведения (VTOR был равен 0x00), я подумал, что может быть что-то изменилось в отладчике с выходом версии IAR 9.10. Но сейчас, перезагрузив компьютер, и запустив IAR заново, я получил ожидаемое поведение! Но все же подход, предложенный уважаемым @makc мне тоже интересен и полезен!
-
21 minutes ago, makc said:
видели?
Великолепно! То, что надо! Даже больше, чем я ожидал! Проверил, всё работает!
P.S. Искал в документации, поставляемой с инструментарием (в .pdf файлах). Оказывается, много полезной информации и в онлайне.
-
Добрый день, коллеги!
Кучу документации от IAR бегло прочитал, но не могу найти зацепки. Прошу помощи.
Есть загрузчик. Свой. Рабочий. Он зашит в микроконтроллер. Есть приложение. В процессе разработки, более-менее работает. Есть возможность указать отладчику шить приложение в своё адресное пространство, как обычно, но запускаться с другого адреса: адреса загрузчика? Т.е. я хочу, чтобы приложение под отладкой запускалось из под моего загрузчика? Или такое вообще невозможно?
Либо, как указать отладчику модифицировать регистр VTOR под перемещённую таблицу векторов моего приложения (если такой вариант проще и вышеозвученный вопрос нереализуем)? Я понимаю, что в приложении можно насильно записывать в регистр VTOR адрес из скрипта линкера *.icf, но выглядит это, ИМХО, как-то немного некрасиво... Понимаю также, что отлаживать приложение можно без смещения, т.к. как единственное на микроконтроллере. Но хотелось бы так, как я описал выше.
Заранее всем спасибо)
-
Модератор: @EdgeAligned, пожалуйста, прочитайте правила 2.1.в.
-
1 minute ago, stells said:
то надо и телефонную зарядку в защитных перчатках в телефон засовывать
У телефонной зарядки нет третьего контакта. Поэтому, не нужно. Но и в ванную с телефонной зарядкой всё же залезать не нужно) У осциллографов третий контакт предусмотрен.
2 minutes ago, stells said:не ощущал их влияние
Полагаю, что на чутьё здесь надеяться нельзя. Нужны измерения по каким-то методикам...
-
22 minutes ago, tgruzd said:
всё заливается отладчиком и в целом удобно получается
Я вот тоже подумал, если отладчик имеет доступ к шине AHP/APB, то какая разница контроллеру внешней памяти кто его программирует? Вы подтвердили мою догадку) Спасибо!
-
1 minute ago, Maxim_S said:
Давно существуют приборы с гальванически развязанными каналами, например Fluke 199 и подобные
Конечно существуют. У нас даже на работе есть такой оциллограф. Но вопрос всё же был в другом: почему именно сделано так, как сделано в большинстве моделей. Но ответы уже получены выше по теме.
-
5 hours ago, Mysteo said:
Или флешку придется отдельно программировать ?
Скорее всего именно так. Только не обязательно программировать. Можно поднять FatFs и хранить данные на флешки в виде обычных фалов. А само устройство может предоставлять доступ к диску, например, USB MSC. Мы именно так и делаем в наших приборах. На этапе настройки настройщик просто загружает необходимые данные на "диск". Но всё это сделано не ради загрузки данных, просто прибор в любом случае должен предоставлять пользователю возможность работать виртуальным диском. У такого подхода есть и недостаток: FatFS неустойчива к сбоям, как и любая (?) FAT.
5 hours ago, Mysteo said:Или можно будет просто линковщику указать адрес внешней флэши и все нормально зальется ?
Обычно контроллер SPI NOR позволяет включить память в общее адресное пространство только для чтения. Для программирования нужно уметь отправлять команды. Вряд ли отладчик на такое способен, но здесь могу ошибаться.
5 hours ago, Mysteo said:SDRAM как я понимаю более требовательна к ПП
Её используем. Это дешевле, чем SRAM. ПП четыре слоя. Особых заморочек в трассировке не наблюдал: проводники как можно короче, земляной полигон, конденсаторы по питанию. Частота 100 МГц.
-
Кстати, классный документ от старой доброй HP! Может быть кому-то будет полезен) После его прочтения и стали возникать дополнительные вопросы...
-
1
-
-
Добрый день, коллеги!
Понадобилось в очередном проекте убрать почти все драйвера устройств, обработчики прерываний которых прописаны в startup-файле. И не получается этого сделать, т.к. с использованием методов класса нет аналога __weak-функций.
Вот фрагмент файла:
Spoilerextern unsigned char CSTACK$$Limit; #pragma location = ".intvec" extern "C" const __root VectorEntry_t __vector_table[256] = { {.pStack = &CSTACK$$Limit }, // stack VectorNum 0 {.pHandler = reset }, // reset VectorNum 1 defaultCoreHandler, // NMI VectorNum 2 hardFaultHandlerAsm, // HardFault VectorNum 3 defaultCoreHandler, // MemManage VectorNum 4 defaultCoreHandler, // BusFault VectorNum 5 defaultCoreHandler, // UsageFault VectorNum 6 defaultCoreHandler, // Reserved VectorNum 7 defaultCoreHandler, // Reserved VectorNum 8 defaultCoreHandler, // Reserved VectorNum 9 defaultCoreHandler, // Reserved VectorNum 10 vPortSVCHandler, // SVC VectorNum 11 defaultCoreHandler, // Reserved VectorNum 12 defaultCoreHandler, // Reserved VectorNum 13 xPortPendSVHandler, // PendSV VectorNum 14 xPortSysTickHandler, // SysTick VectorNum 15 defaultCoreHandler, // your irq handler VectorNum 16, IRQ00 defaultCoreHandler, // your irq handler VectorNum 17, IRQ01 defaultCoreHandler, // your irq handler VectorNum 18, IRQ02 defaultCoreHandler, // your irq handler VectorNum 19, IRQ03 defaultCoreHandler, // your irq handler VectorNum 20, IRQ04 defaultCoreHandler, // your irq handler VectorNum 21, IRQ05 defaultCoreHandler, // your irq handler VectorNum 22, IRQ06 defaultCoreHandler, // your irq handler VectorNum 23, IRQ07 defaultCoreHandler, // your irq handler VectorNum 24, IRQ08 defaultCoreHandler, // your irq handler VectorNum 25, IRQ09 defaultCoreHandler, // your irq handler VectorNum 26, IRQ10 defaultCoreHandler, // your irq handler VectorNum 27, IRQ11 defaultCoreHandler, // your irq handler VectorNum 28, IRQ12 defaultCoreHandler, // your irq handler VectorNum 29, IRQ13 defaultCoreHandler, // your irq handler VectorNum 30, IRQ14 defaultCoreHandler, // your irq handler VectorNum 31, IRQ15 defaultCoreHandler, // your irq handler VectorNum 32, IRQ16 defaultCoreHandler, // your irq handler VectorNum 33, IRQ17 defaultCoreHandler, // your irq handler VectorNum 34, IRQ18 defaultCoreHandler, // your irq handler VectorNum 35, IRQ19 defaultCoreHandler, // your irq handler VectorNum 36, IRQ20 defaultCoreHandler, // your irq handler VectorNum 37, IRQ21 defaultCoreHandler, // your irq handler VectorNum 38, IRQ22 defaultCoreHandler, // your irq handler VectorNum 39, IRQ23 defaultCoreHandler, // your irq handler VectorNum 40, IRQ24 defaultCoreHandler, // your irq handler VectorNum 41, IRQ25 defaultCoreHandler, // your irq handler VectorNum 42, IRQ26 defaultCoreHandler, // your irq handler VectorNum 43, IRQ27 defaultCoreHandler, // your irq handler VectorNum 44, IRQ28 defaultCoreHandler, // your irq handler VectorNum 45, IRQ29 defaultCoreHandler, // your irq handler VectorNum 46, IRQ30 defaultCoreHandler, // your irq handler VectorNum 47, IRQ31 defaultCoreHandler, // your irq handler VectorNum 48, IRQ32 defaultCoreHandler, // your irq handler VectorNum 49, IRQ33 defaultCoreHandler, // your irq handler VectorNum 50, IRQ34 SpiDrv::MakeIsr<SpiDrv::Num::N0>, // your irq handler VectorNum 51, IRQ35 SpiDrv::MakeIsr<SpiDrv::Num::N1>, // your irq handler VectorNum 52, IRQ36 UsartDrv::MakeIsr<UsartDrv::Num::N0>, // uSart0 VectorNum 53, IRQ37 UsartDrv::MakeIsr<UsartDrv::Num::N1>, // uSart1 VectorNum 54, IRQ38 UsartDrv::MakeIsr<UsartDrv::Num::N2>, // uSart2 VectorNum 55, IRQ39
Внизу, да и далее по файлу, находятся обработчики прерываний, которые ещё и прописаны (для ускорения вызова) в заголовчных файлах каждого драйвера. Вообще, startup-файл на Си++ и был изначально нужен, чтобы красиво вызывать обработчики, но не предполагалось, что их не будет. А в текущем проекте их нет. И как выйти из ситуации - непонятно. Прямо хоть возвращайся к старому-доброму вызову обработчиков в Си-стиле с модификатором слабого связывания (линковки) __weak. В таком случае, если какой-то драйвер (файл на Си или Си++) не откомпилирован, т.е. отсутствует в проекте, линковщик подставит вызов функции по умолчанию. Но может быть есть какой-то красивый способ сделать подобное в Си++ с методами класса?
-
49 minutes ago, haker_fox said:
1. А если подключить осциллограф через разделительный трансформатор с малой проходной ёмкостью (PE осциллографа естественно никуда не подключено), будут ли какие-то побочные эффекты от такого включения?
Прочитал. Будут. Особенно, если "тыкаться" таким отвязанным осиллографом в сетевой источник питания. На экранах BNC осциллографа будет потенциально опасное напряжение.
6 minutes ago, dOb said:Многие мультиметры так сделаны.
Многие. А Вы видели исключения? Т.е. мультиметры, у которых LO соединён с заземлением? Даже интересно стало...
2 minutes ago, vervs said:Скорее всего из соображений электробезопасности.
Понял.
2 minutes ago, vervs said:2. маловероятно
Понял. Спасибо!
-
1 minute ago, novikovfb said:
Еще раз. За отдельные деньги можете приобрести дифференциальный щуп или осциллограф с дифференциальным входом.
Я знаю. Меня лишь интересует, почему сделано так, как сделано. Осциллограф с батарейным питанием имеется. Не в этом проблема.
Дополнительно:
1. А если подключить осциллограф через разделительный трансформатор с малой проходной ёмкостью (PE осциллографа естественно никуда не подключено), будут ли какие-то побочные эффекты от такого включения?
2. Как ухдшаться метрологические свойства осциллографа при отсуствии его заземления?
-
41 minutes ago, novikovfb said:
Даже настольный мультиметр на это не способен без изрядной посторонней помощи.
И тем не менее, они же есть. Ни одного не видел, у которого клемма LO была связана с заземлением.
42 minutes ago, novikovfb said:Почему - сложнее схемотехника (емкость между общим проводом и корпусом, а также - цепями питания делает свое черное дело).
Т.е. осциллограф стоит особняком из-за того, что его измерительные схемы работают на высоких частотах, которых нет в мультиметре?
-
Добрый день, коллеги!
Собственно, вопрос в теме. По крайней мере у большинства осциллографов, которые я видел.
В то же время, у настольных мультиметров, питаемых от сети, измерительная часть с входными разъёмами гальванически изолирована от Earth.
Не могу найти объяснения этому. Логично было бы делать измерительную часть осциллографов отвязанную от заземления...
-
3 minutes ago, Aries said:
Вы предлагаете оставить как есть ?
1. Ничего не предлагаю. Лишь дал объяснение ругани линкера.
2. Я не разбираюсь в микроконтроллерах MSP430.
3. Вам нужно разобраться самому, либо подождать помощи квалицифрованных коллег на форуме.
4. Вы даёте крайне мало информации. Вы пишите: "подменил строку". Но непонятно, какая была строка? Что Вы заменили...
-
Вроде бы сообщение линкера очевидно: выход за пределы памяти. Поскольку линковщик занимается только распределением по памяти собранного образа, то явно что-то не помещается в эту память.
Запуск приложения с иного адреса
в IAR
Опубликовано · Пожаловаться
Гм. Здесь вопрос как раз удобства. Вообще, мне вчера пришла мысль ещё до создания этой темы, что VTOR и вообще все процедуры с манипуляцией таблицы векторов нужно делать в приложении. Это более универсальный подход. Но сейчас уже лень что-то переделывать. С другой стороны, что будет являться точкой входа в приложение? Разве не сама таблица векторов? Ведь, даже если она будет размещена в ОЗУ, то она где-то хранится после выключения питания. Поэтому, первые два адреса таблицы (стэк и старт) всё равно есть. Или я что-то не учитываю?