Gdyby ktos wiedzial i potrafil pomocbylbym wdzieczny. Maj±c kawalek kodu: //deklaracje na pocz±tku volatile uint64_t we[12]; //pierwotnie zliczane impulsy wejsciowe uint8_t ONE=1 //by nakarmic kompilator
i potem w procedurze przerwania: asm volatile( "add %A0,%2" "\n\t" "adc %B0,__zero_reg__" "\n\t" "adc %C0,__zero_reg__" "\n\t" "adc %D0,__zero_reg__" "\n\t" "adc %e0,__zero_reg__" "\n\t" "adc %f0,__zero_reg__" "\n\t" "adc %g0,__zero_reg__" "\n\t" "adc %h0,__zero_reg__" "\n\t" :"=d"(we[1]) :"d"(we[1]), "d"( ONE ) ); // to jest we[0]++;
I wszystko jest pieknie tylko moim zamyslem bylo dodanie do liczby 8 bajtowej wartosci 1 a gdy zobaczymy na to asembler wyglada on tak:
//odczyt zmiennej lds r18, 0x0084 lds r19, 0x0085 lds r20, 0x0086 lds r21, 0x0087 lds r22, 0x0088 lds r23, 0x0089 lds r24, 0x008A lds r25, 0x008B lds r30, 0x006C //sumowanie add r18, r30 adc r19, r1 adc r20, r1 adc r21, r1 adc r18, r1 //problem adc r18, r1 adc r18, r1 adc r18, r1 //zapis sts 0x0084, r18 sts 0x0085, r19 sts 0x0086, r20 sts 0x0087, r21 sts 0x0088, r22 sts 0x0089, r23 sts 0x008A, r24 sts 0x008B, r25 I wszystko bylo by OK. gdyby nie to ze zamiast rejestrow r22-r25 dla wyzszej czesci liczby wsadza mi tam r18. Czy jest jaki¶ sposob na rozwiazanie tego problemu ?
pozdrawiam Michal Machowski