WINAVR GCC pomoc

Loading thread data ...

Witam. Miałem kiedyś podobny problem , a ponieważ nie jestem znawcą C to poszedłem najkrótszą drogą (jaka znałem) do celu i wyszło mi cos takiego: #include <avr/io.h>

#include <avr/signal.h>

volatile uint64_t we[12]; //pierwotnie zliczane impulsy wejsciowe volatile uint8_t ONE=1; //by nakarmic kompilator

SIGNAL (SIG_OVERFLOW1) {

asm volatile ( "add r16,%2" "\n\t" "adc r17,__zero_reg__" "\n\t" "adc r18,__zero_reg__" "\n\t" "adc r19,__zero_reg__" "\n\t" "adc r20,__zero_reg__" "\n\t" "adc r21,__zero_reg__" "\n\t" "adc r22,__zero_reg__" "\n\t" "adc r23,__zero_reg__" "\n\t" :"=a"(we[0]) :"a"(we[0]), "r"( ONE ) ); // to jest we[0]++; } .. Efekt kompilacji to: .. asm volatile aa: 00 91 62 00 lds r16, 0x0062 ae: 10 91 63 00 lds r17, 0x0063 b2: 20 91 64 00 lds r18, 0x0064 b6: 30 91 65 00 lds r19, 0x0065 ba: 40 91 66 00 lds r20, 0x0066 be: 50 91 67 00 lds r21, 0x0067 c2: 60 91 68 00 lds r22, 0x0068 c6: 70 91 69 00 lds r23, 0x0069 ca: 80 91 60 00 lds r24, 0x0060 ce: 08 0f add r16, r24 d0: 11 1d adc r17, r1 d2: 21 1d adc r18, r1 d4: 31 1d adc r19, r1 d6: 41 1d adc r20, r1 d8: 51 1d adc r21, r1 da: 61 1d adc r22, r1 dc: 71 1d adc r23, r1 de: 00 93 62 00 sts 0x0062, r16 e2: 10 93 63 00 sts 0x0063, r17 e6: 20 93 64 00 sts 0x0064, r18 ea: 30 93 65 00 sts 0x0065, r19 ee: 40 93 66 00 sts 0x0066, r20 f2: 50 93 67 00 sts 0x0067, r21 f6: 60 93 68 00 sts 0x0068, r22 fa: 70 93 69 00 sts 0x0069, r23 .. Nie wiem czy Ci się nada , ale lepsze to niz nic ;)

Pozdrawiam Piotrek

Reply to
Piotrek Sz.

Tu jest problem: tylko litery A...D w ten sposób działają - jak pewnie by powiedział Bill G., 32 bity wystarczą dla wszystkich :)

Dałoby się dorobić też obsługę E...H - gcc/config/avr/avr.c na samym początku funkcji print_operand. Jednak dorobienie pełnej obsługi typów

64-bitowych na AVR (tak, by po prostu można było zwiększyć zmienną o 1 operatorem ++ i kod wyszedł optymalny) to znacznie trudniejsza sprawa.

Marek

Reply to
Marek Michalkiewicz
Reply to
Michal Machowski

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.