JarekB napisał(a):
Kod:
00000098 <main>:
98: 12 be out 0x32, r1 ; 50
... // tu wielki kompilator zrobił numer
a6: 82 b7 in r24, 0x32 ; 50 // dołożył tyle pustych linijek ile jest nop-ów
a8: 80 93 00 01 sts 0x0100, r24 ; 0x800100 <_edata> // różnica między 98 a a6
A na czym konkretnie polega ten numer kompilatora?
To nie są puste linijki. Pod tymi adresami pomiędzy 0x98 i 0xA6 są właśnie instrukcje NOP.
Można oczywiście ustawić wyższy poziom
Debug Info, ale i tak zapewne nie wszystkie instrukcje będą widoczne w pliku
*.lss.
Za to w Atmel Studio podczas symulacji w oknie
Disassembly kod wygląda tak:
Kod:
int main( void ) {
TCNT0 = 0;
00000048 OUT 0x26,R1 Out to I/O location
asm( "nop" );
00000049 NOP No operation
asm( "nop" );
0000004A NOP No operation
asm( "nop" );
0000004B NOP No operation
asm( "nop" );
0000004C NOP No operation
asm( "nop" );
0000004D NOP No operation
asm( "nop" );
0000004E NOP No operation
czas = TCNT0;
0000004F IN R24,0x26 In from I/O location
00000050 STS 0x0100,R24 Store direct to data space
Poza tym dostępne jest okienko o nazwie
Processor Status, w którym jest całe mnóstwo przydatnych informacji, jak np. adres aktualnie wykonywanej instrukcji (PC counter), wskaźnik stosu, licznik cykli wykonanych podczas wykonywania instrukcji, Stop Watch przeliczający wykonane instrukcje na czas (na podstawie zadanej przez nas częstotliwości taktowania).
Trudno tu opisać wszystkie możliwości symulatora, ale bardzo łatwo w takich właśnie sytuacjach przetestować, co wygenerował kompilator. Oczywiście symulator nie jest w stanie zasymulować wszystkiego (np. pracy UARTa), czasami potrzebny jest debugger sprzętowy, ale i tak dużo funkcji naszego programu można przetestować.
Dlatego osobiście podpisałbym się pod radą kolegi
micky:
micky napisał(a):
A może spróbuj symulatora software'go w Atmel Studio do policzenia czasu wykonywania twoich procedur?
Oczywiście wymaga to nie tylko zainstalowania Atmel Studio. Trzeba się jeszcze nauczyć obsłużyć taki symulator, ale myślę, że na potrzeby tak prostego programu dużo się uczyć nie trzeba...
Z drugiej strony trochę się obawiam, że mnie kolega Mirek zruga za promowanie ("kociego") Atmel Studio