Warum kann ich mit Nios keine Ganzzahlen drucken?

Mein Ziel ist es also, (auf der Standardausgabe) eine Zahl mit einem Nios II-System auf einem FPGA Cyclone II Altera zu drucken.

MEINE SCHRITTE:

1) Ich habe das folgende Nios II-System mit dem Qsys- Tool (Quartus II) erstellt:

(NIOS II CPU - JTAG - ONCHIP SPEICHER RAM - SYS ID)

Geben Sie hier die Bildbeschreibung ein

2) Ich habe den folgenden C-Code geschrieben:

#include <stdio.h>
int main(){
    char a[13]="Hello world!";
    printf("%s\n", a);
}

3) Ich habe das System auf das FPGA heruntergeladen und meinen Code mit dem Altera Monitor-Programm kompiliert und geladen , ich habe den Code ausgeführt und es funktioniert, mein Code druckt "Hallo Welt" auf dem Monitor-Programm-Terminal.Geben Sie hier die Bildbeschreibung ein

4) Also, ich habe versucht, eine Nummer zu drucken, und es schlägt fehl :(

  • Der Code:

    #include <stdio.h>
    int main(){
        int a=3;
        printf("%i\n", a);
    }
    
  • Der Fehler:

    Geben Sie hier die Bildbeschreibung ein

HINWEISE: Ich habe versucht, %i mit %d %u zu ändern

Warum funktioniert es nicht?

Antworten (1)

Basierend auf dem Verifizierungsfehler und einem Blick auf Ihr Qsys-System ist nicht genügend RAM vorhanden.

In Qsys geht Ihr RAM von 0x4000 bis 0x7FFF. Wenn der JTAG-Programmierer jedoch versucht, die Nios-Firmware hochzuladen, versucht er, 0x4000 bis 0xE693 zu verifizieren. Das bedeutet, dass die Größe Ihres kompilierten Codes volle 0x6694 (26260) Bytes größer ist als der Arbeitsspeicher.

Durch die Verwendung von %i,d oder u zwingen Sie den Compiler dazu, die vollständigen Routinen für die Umwandlung von Ganzzahlen in Zeichenfolgen einzuschließen, was wiederum Divisions- und Modulcode erfordert. Dies wird ziemlich viel Platz beanspruchen. Viel mehr als %s, das wenig Code erfordert.

Danke für die erschöpfende Antwort und deine Zeit, morgen werde ich versuchen, die Menge an RAM zu erhöhen.
@MadDogTunnen nur ein Gedanke, welche Einstellungen hast du in deinem BSP? Es gibt Einstellungen wie Auswählen enable_small_c_library, Abwählen enable_c_plus_plus, Auswählen enable_reduced_device_drivers, Abwählen enable_exitund enable_clean_exit. All dies reduziert den Code-Fußabdruck und verringert die Größe erheblich. Sie sind hauptsächlich da, wenn der Nios-Prozessor verwendet wird, um Dinge wie ein RTOS unter Linux auszuführen. Für kleine eingebettete Sachen verschwenden sie nur Platz.
Ich bestätige, dass das Problem der geringe Speicher war, ich versuche, den Code mit einem externen SRAM auszuführen (platziert auf einem Altera-Board, 256K x 16 Bit) und es funktioniert! Ich habe BSP nicht verwendet, trotzdem gibt es die Use_small_C_libraryEinstellung, ich habe es überprüft, aber es funktioniert nicht. (Ich meine mit on_chip_memory).