Hallo Leute, mein anderes Projekt (Nebelmaschine Wiederbelebung) befindet sich noch in der Informationsphase. Bei einem laufenden Projekt habe ich unter WinAVR das Problem das "nichts raus kommt". Included habe ich auch alles bekomme zumindest keine Fehlermeldungen beim Compilieren. Source: (funktioniert nicht) char test_buffer[50]; int n, a=5, b=3; n = sprintf(test_buffer, "%d plus %d is %d", a, b, a+b); usart_write_str(test_buffer); Source: (funktioniert) test_buffer[0]='T'; test_buffer[1]='e'; test_buffer[2]='s'; test_buffer[3]='t'; test_buffer[4]=0x00; usart_write_str(test_buffer); Der zweite Source Abschnitt ist nur zum Auschlus das es an meiner "usart_write_str" Routine scheitert. Was mache ich falsch? n bleibt 0 und in test_buffer steht nichts drin. Dank und Gruß Philipp
Gast
#2497551
Ich würde Tippen, dass Du gegen eine Library gelinkt hast, in der sprintf nur eine Rumpfimplementierung beinhaltet. Der Code sieht richtig aus. Steht in test_buffer[0] nach sprintf ein Nullbyte?
>Steht in test_buffer[0] nach sprintf ein Nullbyte?
Ja!
Im Kopf der C Datei: #include <stdio.h>
Wenn ich das ausklammer bekomme ich, wie zu erwarten, auch eine
Fehlermeldung das die Funktion sprintf nicht bekannt ist.
Was kann ich da tun?
Gast
#2497786
Unter der aktuellen WinAVR Version funktioniert sprintf zumindest rudimentär. benutze es für LCD Ausgabe um z.B. führende Nullen darzustellen. In der WinAVR doku steht einiges zu den Features und das auch nicht die komplette funktionalität implementiert ist. Aber dass es zu KEINER Ausgabe kommt ist garantiert nicht normal! gruß cyblord
Philipp F. schrieb: > habe ich unter WinAVR Was heißt das genau? Benutzt du irgendeine IDE, die selber ein Makefile generiert, oder benutzt du ein eigenes Makefile? Wenn Letzteres, dann bitte mal posten.
Hallo Zusammen, ich habe den Fehler nun gefunden. Das Problem war das ich in einer anderen .c Datei welche ich mit Kompillierte mit Globalen Variablen ein wenig übertrieben habe: unsigned long int uiConv_A_Results[100]; unsigned long int uiConv_B_Results[100]; unsigned long int uiConv_C_Results[100]; Auf nem Atmega88 nachdem ich das auf 10 reduziert habe lief es. Aber WAAAAAAAARUM zum Teufel warnt der Compiller einen nicht davor? Dank an alle die Helfen wollten. Gruß Philipp
Philipp F. schrieb: > Auf nem Atmega88 nachdem ich das auf 10 reduziert habe lief es. > Aber WAAAAAAAARUM zum Teufel warnt der Compiller einen nicht davor? Weil der Compiler das gar nicht wissen kann. Er sieht ja immer nur Bruchstücke des kompletten Programms Aber WAAAAAAAARUM zum Teufel schaust du dir die Ausgabe im Build-Fenster nicht an? Da steht eine Aufschlüsselung der feststellbaren Mindestbelegung der einzelenen Speicherarten. Und bei dir wird dann eben drinn stehen, dass du den SRAM zu 458% belegt hast.
Folgende Ausgabe kommt beim Kompilieren. Wo erkenne ich wie wieviel RAM benötigt wird?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
Gast
#2499363
>> Wo erkenne ich wie wieviel RAM benötigt wird? Im RAM landet früher oder später: > section size > .data 8 > .bss 205 Nicht erkennen kannst du hier den Stackbedarf. Den kannst du aber mit anderen Methoden ungefähr heraus finden: Beitrag "StackViewer (RAM Rechner) für WinAVR"
Gast
#2499370
Siehe auch avr-nm und avr-size in http://www.mikrocontroller.net/articles/AVR-GCC#Tipps_.26_Tricks
Vielen Dank. Das empfohlene Tool hat mich begeistert. Vielen Dank
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.