LSergM 0 13 сентября, 2010 Опубликовано 13 сентября, 2010 · Жалоба Вопрос. Пишу программу в WinAVR-20090313 для mega128, потом пытаюсь отладить через AVRStudio. Загружаю проект в студию включаю view ->Diasassembler помогите разобраться в том как она выдает результат по сравнению с .lss файлом? 1. Что означает первое число с "+" в начале строки? 2. Код команды перевернут, поменяны местами старший и младший байт по сравнению с .lss файлом? 3. По ходу встречаются комментарии @00000000: _delay_loop_2 ---- UNKNOWN_FILE --------------------------------------------------------------------------------- 0: File not found +00000000: 940C01EF JMP 0x000001EF Jump .... 311: File not found +0000022F: 2E0F MOV R0,R31 Copy register +00000230: E3FE LDI R31,0x3E Load immediate +00000231: 2EEF MOV R14,R31 Copy register +00000232: 24FF CLR R15 Clear Register +00000233: 2DF0 MOV R31,R0 Copy register 313: File not found +00000234: E36D LDI R22,0x3D Load immediate +00000235: E070 LDI R23,0x00 Load immediate ---- LCD_winAVR.c --------------------------------------------------------------------------------- 4284: for(k=0; k<size_data; k++) +00000236: 01D9 MOVW R26,R18 Copy register pair +00000237: 0FA4 ADD R26,R20 Add without carry +00000238: 1FB5 ADC R27,R21 Add with carry 4286: eeprom_write_byte(Adr_EE, data[k]); // +00000239: 01F8 MOVW R30,R16 Copy register pair +0000023A: 0FE2 ADD R30,R18 Add without carry +0000023B: 1FF3 ADC R31,R19 Add with carry +0000023C: 8190 LDD R25,Z+0 Load indirect with displacement ---- d:\project\bzu_second\mega128\winavr\v_60/d:/winavr-20090313/lib/gcc/../../avr/include/avr/eeprom.h 300: File not found +0000023D: 8188 LDD R24,Y+0 Load indirect with displacement +0000023E: FD81 SBRC R24,1 Skip if bit in register cleared +0000023F: CFFD RJMP PC-0x0002 Relative jump 311: File not found +00000240: 01F7 MOVW R30,R14 Copy register pair +00000241: 83B1 STD Z+1,R27 Store indirect with displacement +00000242: 83A0 STD Z+0,R26 Store indirect with displacement 313: File not found +00000243: 01FB MOVW R30,R22 Copy register pair +00000244: 8390 STD Z+0,R25 Store indirect with displacement 315: File not found +00000245: B60F IN R0,0x3F In from I/O location +00000246: 94F8 CLI Global Interrupt Disable +00000247: 9AE2 SBI 0x1C,2 Set bit in I/O register +00000248: 9AE1 SBI 0x1C,1 Set bit in I/O register +00000249: BE0F OUT 0x3F,R0 Out to I/O location +0000024A: 5F2F SUBI R18,0xFF Subtract immediate +0000024B: 4F3F SBCI R19,0xFF Subtract immediate with carry Какие файлы она не может найти, можно ли сделать чтобы этих ошибок не было? 4. Может в ассемблере на разобрался но эти команды похоже разные .lss код ac9c: 31 e0 ldi r19, 0x01; 1 ac9e: f9 01 movw r30, r18 aca0: 31 97 sbiw r30, 0x01; 1 aca2: f1 f7 brne .-4 ; 0xaca0 <main+0x3e> { // wait 1/10 ms _delay_loop_2(((F_CPU) / 4e3) / 10); __ticks --; aca4: 01 97 sbiw r24, 0x01; 1 __ticks = 1; else if (__tmp > 65535) { // __ticks = requested delay in 1/10 ms __ticks = (uint16_t) (__ms * 10.0); while(__ticks) [b] aca6: d9 f7 brne .-10 ; 0xac9e <main+0x3c>[/b] _delay_ms(30); // 1000 Задержка на переходные процессы AVRStudio ---- d:\project\bzu_second\mega128\winavr\v_60/d:/winavr-20090313/lib/gcc/../../avr/include/util/delay_basic.h 105: File not found +0000564D: E720 LDI R18,0x70 Load immediate +0000564E: E031 LDI R19,0x01 Load immediate +0000564F: 01F9 MOVW R30,R18 Copy register pair +00005650: 9731 SBIW R30,0x01 Subtract immediate from word +00005651: F7F1 BRNE PC-0x01 Branch if not equal ---- d:\project\bzu_second\mega128\winavr\v_60/d:/winavr-20090313/lib/gcc/../../avr/include/util/delay.h 124: File not found +00005652: 9701 SBIW R24,0x01 Subtract immediate from word 120: File not found [b]+00005653: F7D9 BRNE PC-0x04 Branch if not equal[/b] ---- LCD_winAVR.c --------------------------------------------------------------------------------- 8138: Init_Port(); +00005654: 940E0932 CALL 0x00000932 Call subroutine Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alx2 0 14 сентября, 2010 Опубликовано 14 сентября, 2010 · Жалоба Пишу программу в WinAVR-20090313 для mega128, потом пытаюсь отладить через AVRStudio.Сочувствую. Когда-то я тоже был вынужден вести отладку в AVRStudio (необходимо было работать с атмеловским эмулятором). Вспоминаю как страшный сон... 1. Что означает первое число с "+" в начале строки? Я дизассемблером почти никогда не пользовался, отлаживал по исходникам. Но, насколько я помню, это адрес команды (процессорной инструкции) в словах (не байтах!) программной памяти (как это принято у Атмела). Байтовый адрес получается умножением этого числа на 2. 2. Код команды перевернут, поменяны местами старший и младший байт по сравнению с .lss файлом?В чем вопрос-то? Почему поменяны? :) Не знаю, что у Вас за lss файл (похоже, что он получен дизассемблером из комплекта binutils), но, насколько я вижу, там показана последовательность байтов (между ними есть пробел), в то время как дизассемблер AVR-студии показывает коды инструкций в виде чисел. Для AVR принят little-endian формат, то еть младший байт идет первым, старший последним. Поэтому и получается что, например, число abcd представляется последовательностью байтов cd ab. 3. По ходу встречаются комментарии ---- [b]d:\project\bzu_second\mega128\winavr\v_60/d:/winavr-20090313/lib/gcc/../../avr/include/avr/eeprom.h[/b] 300: File not found Какие файлы она не может найти, можно ли сделать чтобы этих ошибок не было? ??? Так написано ведь, какой файл. Она не находит файл с исходным кодом, из которого был получен дизассемблированный код. Типичная причина - исходник был удален после компиляции (например редко кто держит исходники стандартных библиотек типа libc). Хотя я вижу, что у Вас студия не находит eeprom.h - это странно, проверяйте пути. Возможно Вы перемещали эти файлы, в этом случае надо пересобрать библиотеки, чтобы в отладочной информации объектных файлов были актуальные пути. Другая возможная причина - в объектном файле вообще отсутствует отладочная информация (модуль скомпилирован без -g), в результате студия просто не знает, из какого файла получен код. Предполагаю, что именно поэтому она пишет "UNKNOWN_FILE". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xelax 0 14 сентября, 2010 Опубликовано 14 сентября, 2010 · Жалоба Я дизассемблером почти никогда не пользовался, отлаживал по исходникам. Но, насколько я помню, это адрес команды (процессорной инструкции) в словах (не байтах!) программной памяти (как это принято у Атмела). Байтовый адрес получается умножением этого числа на 2. Не совсем так, это смещение относительно стартового адреса программы или отдельного модуля если дизассемблируется объектник или библиотека. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться