Ich habe eine software PWM Routine geschrieben. Diese ist aber zu langsam, deshalb muß ich sie direkt als assembler Sourcecode einfügen. Dabei ergaben sich aber ein paar Fragen: Zuerst der code, damit ihr wisst, worum es geht: // global variables unsigned char pwmcounter; unsigned char pwm[8]; unsigned char* pwmptr; volatile unsigned char* pwmcountptr; .... void main(void){ unsigned char i; for (i=0; i<8; i++) pwm[i]=55; pwmptr=&pwm[0]; pwmcountptr=&pwmcount; ... } ... SIGNAL(SIG_OUTPUT_COMPARE2) { unsigned char stat1; asm volatile( "in %0, __SREG__" "cli" "push r16" "push r30" "push r31" "mov r30, %a1" "mov r31, %a1+1" "ld r16, Z" lädt das den pwmcouter nach r16????? "cpi r16, 100" "breq overflow" "mov r30, %a2" "mov r31, %a2+1" lädt das die Adresse von pwm[0]nach r30&r31 ????? "ld _tmp_reg_, Z+" lädt das den Wert von pwm[0] nach temp???? "cp tmp_reg_,r16" "brne tab1" "cbi $12,0" löscht dieser Ausdruck bit 0 in port d?????????? "tab1:" "ld _tmp_reg_, Z+" lädt das den Inhalt von pwm[1] nach temp????? "cp tmp_reg_,r16" "brne tab2" ...... pwm routine..... "mov r30, %a2" "mov r31, %a2+1" "st Z,r16" speichert das den erhöhten pwmzähler in pwmcounter? "pop r16" "pop r30" "pop r31" "out _SREG_, %0" stat1 in SREG?? :"=&r" (stat1) :"e" (pwmcountptr), "e" (pwmptr) ); Nun zu meinem Problem. Ich möchte die globalen Variablen pwm[n]im assembler code verarbeiten(read only). Ich möchte die globale Variable pwmcounter lesen und deren Inhalt ändern. Die lokale Variable stat1 möchte ich benutzen, um das Statusregister zu speichern.Mache ich das so richtig?? Ich habe die Knackpunkte im Quellcode kommentiert und meine Fragen dazu geschrieben. Kann ich die Pointer auf diese weise in das Z-Register laden, oder geht das noch eleganter. Muß ich pwmcounter auch als volatile definieren? Ich bekomme viele Fehlermeldungen, wenn ich versuche, den Code zu kompilieren.
Bitte immer nur in einem Forum zu einer Zeit fragen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.