Gast
#131344
Hi! Ich habe in GCC eine pauseschleife für mianen AVR Geschreiben. um dann zu erfahren wie lange es dauert bis die schleife durchlaufen ist habe ich den code in das AVRStudio (deswegen nicht ins gcc forum) Geladen und folgenden code herausgesucht: +00000047: E487 LDI R24,0x47 Load immediate +00000048: E09D LDI R25,0x0D Load immediate +00000049: 0000 NOP No operation +0000004A: 9701 SBIW R24,0x01 Subtract immediate from word +0000004B: FF97 SBRS R25,7 Skip if bit in register set +0000004C: CFFC RJMP PC-0x0003 Relative jump +0000004D: 9508 RET Subroutine return dann hab ich auf +00000048 und +0000004D einen breakpoint gesetzt und die den zähler nach erreichen von +00000048 auf 0 gesetzt. als dann die schleife durchlaufen was hab ich am 204000 abgelesen und desshalb bei 1Mhz auch 204000 us. nun hab ich mir mal angeschaut wie lange es dauert is die schleifen 1xdurchlaufen ist (von +00000049 bis +00000049) das ergab 6 zyklen. Dann hab ich mit desen zahlen ausgerechnet wie lange die schleife dauern müsste ( 0x47 0x0D 0x06 )= 5538 Zyklen und das wären aber 5538 us dauern. was hab ich falsch gemacht. Rechenfehler oder was ? Schonmal danke für alle antworten ! MFG Axos