реклама на сайте
подробности

 
 
> Список переменных проекта
IJAR
сообщение Nov 19 2007, 12:40
Сообщение #1


Местный
***

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



IAR 4.20
Можно ли из файлов создаваемых компиляторм "вытащить" список имен переменных в RAM,
их начальные адреса и формат?


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 24)
Сергей Борщ
сообщение Nov 19 2007, 13:23
Сообщение #2


Гуру
******

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



Цитата(IJAR @ Nov 19 2007, 14:40) *
IAR 4.20
Можно ли из файлов создаваемых компиляторм "вытащить" список имен переменных в RAM,
их начальные адреса и формат?
Адреса и список можно вытащить из .map - там они рассортированы по объектным файлам и сегментам. Можно анализировать сегменты, располагаемые в ОЗУ. Но информации о типах там нет. Вся интересующая вас информация хранится в объектном файле для отладчика. Но формат его закрыт. Можно посмотреть другие форматы, которые генерит линкер - coff, elf.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
IJAR
сообщение Nov 19 2007, 14:58
Сообщение #3


Местный
***

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



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


Да sign и unsign надо различать, да и форма массивов .......
А формат cof где есть открытый


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 19 2007, 15:32
Сообщение #4


Гуру
******

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



Цитата(IJAR @ Nov 19 2007, 16:58) *
А формат cof где есть открытый
Гугля выдает кучу ссылок: http://www.google.com/search?client=opera&...-8&oe=utf-8


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
IJAR
сообщение Nov 20 2007, 11:30
Сообщение #5


Местный
***

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



Цитата(Сергей Борщ @ Nov 19 2007, 19:32) *
Гугля выдает кучу ссылок: http://www.google.com/search?client=opera&...-8&oe=utf-8


Спасибо, буду ковырять Coff формат.


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
-SD-
сообщение Nov 27 2007, 05:33
Сообщение #6


Участник
*

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



Можно воспользоваться Proteus'ом, если ваш контроллер им поддерживается.
Создать в нём простенький проект (один контроллер вставить без всякой обвязки). Сгенерить в IAR'е coff формат и подключить его к процессору в проекте Proteus'а.
Запустить выполнение по шагам и там выведится список всех глобальных переменных с их адресами.
Go to the top of the page
 
+Quote Post
IJAR
сообщение Nov 27 2007, 09:34
Сообщение #7


Местный
***

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



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


Спасибо за совет, но мне как раз нужно обойтись без дополнительных средств.
У меня bootLoader объединен с просмоторщиком ресурсов контроллера и все это
завязано на внешний терминал PC. Все это работает в фоне основной программы.
Поэтому фокус с coff файлом наиболее подходит.


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
-SD-
сообщение Nov 28 2007, 04:32
Сообщение #8


Участник
*

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



Цитата(IJAR @ Nov 27 2007, 14:34) *
Поэтому фокус с coff файлом наиболее подходит.


В принципе это одно и тоже, т.к. Proteus просто "расшифрует" coff файл и покажет это на экране. При этом не надо будет разбираться с coff форматом. Но если не имели дело с Proteus'ом, надо будет его качать, устанавливать, чуть разобраться в нём.
Не известно что легче. smile.gif
Go to the top of the page
 
+Quote Post
IJAR
сообщение Dec 3 2007, 09:08
Сообщение #9


Местный
***

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



Цитата(-SD- @ Nov 28 2007, 08:32) *
В принципе это одно и тоже, т.к. Proteus просто "расшифрует" coff файл и покажет это на экране. При этом не надо будет разбираться с coff форматом. Но если не имели дело с Proteus'ом, надо будет его качать, устанавливать, чуть разобраться в нём.
Не известно что легче. smile.gif


Ну и что с того что на экран можно будет вызвать адреса переменных.
Далее лазить по RAM в разные места? Хорошо если 1-2 переменных типа char,
а обычно их больше. Идея то такая: на экране список переменных с их форматом,
отметил галочками интеремующие - получил список с текущими значениями,
нажал кнопку "Обновить" новые текущие значения.

Правда с Cof файлом оказались проблемы: не хочет IAR 4.20 генерить его для ATmega процессоров
а UBROF 8 пака не нащел описание формата. Так что пока идея в полном развале.


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 3 2007, 09:25
Сообщение #10


Гуру
******

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



Цитата(IJAR @ Dec 3 2007, 11:08) *
а UBROF 8 пака не нащел описание формата.
и не найдете: UBROF - закрытый формат имени ИАРа. А .elf иар умеет генерить для меги?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
IJAR
сообщение Dec 3 2007, 10:04
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 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)


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
AndreyKeil
сообщение Dec 3 2007, 23:07
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 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. Далее, в меню есть опция "Просмотр\Распределение памяти", там есть всё что вас интересует.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Dec 4 2007, 07:22
Сообщение #13


Шаман
******

Группа: Модераторы
Сообщений: 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.

Не думаю, что это старьё кем-то всерьёз используется (в серийных разработках). А новые МК, судя по всему, не поддерживаются.
Go to the top of the page
 
+Quote Post
AndreyKeil
сообщение Dec 4 2007, 08:59
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 96
Регистрация: 16-11-05
Из: г.Екатеринбург
Пользователь №: 10 930



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

