|
Список переменных проекта |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 24)
|
Nov 19 2007, 14:58
|

Местный
  
Группа: Свой
Сообщений: 232
Регистрация: 26-02-07
Из: г. Зеленоград
Пользователь №: 25 669

|
Цитата(Сергей Борщ @ Nov 19 2007, 17:23)  Адреса и список можно вытащить из .map - там они рассортированы по объектным файлам и сегментам. Можно анализировать сегменты, располагаемые в ОЗУ. Но информации о типах там нет. Вся интересующая вас информация хранится в объектном файле для отладчика. Но формат его закрыт. Можно посмотреть другие форматы, которые генерит линкер - coff, elf. Да sign и unsign надо различать, да и форма массивов ....... А формат cof где есть открытый
--------------------
Вяжешь - вой, а поедешь - песни пой. Между "хочу" и "можно" всегда есть дистанция
|
|
|
|
|
Nov 27 2007, 05:33
|
Участник

Группа: Новичок
Сообщений: 22
Регистрация: 29-08-07
Из: г.Копейск, Чел. обл.
Пользователь №: 30 121

|
Можно воспользоваться Proteus'ом, если ваш контроллер им поддерживается. Создать в нём простенький проект (один контроллер вставить без всякой обвязки). Сгенерить в IAR'е coff формат и подключить его к процессору в проекте Proteus'а. Запустить выполнение по шагам и там выведится список всех глобальных переменных с их адресами.
|
|
|
|
|
Nov 27 2007, 09:34
|

Местный
  
Группа: Свой
Сообщений: 232
Регистрация: 26-02-07
Из: г. Зеленоград
Пользователь №: 25 669

|
Цитата(-SD- @ Nov 27 2007, 09:33)  Можно воспользоваться Proteus'ом, если ваш контроллер им поддерживается. Создать в нём простенький проект (один контроллер вставить без всякой обвязки). Сгенерить в IAR'е coff формат и подключить его к процессору в проекте Proteus'а. Запустить выполнение по шагам и там выведится список всех глобальных переменных с их адресами. Спасибо за совет, но мне как раз нужно обойтись без дополнительных средств. У меня bootLoader объединен с просмоторщиком ресурсов контроллера и все это завязано на внешний терминал PC. Все это работает в фоне основной программы. Поэтому фокус с coff файлом наиболее подходит.
--------------------
Вяжешь - вой, а поедешь - песни пой. Между "хочу" и "можно" всегда есть дистанция
|
|
|
|
|
Nov 28 2007, 04:32
|
Участник

Группа: Новичок
Сообщений: 22
Регистрация: 29-08-07
Из: г.Копейск, Чел. обл.
Пользователь №: 30 121

|
Цитата(IJAR @ Nov 27 2007, 14:34)  Поэтому фокус с coff файлом наиболее подходит. В принципе это одно и тоже, т.к. Proteus просто "расшифрует" coff файл и покажет это на экране. При этом не надо будет разбираться с coff форматом. Но если не имели дело с Proteus'ом, надо будет его качать, устанавливать, чуть разобраться в нём. Не известно что легче.
|
|
|
|
|
Dec 3 2007, 09:08
|

Местный
  
Группа: Свой
Сообщений: 232
Регистрация: 26-02-07
Из: г. Зеленоград
Пользователь №: 25 669

|
Цитата(-SD- @ Nov 28 2007, 08:32)  В принципе это одно и тоже, т.к. Proteus просто "расшифрует" coff файл и покажет это на экране. При этом не надо будет разбираться с coff форматом. Но если не имели дело с Proteus'ом, надо будет его качать, устанавливать, чуть разобраться в нём. Не известно что легче.  Ну и что с того что на экран можно будет вызвать адреса переменных. Далее лазить по RAM в разные места? Хорошо если 1-2 переменных типа char, а обычно их больше. Идея то такая: на экране список переменных с их форматом, отметил галочками интеремующие - получил список с текущими значениями, нажал кнопку "Обновить" новые текущие значения. Правда с Cof файлом оказались проблемы: не хочет IAR 4.20 генерить его для ATmega процессоров а UBROF 8 пака не нащел описание формата. Так что пока идея в полном развале.
--------------------
Вяжешь - вой, а поедешь - песни пой. Между "хочу" и "можно" всегда есть дистанция
|
|
|
|
|
Dec 3 2007, 10:04
|

