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
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?
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 | Creating load file for Flash: main.hex |
2 | avr-objcopy -O ihex -R .eeprom main.elf main.hex |
3 | |
4 | Creating load file for EEPROM: main.eep |
5 | avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" \ |
6 | --change-section-lma .eeprom=0 -O ihex main.elf main.eep |
7 | c:\WinAVR\bin\avr-objcopy.exe: --change-section-lma .eeprom=0x00000000 never used |
8 | |
9 | Creating Extended Listing: main.lss |
10 | avr-objdump -h -S main.elf > main.lss |
11 | |
12 | Creating Symbol Table: main.sym |
13 | avr-nm -n main.elf > main.sym |
14 | |
15 | Size after: |
16 | main.elf : |
17 | section size addr |
18 | .data 8 8388864 |
19 | .text 5926 0 |
20 | .bss 205 8388872 |
21 | .debug_aranges 96 0 |
22 | .debug_pubnames 810 0 |
23 | .debug_info 2351 0 |
24 | .debug_abbrev 980 0 |
25 | .debug_line 1762 0 |
26 | .debug_frame 240 0 |
27 | .debug_str 898 0 |
28 | .debug_loc 1606 0 |
29 | .debug_ranges 48 0 |
30 | Total 14930 |
31 | |
32 | |
33 | |
34 | Errors: none |
35 | -------- end -------- |
36 | |
37 | |
38 | > Process Exit Code: 0 |
39 | > Time Taken: 00:02 |
>> 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"
Vielen Dank. Das empfohlene Tool hat mich begeistert. Vielen Dank
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.