...ещё забыл, переменные, регистры спецфункций, локальные переменные можно менять в процессе отладки.
Go to the top of the page
 
+Quote Post
sergik_vrn
сообщение Dec 7 2007, 14:44
Сообщение #15


Частый гость
**

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



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

прошу прощения, что вмешиваюсь, а что, нельзя запустить в самом IAR симулятор, и там в окне watch посмотреть все, что нужно?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 7 2007, 16:39
Сообщение #16


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
IJAR
сообщение Dec 10 2007, 12:12
Сообщение #17


Местный
***

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



Цитата(Сергей Борщ @ Dec 7 2007, 19:39) *
Симулятор! А вопрошавшему надо из работающего устройства через какой-то свой монитор считывать участки памяти и представлять их как реальные переменные:


Именно так и предполагается.
Вообще то, если хорошо поковырять файлы *.map и *.lst , то данные о переменных
можно вытащить (из *.map - имена и начальные адреса, а из *.lst - их типы и структуры)
правда парсинг будет достаточно сложный


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
sergik_vrn
сообщение Dec 13 2007, 08:28
Сообщение #18


Частый гость
**

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



Цитата(IJAR @ Dec 10 2007, 15:12) *
Именно так и предполагается.
Вообще то, если хорошо поковырять файлы *.map и *.lst , то данные о переменных
можно вытащить (из *.map - имена и начальные адреса, а из *.lst - их типы и структуры)
правда парсинг будет достаточно сложный

что-то я, видимо, до конца не понял задачу. в исходном сообщении об этом ни слова

Цитата
IAR 4.20
Можно ли из файлов создаваемых компиляторм "вытащить" список имен переменных в RAM,
их начальные адреса и формат?

если задача еще актуальна, можно ли тогда ее уточнить? это разовая задача или типовая (то есть, нужен скрипт) ? почему информацию о структуре нельзя взять из исходных файлов?
Go to the top of the page
 
+Quote Post
IJAR
сообщение Dec 13 2007, 12:38
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 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) для чтения и их размер;
далее запросы к контроллеру и далее форматный
вывод на экран прочитанного из контроллера на экран.


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
sergik_vrn
сообщение Dec 13 2007, 12:51
Сообщение #20


Частый гость
**

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



Цитата(IJAR @ Dec 13 2007, 15:38) *
Из исходника взять данные конечно можно, но из файлов компилятора проще, легче парсить
строки, поскольку в них информация структуирована, например в .map:

[..]

получим ИМЯ, РАЗМЕР,
и НАЧАЛЬНЫЙ адрес переменной, далее по имени в *.lst найдем описание структуры, парсим и ее;
далее обычная прогрммная эквилибристика => делаем файл описания переменных
который будет читать терминальная программа по каждому обновлению ну а далее формирование
списка и размеров смежных областей RAM(EEPROM) для чтения и их размер;
далее запросы к контроллеру и далее форматный
вывод на экран прочитанного из контроллера на экран.

в общем, я не согласен только с утверждением, что .map проще парсить - в с структура не менее структурированная, впрочем, если coff открыть не удается, то все равно без парсинга .map (или .lst) не обойтись. в остальном - Вы вроде и ответили на свой вопрос smile.gif
Go to the top of the page
 
+Quote Post
IJAR
сообщение Dec 14 2007, 14:32
Сообщение #21


Местный
***

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



Цитата(sergik_vrn @ Dec 13 2007, 15:51) *
в общем, я не согласен только с утверждением, что .map проще парсить - в с структура не менее структурированная, впрочем, если coff открыть не удается, то все равно без парсинга .map (или .lst) не обойтись. в остальном - Вы вроде и ответили на свой вопрос smile.gif


Согласен что наметился путь решения, хотя и довольно тернистый. Что касается coff файла, то его
не удается создать, а открыть то как раз получается, например coff файл для pic процессоров
вполне разбираем.


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 14 2007, 15:52
Сообщение #22


Гуру
******

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



Цитата(IJAR @ Dec 14 2007, 16:32) *
Что касается coff файла, то его
не удается создать,
Если проект не на С++, то можно создать файл в формате IEEE-695.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
sergik_vrn
сообщение Dec 17 2007, 09:54
Сообщение #23


Частый гость
**

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



Цитата(Сергей Борщ @ Dec 14 2007, 18:52) *
Если проект не на С++, то можно создать файл в формате IEEE-695.

прошу прощения, если чего пропустил, а UBROF случайно не годится?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 17 2007, 11:04
Сообщение #24


Гуру
******

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



Цитата(sergik_vrn @ Dec 17 2007, 11:54) *
прошу прощения, если чего пропустил, а UBROF случайно не годится?
Если у вас есть описание этого формата, и вы готовы поделиться этой информацией - то годится.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
sergik_vrn
сообщение Dec 17 2007, 12:09
Сообщение #25


Частый гость
**

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



Цитата(Сергей Борщ @ Dec 17 2007, 14:04) *
Если у вас есть описание этого формата, и вы готовы поделиться этой информацией - то годится.

как выяснилось, перечень типов записей в UBROF это не описание формата. тогда увы
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 22:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01629 секунд с 7
ELECTRONIX ©2004-2016