Местный
  
Группа: Свой
Сообщений: 232
Регистрация: 26-02-07
Из: г. Зеленоград
Пользователь №: 25 669

|
Цитата(Сергей Борщ @ Dec 3 2007, 13:25)  и не найдете: UBROF - закрытый формат имени ИАРа. А .elf иар умеет генерить для меги? В EXTRA OPTION Linker-a ставлю: -Oelf,as=my_Proj.elf при линковке получаю: Fatal Error[e92]: Cannot use the 'elf' output format with this cpu что, как я понимаю, означает что данный формат для такого типа CPU не поддерживается (у меня mega128)
--------------------
Вяжешь - вой, а поедешь - песни пой. Между "хочу" и "можно" всегда есть дистанция
|
|
|
|
|
Dec 3 2007, 23:07
|
Частый гость
 
Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930

|
Цитата(IJAR @ Nov 19 2007, 17:40)  IAR 4.20 Можно ли из файлов создаваемых компиляторм "вытащить" список имен переменных в RAM, их начальные адреса и формат? Скачайте среду разработки "Project-AVR/ESA" московской фирмы "Фитон" http://www.phyton.ru/cp1251/renevals/avr.shtml. После установки, там есть опция "загрузить программу для отладки". Грузить нужно в формате UBROF8. Далее, в меню есть опция "Просмотр\Распределение памяти", там есть всё что вас интересует.
|
|
|
|
|
Dec 4 2007, 07:22
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(AndreyKeil @ Dec 4 2007, 01:07)  Скачайте среду разработки "Project-AVR/ESA" московской фирмы "Фитон" http://www.phyton.ru/cp1251/renevals/avr.shtml. После установки, там есть опция "загрузить программу для отладки". Грузить нужно в формате UBROF8. Далее, в меню есть опция "Просмотр\Распределение памяти", там есть всё что вас интересует. С сайта производителя: Цитата Поддерживаются микроконтроллеры:
AT90S1200, AT90S2313, AT90S2323, AT90S2343, AT90S4414 (external SRAM), AT90S4414 (internal SRAM only), AT90S4433, AT90S4434, AT90S8515 (external SRAM), AT90S8515 (internal SRAM only), AT90S8534, AT90S8535, ATmega103, ATmega103 (external SRAM), ATmega161, ATmega161 (external SRAM), ATmega603, ATmega603 (external SRAM), ATtiny 10, ATtiny 11, ATtiny 12, ATtiny 15, ATtiny 22, ATtiny 28. Не думаю, что это старьё кем-то всерьёз используется (в серийных разработках). А новые МК, судя по всему, не поддерживаются.
|
|
|
|
|
Dec 4 2007, 08:59
|
Частый гость
 
Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930

|
Не знаю, что там говорит производитель - я не читал, но в этой оболочке поддерживаются процессоры: ATmega8,ATmega16,ATmega32,ATmega128. Эта среда, хоть и старая, но имеет возможности сравнимые с редактором SlickEdit. Из её возможностей мне нравится то, что можно загрузить код для отладки и пройтись по коду. При этом, можно в основном коде на "С" смотреть дизассемблер. Периферию не поддерживает. Просто - ход по коду с дизассемблером. Новые процы я научился добавлять (худо-бедно).
...ещё забыл, переменные, регистры спецфункций, локальные переменные можно менять в процессе отладки.
|
|
|
|
|
Dec 7 2007, 14:44
|

Частый гость
 
Группа: Свой
Сообщений: 152
Регистрация: 11-10-05
Из: Воронеж
Пользователь №: 9 491

