String als Parameter (NC100 Compiler)

Postby frama » Wed Oct 07, 2009 12:00 am

Hallo zusammen,

ich versuche seit einiger Zeit mit der Renesas HEW ein Programm zu erstellen, daß einen Text auf einem LCD Display am SPI ausgibt.
Das funktioniert auch, solange ich die Zeichen einzeln ausgebe, oder als char array bei der Deklarartion zuweise.

Wenn ich aber folgenden Funktionsaufruf mache:
lcdprint("Displaytest");

Macht der Comiler (Version V.1.02 Release 00) folgendes daraus:
FFFF026E B28C0000E0FF MOV.L #0FFE00000H, A0
FFFF0274 BBE7FE JSR.W $lcdprin FFFF015CH

An Adresse 0FFE00000H steht aber nicht der Text "Displaytest", sondern ausschließlich 0xFF und dementsprechend wird eine Folge von "}" ausgegeben.

Bin für jeden Tip dankbar. Ich weiß nicht mehr, was ich noch ausprobieren soll.
frama
 
Posts: 4
Joined: Fri Jan 03, 2014 1:48 pm

Postby frama » Mon Oct 12, 2009 12:00 am

Hallo nochmal,

anscheinend macht der Compiler ja hier das richtige, da ich inzwischen in dem sect100.inc File die Definition der FAR ROM Section gefunden habe:

;-----------------------------------------------------------------------;
; FAR ROM SECTIONS ;
;-----------------------------------------------------------------------;
.sectionrom_FAR, romdata
.org0FFE00000H
rom_FAR_top:

Aber wenn ich das X30 File mit dem KD100 Debugger in den R32 lade, bleibt der Speicherbereich ab 0xFFE00000 leer. Muß ich diesen Bereich vielleicht gesondert laden?

Vermutlich verstehe ich noch nicht so ganz, wie das ganze funktionieren soll. Daher meine Bitte an die Experten um eine kurze Erklärung, wo solche Konstanten im Speicher abgelegt werden und wie sie richtig behandelt werden.

Wie gesagt, jeder Tip kann mir helfen.

Gruß,

Frank
frama
 
Posts: 4
Joined: Fri Jan 03, 2014 1:48 pm

Postby frama » Fri Oct 23, 2009 12:00 am

Hallo Experten,

ich habe das Problem jetzt gelöst, indem ich die Datei sect100.inc (kam von dem LED Blinktest Beispiel) gegen die aus dem Webserver ausgetauscht habe.

Anscheinend ist tatsächlich der schon unten angegebene Bereich dafür zuständig, denn in dem neuen sect100.inc sieht der wie folgt aus:

;-----------------------------------------------------------------------;
; FAR ROM SECTIONS ;
;-----------------------------------------------------------------------;
.section rom_FAR, romdata
.org 0FFFC1000H;0FFF81000H MRE
rom_FAR_top:

Kann mir einer erklären, was das genau bewirkt und warum 0FFE00000H nicht funktioniert?

Besten Dank,

Frank
frama
 
Posts: 4
Joined: Fri Jan 03, 2014 1:48 pm

Postby frankl » Wed Oct 28, 2009 12:00 am

Hallo Frank,
ein R32C/111 hat maximal einen on-chip Flashspeicher von 512KB. Der liegt im Adressbereich 0xFFF80000 - 0xFFFFFFFF.
Wenn die Konstanten an 0xFFE00000 liegen hat der Prozessor keinen Speicher in dem er sie ablegen kann. Und dann ist alles 0xFF.
frankl
 
Posts: 125
Joined: Thu Jan 02, 2014 10:42 am

Postby frama » Wed Oct 28, 2009 12:00 am

Hallo FrankL,

besten Dank erst einmal für den Kommentar. Das hat mir schon etwas weitergeholfen.

Leider habe ich es noch nicht ganz verstanden. Die Speicherbereiche sind ja recht anschaulich auf Seite 19 in der Hardware Dokumentation beschrieben.
Demnach macht es natürlich auch Sinn, bei dem Typ R5F6411FDFN, wie er auf dem Glyn Board eingesetzt wird, den Speicherbereich auf 0FFFC1000H zu setzen, da dieser nur 256KB Flashspeicher hat.
Aber, was ist der Unterschied zwischen der "FAR ROM" und der "NEAR ROM" Section?
Und warum ist bei zwei der drei Beispiele auf der mitgelieferten CD die "FAR ROM SECTION" auf 0FFE00000H gesetzt? Als Grundlage für eigene Versuche eignen sich diese beiden sect100.inc Dateien dann doch recht schlecht.

Als Startpunkt sollte man daher immer die Dateien aus dem OLED Beispiel nehmen, oder?

Gruß,

Frank
frama
 
Posts: 4
Joined: Fri Jan 03, 2014 1:48 pm

Postby frankl » Wed Nov 25, 2009 12:00 am

Hallo Frank,
der Unterschied zwischen "near" und "far" Speicher liegt darin wieviel Platz der Compiler für die Adressierung der Variablen oder Konstaten reserviert. Der Linker des NC100 Compilers kann den Code nicht modifizieren um damit dann Adressen unterschiedlicher Größe einzufügen. Der Compiler muß immer entsprechend Platz reservieren.
Wenn eine Variable als "near" deklariert ist wird eine 16-bit Adresse benutzt. Wird die Variable als "far" deklariert reserviert der Compiler 32 Bit Platz für die Adresse. Die Default-Einstellung beim NC100 ist near für Daten im RAM und far für Daten im ROM.
Der R32C hat die Besonderheit das er den Bereich 0xFFFF8000-0x00007FFF mit 16 Bit adressieren kann und nicht 0x00000000-0x0000FFFF. Daher gibt es in sect100.inc einen Bereich "near_ROM" ab 0xFFFF8000.
Wenn Du in den Compiler-Optionen bei Code Modification die Option "-fNROM" aktivierst werden ROM Daten ab 0xFFFF8000 abgelegt und mit 16 bit adressiert. Dein String landet dann auch da.
frankl
 
Posts: 125
Joined: Thu Jan 02, 2014 10:42 am


Return to R32C-Projekt

Who is online

Users browsing this forum: No registered users and 1 guest