Hallo Leute, ich hab seit einiger Zeit ein Problem mit einem Atmega 128, wobei mir selbst die Suchfunktion und viele gelesene Beiträge leider nicht weiterhelfen konnte, aber sicherlich ist es ein einfacher Fehler aber irgendwie hab ich ein Brett vorm Kopf. Ich verwende AtmelStudio 6 und anschließend AVRFlash wo ich natürlich bereits das FUSEbit 103-MODE richtig gesetzt hab. Prinzipiell Funktioniert mein Programm auch bis auf folgendes: Ich möchte einfach einen Wert in einer Funktion (hier uint8_t test(void) und im header ganz unten deklariert) meiner main-Funktion übergeben und diese über die bereits einwandfrei funktionierende UART-Kommunikation ausgeben. Ich erhalte als Rückgabewert jedoch 226 statt 0. Warum? Ich hab ebenfalls bereits versucht die Optimierungseinstellungen beim Atmel Studio zu ändern, wobei sich dann der Rückgabewert ändert. Warum? Hab ich hier irgend ein problem mit dem Speicherbereich? Vielen lieben Dank. PS: konstruktive Kritik und Verbesserungsvorschläge bezüglich Programmierstil sind erwünscht :-)
Daniel Hochwarter schrieb: > Hab ich hier irgend ein problem mit dem Speicherbereich? Schwer zu sagen, denn du hast nicht alle Dateien eingepackt, sodass man das nicht mal vergleichsweise selbst compilieren kann. Aber du solltest auf jeden Fall schon mal einen Blick auf die Warnungen werfen, auch wenn sie wahrscheinlich mit dem Problem nichts zu tun haben:
1 | In file included from main.c:1:0: |
2 | header.h:12:3: warning: #warning "F_CPU war noch nicht definiert, wird nun nachgeholt" |
3 | main.c:12:6: warning: return type of ‘main’ is not ‘int’ |
4 | main.c: In function ‘main’: |
5 | main.c:50:9: warning: operation on ‘ptr’ may be undefined |
6 | In file included from uart.c:1:0: |
7 | header.h:12:3: warning: #warning "F_CPU war noch nicht definiert, wird nun nachgeholt" |
8 | uart.c: In function ‘uart_puthex_nibble’: |
9 | uart.c:158:2: warning: passing argument 1 of ‘uart_put_string’ makes pointer from integer without a cast |
10 | uart.c:39:6: note: expected ‘char *’ but argument is of type ‘unsigned char’ |
11 | uart.c: In function ‘uart_putbin_byte’: |
12 | uart.c:190:4: warning: passing argument 1 of ‘uart_put_string’ makes pointer from integer without a cast |
13 | uart.c:39:6: note: expected ‘char *’ but argument is of type ‘int’ |
14 | uart.c:194:4: warning: passing argument 1 of ‘uart_put_string’ makes pointer from integer without a cast |
15 | uart.c:39:6: note: expected ‘char *’ but argument is of type ‘int’ |
Hi. Vielen Dank für die schnelle Antwort. Echt super Forum hier. Ich habe jetzt den ganzen Code etwas vereinfacht und genau diesen Compiliert. Jetzt ist der Wert 104? Was übersehe ich? LG PS: das mit den Warnungen hab ich schon gesehen aber nicht verstanden, zumindest nicht warum F_CPU nicht automatisch gesetzt wird. Hast du eventuell dafür auch eine Erklärung? Kleiner Nachtrag: Wenn ich j vor der Übergabe nach uart_put_int auf einen Wert setze (und dann natürlich j übergebe) funktioniert alles richtig.
Daniel Hochwarter schrieb: > Was übersehe ich? Du schreibst:
1 | j=test; |
2 | uart_put_int(test); |
Du meinst aber wahrscheinlich:
1 | j=test(); |
2 | uart_put_int(test()); |
Zumindest sehe ich nirgends die Deklaration einer Variable namens test, nur die einer Funktion.
Felix Pflaum schrieb: > Daniel Hochwarter schrieb: >> Was übersehe ich? > > Du schreibst: >
1 | j=test; |
2 | > uart_put_int(test); |
> > Du meinst aber wahrscheinlich: >
1 | j=test(); |
2 | > uart_put_int(test()); |
> > Zumindest sehe ich nirgends die Deklaration einer Variable namens test, > nur die einer Funktion. Hi. ja natürlich, der fehler hat sich dann beim umschreiben eingeschlichen. Wenn ich meine funktionen. die ich ursprünglich hatte direkt ins main schreibe gehen diese, jedoch als Funktion mit Rückgabewert nicht. Witzigerweise ging die ADC Funktion die ich ebenfalls verwendete einwandfrei? Egentlich wollte ich für Testzwecke nur j übergeben, da j so wie es da steh wenig sinn macht :-) Danke Lg Daniel
Dieser Fehler würde aber das Verhaltungen und die Warnungen "makes pointer from integer" erklären. test ist ein Pointer auf die Funktion (der durchaus 104 oder so ergeben kann), test() der Rückgabewert.
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.