|
Цитата(IJAR @ Nov 19 2007, 15:40)  IAR 4.20 Можно ли из файлов создаваемых компиляторм "вытащить" список имен переменных в RAM, их начальные адреса и формат? прошу прощения, что вмешиваюсь, а что, нельзя запустить в самом IAR симулятор, и там в окне watch посмотреть все, что нужно?
|
|
|
|
|
Dec 7 2007, 16:39
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(sergik_vrn @ Dec 7 2007, 16:44)  в самом IAR симулятор, и там в окне watch посмотреть все, что нужно? Симулятор! А вопрошавшему надо из работающего устройства через какой-то свой монитор считывать участки памяти и представлять их как реальные переменные: Цитата Идея то такая: на экране список переменных с их форматом, отметил галочками интеремующие - получил список с текущими значениями, нажал кнопку "Обновить" новые текущие значения.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Dec 10 2007, 12:12
|

Местный
  
Группа: Свой
Сообщений: 232
Регистрация: 26-02-07
Из: г. Зеленоград
Пользователь №: 25 669

|
Цитата(Сергей Борщ @ Dec 7 2007, 19:39)  Симулятор! А вопрошавшему надо из работающего устройства через какой-то свой монитор считывать участки памяти и представлять их как реальные переменные: Именно так и предполагается. Вообще то, если хорошо поковырять файлы *.map и *.lst , то данные о переменных можно вытащить (из *.map - имена и начальные адреса, а из *.lst - их типы и структуры) правда парсинг будет достаточно сложный
--------------------
Вяжешь - вой, а поедешь - песни пой. Между "хочу" и "можно" всегда есть дистанция
|
|
|
|
|
Dec 13 2007, 08:28
|

Частый гость
 
Группа: Свой
Сообщений: 152
Регистрация: 11-10-05
Из: Воронеж
Пользователь №: 9 491

|
Цитата(IJAR @ Dec 10 2007, 15:12)  Именно так и предполагается. Вообще то, если хорошо поковырять файлы *.map и *.lst , то данные о переменных можно вытащить (из *.map - имена и начальные адреса, а из *.lst - их типы и структуры) правда парсинг будет достаточно сложный что-то я, видимо, до конца не понял задачу. в исходном сообщении об этом ни слова Цитата IAR 4.20 Можно ли из файлов создаваемых компиляторм "вытащить" список имен переменных в RAM, их начальные адреса и формат? если задача еще актуальна, можно ли тогда ее уточнить? это разовая задача или типовая (то есть, нужен скрипт) ? почему информацию о структуре нельзя взять из исходных файлов?
|
|
|
|
|
Dec 13 2007, 12:38
|

Местный
  
Группа: Свой
Сообщений: 232
Регистрация: 26-02-07
Из: г. Зеленоград
Пользователь №: 25 669

