mikrocontroller.net

Forum: Compiler & IDEs AVR springt nicht in Routine


Autor: lightninglord (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: lightninglord (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Ernst (sternst)
Datum:

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

Autor: lightninglord (Gast)
Datum:

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

Autor: lightninglord (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Frage hab ich noch:

Mit
#define RF_FREQ    430.8          // Sendefrequenz in MHz
#define RF_FREQSET  (430 - RF_FREQ)/0.0025

...

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?

Autor: Sven P. (haku) Benutzerseite
Datum:

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

Schreib mal
#define RF_FREQ    430.8          // Sendefrequenz in MHz
#define RF_FREQSET  ((unsigned int) (430 - RF_FREQ)/0.0025)

...

RFM12_com(0xA000| RF_FREQSET);

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ lightninglord:

Bist du sicher, dass ein negatives RF_FREQSET richtig ist?

Autor: lightninglord (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Stefan

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


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


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

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#define RF_FREQSET  (unsigned int) ((430 - RF_FREQ)/0.0025)

Autor: Sven P. (haku) Benutzerseite
Datum:

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

Autor: lightninglord (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok danke jetzt gehts.

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

Autor: lightninglord (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: lightninglord (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.