Forum: Compiler & IDEs AVR springt nicht in Routine


von lightninglord (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

ich schreibe mir gerade ein kleines Programm fürn RFM12.

Ich hab die ganzen Routinen in ein eigenes C-File ausgelagert ( RFM12.c 
) und möchte diese über ein H-File in mein Main-File einbinden. der 
AVR-GCC hat auch alles ohne zu meckern compiliert, aber auf dem AVR 
läuft nur das ab was in der main steht, in die Funktion RFM12_init() 
springt er nicht und den Rest was anch dem aufruf kommt ignoriert er 
auch. Könnt ihr mir bitte helfen ich finde den Fehler einfach nicht. 
Danke

von Johannes M. (johnny-m)


Lesenswert?

Die extern vor den Funktionsprototypen im Header sind flüssiger als 
Wasser. Lass sie weg. extern macht nur bei Variablen Sinn.

Mich sollte auch wundern, wenn _delay_ms(50) und _delay_ms(200) bei den 
angegebenen 8 MHz das machen, was Du willst. Oder hast Du eine 
brandaktuelle Version der AVR-libc? Ich habe gehört, dass in irgendeiner 
neuen Version die _delay_XX-Funktionen nicht mehr begrenzt sein 
sollen...

von lightninglord (Gast)


Angehängte Dateien:

Lesenswert?

also die delay hab ich geändert die machen das was sie sollen zumindest 
blinken die LED 3x im "richtigen Takt" (Power-Signal)
Aber trot jetzt wo ich das extern weg hab gehts irgendwie immer noch 
nicht. Sehr merkwürdig.

von Stefan E. (sternst)


Lesenswert?

Du hast in RFM12_init() eine Endlosschleife eingebaut:
1
  for(i=0; 1<10; i++) _delay_ms(20);    // Warte 200ms bis RESET fertig

von lightninglord (Gast)


Lesenswert?

au das tut weh, das hätte ich eigentlich finden müssen. Vielen Dank!

von lightninglord (Gast)


Lesenswert?

Eine Frage hab ich noch:

Mit
1
#define RF_FREQ    430.8          // Sendefrequenz in MHz
2
#define RF_FREQSET  (430 - RF_FREQ)/0.0025
3
4
...
5
6
RFM12_com(0xA000| RF_FREQSET);

Möchte ich die Frequenz des RFM12 schreiben, doch ich bekomme die 
Fehlermeldung das RF_FREQSET nicht Binär ist, wie kann ich das runden 
oder "binärisieren" damit ich das so schreiben kann?

von Sven P. (Gast)


Lesenswert?

Du veroderst da mit einer Fließkommazahl. Die wird wenigstens schon beim 
Compilieren berechnet, also es werden keine Fließkommabibliotheken 
eingelinkt.

Schreib mal
1
#define RF_FREQ    430.8          // Sendefrequenz in MHz
2
#define RF_FREQSET  ((unsigned int) (430 - RF_FREQ)/0.0025)
3
4
...
5
6
RFM12_com(0xA000| RF_FREQSET);

von Stefan E. (sternst)


Lesenswert?

@ lightninglord:

Bist du sicher, dass ein negatives RF_FREQSET richtig ist?

von lightninglord (Gast)


Lesenswert?

@Stefan

Nein das ist wieder nen Tippfehler müsste + heißen, danke.


Aber mit
1
#define RF_FREQ    430.8          // Sendefrequenz in MHz
2
#define RF_FREQSET  ((unsigned int) (430 - RF_FREQ)/0.0025)


gehts auch nede, es kommt immer noch die gleiche Fehlermeldung.

von holger (Gast)


Lesenswert?

#define RF_FREQSET  (unsigned int) ((430 - RF_FREQ)/0.0025)

von Sven P. (Gast)


Lesenswert?

Tschuldigung... klar, Klammer um die Division
Dann machs aber noch idiotensicher:
1
#define RF_FREQSET  ( (unsigned int) ((430 - RF_FREQ)/0.0025) )

von lightninglord (Gast)


Lesenswert?

Ok danke jetzt gehts.

sieht jetzt so aus:
1
#define RF_FREQ    430.8          // Sendefrequenz in MHz
2
#define RF_FREQSET  (unsigned int) ((RF_FREQ-430)/0.0025)

von lightninglord (Gast)


Angehängte Dateien:

Lesenswert?

sorry wegen den Doppelposts, aber ich habs jetzt aufn AVR überspielt und 
er springt immer noch nicht in die Routinen aus dem RFM12.c. Ich hab den 
neusten SRC mal angehängt. Langsam zweifel ich an meinen C-Kenntnissen.

von lightninglord (Gast)


Lesenswert?

So letzter Post!!! Es geht alles, ich hab nur vergessen im DDR auch die 
LED wieder zu aktivierne, weil das DDR wird in der RFM12 neu 
geschrieben, da fehlte die LED.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

lightninglord wrote:

[endlosschleife]
> au das tut weh, das hätte ich eigentlich finden müssen. Vielen Dank!

Der Compiler findet sowas.  Man muss sich die Warnungen aber auch
angucken, die er generiert.

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.