Hallo alle zusammen, ich versuche jetzt schon seit ein paar Stunden den Quellcode von Lars Neubert aus dem Artikel Versenden von SMS mittels Mobiltelefon zum Laufen zu bekommen. Wenn ich den Code im AVR Studio verwende (Atmega32 eingestellt), dann bekomme ich 5 Fehler beim Kompilieren: jeweils die Meldung: undefined reference to 'smd_decode_data' Kennt jemand das Problem und kann mir einen Tip geben?? Ich verwende den folgenden Quellcode aus dem Artikel: http://www.mikrocontroller.net/wikifiles/f/fa/Software_Stand_28.12.2010.zip Bevor ich den Code an meine Bedürfnisse anpasse möchte ich ihn erst einmal so wie er ist zum Laufen bekommen. Vielleicht findet sich ja jemand, der das selbe Problem hatte und mir weiterhelfen kann:-) Danke MfG Martin
Hast Du alle Quell- und Header-Dateien eingebunden? Zeige am Besten deinen Code, dann kann man leichter helfen!
Hallo alle zusammen, @Nico: Ja habe jetzt alle Quell- und Headerdateien richtig eingebunden, aber es sind immer noch Fehler vorhanden. Das Projekt ist ein AVRStudio4-Projekt und ich will es im Studio5 betreiben. Folgendes habe ich jetzt zuletzt gemacht: Ich habe die .aps-Datei im Studio5 importiert. Nach dem Kompilieren (habe keine Änderungen vorgenommen)sind ein Fehler und zwei Warnungen aufgetreten (siehe Anhang), die ich bereits bei meinen vorherigen Versuchen hatte. Die Fehler und Warnungen kommen von der Funktion sms_decode, aber ich kriege es nicht hin, diese auszumerzen. Im Artikel Versenden von SMS mittels Mobiltelefon wurde unter Download -> Software_Stand_28.12.2010 darauf hingewiesen, dass ein Bug bei sms_decode war - kann das sein, dass der Bug immer noch da ist!? Könnt ihr mir weiterhelfen?? Mfg Martin
Der fehler ist easy... einfach in der Entsprechenden Zeile einen Cast machen: (struct SMS_DECODE_DATA_T*)(ptr) Der Rest rührt von unsauberem code her...
Zeile 358
1 | if (*p_sms_telnr_tmp1='+') { |
sollte
1 | if (*p_sms_telnr_tmp1=='+') { |
sein. Und der Rest bleibt dir überlassen dass du auch noch deinen Beitrag leistest ;)
Hey danke Thomas!!! :-) Dein Beitrag klingt zuversichtlich, ich teste das gleich mal:-) Gruß Martin
Najo, man braucht eigentlich nur die Fehlermeldungen/Warnings bewusst zu lesen 1.) suggested paranthesis around assignment as truth value Hier warnt dich der Compiler, dass ein "Wahrheitswert" im IF erwartet wird, also der Ausdruck entweder true (alles ungleich 0) oder false (0) ergeben muss. Da hier im Source ein einfaches = verwendet wird (das ist in C der Zuweisungsoperator) und == der Vergleichsoperator ist, der true oder false liefert. Deshalb zweiteren verwenden (solangs natürlich Sinn macht) 2.) Hier wird einer Funktion die einen Pointer auf den einen Datentyp erwartet ein Pointer auf einen anderen übergeben (oder im Worstcase ein Integer). Hab mir den Code nicht angesehen sondern nur die Meldungen, aber würd vermuten hier ist entweder der von dir erwähnte Bug zu suchen oder es fehlt einfach ein entsprechender Cast 3.) Noch eindeutiger, er sagt dir sogar welchen Typ er er erwartet und was er bekommt. Der typ unterscheidet sich nur durch das Schlüsselwort "volatile", und dieses sagt dem Compiler, dass er diese Variable nicht wegoptimieren darf, da sie außerhalb des sequentiellen Programmablaufs (also beispielsweise in ISRs, durch Speichermanipulation oder sonst wie) und somit für ihn nicht ersichtlich manipuliert wird.
Guten morgen :-) Oh man! Thomas ich habs hingekriegt :-) Danke dir wie verrückt!!! :-) Das sind Fehler die ich eigentlich hätte hinkriegen müssen, aber manchmal braucht man jemanden der einem die Augen öffnet :-) Bei den Deklarationen von sms_dec_data habe ich in der sms.h und sms.c das 'volatile' entfernt. Und in der entsprechenden IF-Anweisung habe ich "='+'" zu "=='+'" geändert. Danke!! Gruß Martin
volatile kann ggf. gefährlich sein, da dann der Compiler Sachen wegoptimiert die er nicht wegoptimieren sollte - hängt dann davon ab mit welcher Optimierung übersetzt wird... Das nur im Hinterkopf behalten falls mal was wieder was unerklärlicherweise nicht mehr funktioniert ;)
> Bei den Deklarationen von sms_dec_data habe ich in der sms.h > und sms.c das 'volatile' entfernt. Oh Oh, da setzt Du besser überall, wo "struct sms_dec_data" ohne "volatile" davor steht, ein "volatile" hin. Das wird schon nicht umsonst dortstehen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.