Forum: Compiler & IDEs I²C über USI, Attiny45


von Simon H. (der_hier)


Lesenswert?

Hallo,
ich versuche eine I²C Kommunikation mit dem ATtiny45 als Master 
hinzubekommen. Habe aus anderen Beiträgen bereits die Atmel Bibliotheken 
entdeckt (http://www.atmel.com/dyn/resources/prod_documents/AVR310.zip) 
und Teilweise auf avrstudio umgemünzt (inavr.h und ioavr.h durch 
avr/io.h und util/twi.h ersetzt und die definitionen der ports aus der 
IF abfrage direkt genutzt). Ich bekomme beim Projekt compilieren 
allerdings noch zur Zeile
1
__x unsigned char USI_TWI_Start_Transceiver_With_Data( unsigned char * , unsigned char );
 die Fehlermeldung:
../USI_TWI_Master.h:91: error: expected '=', ',', ';', 'asm' or 
'__attribute__' before 'unsigned'

Werde daraus nicht wirklich schlau. hat jemand eine Idee??

von Timmo H. (masterfx)


Lesenswert?

mach das __x mal weg
In der IAR Doku steht:

__x, __z __x_z, __z_x
The compiler defines the function type attributes __x, __z __x_z, and 
__z_x which are used by parts of the runtime library. These attributes 
can give very efficient code in a local perspective, but should be used 
with care as they change the calling convention and may have a negative 
effect on the size of the entire application.

__x  The first pointer in the parameter list is placed in register X

Bei AVR-GCC hat dies glaub ich eine etwas andere Bedeutung

von Andreas B. (Gast)


Lesenswert?

Timmo H. schrieb:
> Bei AVR-GCC hat dies glaub ich eine etwas andere Bedeutung

Offensichtlich gar keine, deshalb gibt es ja die Fehlermeldung.

von Simon H. (der_hier)


Lesenswert?

ok, der Fehler is weg, neuer taucht auf. diesmal kennt er __delay_cycles 
nicht. jemand ne Ahnung welche delay fkt ich dafür nutzen kann dazu ist?

von Timmo H. (masterfx)


Lesenswert?

bei AVR-GCC gibts z.B. delay_ms und delay_us.
Du musst also nur schauen wie lange man versucht mit der __delay_cycles 
zu warten

Andreas B. schrieb:
> Timmo H. schrieb:
>> Bei AVR-GCC hat dies glaub ich eine etwas andere Bedeutung
>
> Offensichtlich gar keine, deshalb gibt es ja die Fehlermeldung.
Oh, doch. Schaut man z.B. in die math.h von der avr-libc sieht man 
sowas:
1
double   cos (double __x)
2
double   sin (double __x)
3
double   tan (double __x)
4
double   fabs (double __x)
5
double   fmod (double __x, double __y)
6
double   modf (double __x, double *__iptr)
7
float   modff (float __x, float *__iptr)

von Simon H. (der_hier)


Lesenswert?

Also rein Fehlertechnisch ist es nun okay, obs funktioniert lass ich 
euch noch wissen. Google hat mir verraten das es in der delay_basic.h 
den Befehl _delay_loop_1() und _delay loop_2() gibt, die 3 oder 4 Zyklen 
per Wert aussetzen. Hab die __x 2 mal gelöscht und Zeilen wie
1
__delay_cycles(var)
 durch
1
if (var%2){ _delay_loop_1(var/3);}
2
else {_delay_loop_2(var/4);}
 ersetzt. Ist nur bei Werten die nicht durch 3 oder 4 Teilbar sind 
ziemlich doof. Also Werte von Hand berechnet und siehe da es waren 4 und 
6
=> 4 durch  _delay_loop_2(1)
 und
=> 6 durch delay_loop_1(2)
ersetzt

von (prx) A. K. (prx)


Lesenswert?

Timmo H. schrieb:

> Oh, doch. Schaut man z.B. in die math.h von der avr-libc sieht man
> sowas: double   cos (double __x)

Ein lokaler Name für einen Parameter. Na und?

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
Noch kein Account? Hier anmelden.