|
Цитата(sergik_vrn @ Dec 13 2007, 11:28)  что-то я, видимо, до конца не понял задачу. в исходном сообщении об этом ни слова если задача еще актуальна, можно ли тогда ее уточнить? это разовая задача или типовая (то есть, нужен скрипт) ? почему информацию о структуре нельзя взять из исходных файлов? Из исходника взять данные конечно можно, но из файлов компилятора проще, легче парсить строки, поскольку в них информация структуирована, например в .map: Код ABSOLUTE Relative segment, address: DATA 0000010C - 0000010D (0x2 bytes), align: 0 Segment part 14. ROOT. ENTRY ADDRESS REF BY ===== ======= ====== bi_Wector_USER 0000010C
------------------------------------------------------------------------- NEAR_N Relative segment, address: DATA 00000182 - 00000195 (0x14 bytes), align: 0 Segment part 25. Intra module refs: main ENTRY ADDRESS REF BY ===== ======= ====== l_b 00000182 ------------------------------------------------------------------------- CODE Relative segment, address: CODE 0001E0D8 - 0001E0E3 (0xc bytes), align: 1 Segment part 26. ENTRY ADDRESS REF BY ===== ======= ====== __low_level_init 0001E0D8 ?call_low_level_init (?C_STARTUP) stack 1 = 00000000 ( 00000002 ) ------------------------------------------------------------------------- Понятно, что строку CODE и все что далее до строки "--------------------------------" можно пропустить, а вот NEAR_N или ABSOLUTE - заслуживают внимания - получим ИМЯ, РАЗМЕР, и НАЧАЛЬНЫЙ адрес переменной, далее по имени в *.lst найдем описание структуры, парсим и ее; далее обычная прогрммная эквилибристика => делаем файл описания переменных который будет читать терминальная программа по каждому обновлению ну а далее формирование списка и размеров смежных областей RAM(EEPROM) для чтения и их размер; далее запросы к контроллеру и далее форматный вывод на экран прочитанного из контроллера на экран.
--------------------
Вяжешь - вой, а поедешь - песни пой. Между "хочу" и "можно" всегда есть дистанция
|
|
|
|
|
Dec 13 2007, 12:51
|

Частый гость
 
Группа: Свой
Сообщений: 152
Регистрация: 11-10-05
Из: Воронеж
Пользователь №: 9 491

|
Цитата(IJAR @ Dec 13 2007, 15:38)  Из исходника взять данные конечно можно, но из файлов компилятора проще, легче парсить строки, поскольку в них информация структуирована, например в .map:
[..]
получим ИМЯ, РАЗМЕР, и НАЧАЛЬНЫЙ адрес переменной, далее по имени в *.lst найдем описание структуры, парсим и ее; далее обычная прогрммная эквилибристика => делаем файл описания переменных который будет читать терминальная программа по каждому обновлению ну а далее формирование списка и размеров смежных областей RAM(EEPROM) для чтения и их размер; далее запросы к контроллеру и далее форматный вывод на экран прочитанного из контроллера на экран. в общем, я не согласен только с утверждением, что .map проще парсить - в с структура не менее структурированная, впрочем, если coff открыть не удается, то все равно без парсинга .map (или .lst) не обойтись. в остальном - Вы вроде и ответили на свой вопрос
|
|
|
|
|
Dec 14 2007, 14:32
|

Местный
  
Группа: Свой
Сообщений: 232
Регистрация: 26-02-07
Из: г. Зеленоград
Пользователь №: 25 669

|
Цитата(sergik_vrn @ Dec 13 2007, 15:51)  в общем, я не согласен только с утверждением, что .map проще парсить - в с структура не менее структурированная, впрочем, если coff открыть не удается, то все равно без парсинга .map (или .lst) не обойтись. в остальном - Вы вроде и ответили на свой вопрос  Согласен что наметился путь решения, хотя и довольно тернистый. Что касается coff файла, то его не удается создать, а открыть то как раз получается, например coff файл для pic процессоров вполне разбираем.
--------------------
Вяжешь - вой, а поедешь - песни пой. Между "хочу" и "можно" всегда есть дистанция
|
|
|
|
|
Dec 17 2007, 09:54
|

Частый гость
 
Группа: Свой
Сообщений: 152
Регистрация: 11-10-05
Из: Воронеж
Пользователь №: 9 491

|
Цитата(Сергей Борщ @ Dec 14 2007, 18:52)  Если проект не на С++, то можно создать файл в формате IEEE-695. прошу прощения, если чего пропустил, а UBROF случайно не годится?
|
|
|
|
|
Dec 17 2007, 12:09
|

Частый гость
 
Группа: Свой
Сообщений: 152
Регистрация: 11-10-05
Из: Воронеж
Пользователь №: 9 491

|
Цитата(Сергей Борщ @ Dec 17 2007, 14:04)  Если у вас есть описание этого формата, и вы готовы поделиться этой информацией - то годится. как выяснилось, перечень типов записей в UBROF это не описание формата. тогда увы
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|