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

 
 
 
Reply to this topicStart new topic
> дизассемблерование atmega
coolibin
сообщение Nov 12 2011, 12:48
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 19-07-07
Пользователь №: 29 228



Подскажите, пожалуйста, чем дизассемблеровать atmeg'у? пробывал IDA, не нашел этого проца(может плохо искал?), пробывал AVRStudio, получислось, но не совсем удобно, например, вызов процедуры RCALL PC - 0x076F, мне не понятно куда прыгает программа, хотелось бы сразу получить код с метками, и желательно с именами Регистров типа UBRR? дизассемблер может такое сделать?или все прийдется делать ручками?


--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 12 2011, 13:05
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(coolibin @ Nov 12 2011, 16:48) *
пробывал IDA, не нашел этого проца(может плохо искал?)

Плохо искал... После команды "New" и выбора файла для дизассемблирования выпадает окно, в котором нужно установить "Processor type" в значение "Atmel AVR series".
Go to the top of the page
 
+Quote Post
coolibin
сообщение Nov 14 2011, 13:16
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 19-07-07
Пользователь №: 29 228



А не подскажите, как найти часть кода где идет инициализация USART? смотрел в даташите пример инициализации, подобного кода не у себя нашел(((


--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Nov 14 2011, 13:39
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(coolibin @ Nov 14 2011, 17:16) *
А не подскажите, как найти часть кода где идет инициализация USART? смотрел в даташите пример инициализации, подобного кода не у себя нашел(((

Там же в DS есть адреса интересующих Вас регистров , взависимости от области их нахождения ищите команды обращения по этим адресам. Обычно UBRR всегда есть в коде, где происходит инит USART


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
coolibin
сообщение Nov 15 2011, 11:19
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 19-07-07
Пользователь №: 29 228



Цитата(ILYAUL @ Nov 14 2011, 15:39) *
Там же в DS есть адреса интересующих Вас регистров , взависимости от области их нахождения ищите команды обращения по этим адресам. Обычно UBRR всегда есть в коде, где происходит инит USART

Да, в DS есть строчка:
RAM:0029 UBRRL: .byte 1 ; USART Baud Rate Register Low
где программа обращается по этому адресу я так и не нашел((

я предпологаю инициализация должна выглядеть примерно так:

; Set baud rate
out UBRRH, r17
out UBRRL, r16
; Enable receiver and transmitter
ldi r16, (1<<RXEN)|(1<<TXEN)
out UCSRB,r16
; Set frame format: 8data, 2stop bit
ldi r16, (1<<URSEL)|(1<<USBS)|(3<<UCSZ0)
out UCSRC,r16

но чего то похожего я тоже не нашел((

может это быть изза того что я не правильно выбрал тип процессора при дизасме?

Сообщение отредактировал coolibin - Nov 15 2011, 11:22


--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 15 2011, 11:46
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(coolibin @ Nov 15 2011, 15:19) *
чего то похожего я тоже не нашел

Вы знаете конкретный тип МК, для которого была написана дизассемблируемая программа? Хорошо бы его огласить...

Регистры имеют, зачастую, два адреса: по одному адресу к нему можно доступиться командами ввода-вывода, по другому - как к обычной ячейке памяти. Соответственно и команды могут быть разные... Вероятно, что адрес 29h - это адрес регистра UBRRL при доступе к нему как ячейке памяти; при доступе через команду OUT он имеет, скорее всего, адрес 9h.
Go to the top of the page
 
+Quote Post
coolibin
сообщение Nov 15 2011, 12:08
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 19-07-07
Пользователь №: 29 228



Если честно я точно не знаю тип МК, где то в районе мега168, мега168 мега8

я нашел все команды OUT в программе, их не много, обращение к регистрам USART идет только после сброса RESET, во все регистры записывается ноль

может такое быть, что при инициализции USARt, обращение идет как к ячейки памяти, а не через команду OUT?


--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 15 2011, 12:49
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(coolibin @ Nov 15 2011, 16:08) *
может такое быть, что при инициализции USARt, обращение идет как к ячейки памяти, а не через команду OUT?

Никто проделать такое не возброняет! Более того, в некоторых МК иное и невозможно: например, в mega128 регистры USART1 вообще не имеют адресации через область ввода-вывода (т.е. обратиться к ним можно только как к ячейкам памяти)...

Цитата(coolibin @ Nov 15 2011, 16:08) *
где то в районе мега168, мега168 мега8
Вы бы точнее определились: в m168 (в отличии от m8) регистры USART лежат за пределами области ввода-вывода! Т.е. если МК - m168, то команд OUT при инициализации USART Вы не найдете!
Go to the top of the page
 
+Quote Post
coolibin
сообщение Nov 15 2011, 13:47
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 19-07-07
Пользователь №: 29 228



Цитата(Палыч @ Nov 15 2011, 14:49) *
...
Вы бы точнее определились: в m168 (в отличии от m8) регистры USART лежат за пределами области ввода-вывода! Т.е. если МК - m168, то команд OUT при инициализации USART Вы не найдете!

тип МК это тоже загадка, по подозрениям это atmega168, но когда дизасмлю ИДА выводит много строк типа out 0x39, r16 где число(в данном случае 0x39) выделено красным, я так понимаю не может определить регистр к которому обращается программа, когда дизасмлю как atmega8 такого нет

а может USART работать в режиме mbus, т. е. на одной линии и прием и посылка? или это уже ручками?

Сообщение отредактировал coolibin - Nov 15 2011, 14:01


--------------------
Нет повести печальнее на свете, чем повесть о хреновом интернете.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Nov 15 2011, 15:24
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(coolibin @ Nov 15 2011, 17:47) *
тип МК это тоже загадка, по подозрениям это atmega168, но когда дизасмлю ИДА выводит много строк типа out 0x39, r16 где число(в данном случае 0x39) выделено красным, я так понимаю не может определить регистр к которому обращается программа, когда дизасмлю как atmega8 такого нет
Да, действительно, в m168 адрес ввода-вывода 0х39 значится как "Reserved"

Цитата(coolibin @ Nov 15 2011, 17:47) *
а может USART работать в режиме mbus, т. е. на одной линии и прием и посылка? или это уже ручками?
Ручками.
Go to the top of the page
 
+Quote Post

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

 


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


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