Forum: Mikrocontroller und Digitale Elektronik Program ROM R8C25


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Michael (Gast)


Lesenswert?

Guten Tag,

ich habe schon seit einigen Jahren den R8C/13 im Einsatz. Nun wurde 
aufgrund des mehr benötigten Speicherbedarfs (Programmspeicher) auf 
einen R8C/25 umgestellt. Diese Umstellung bedarf eine Anpassung der 
Speicheradresse "Near ROM area" in der sect30.inc. Setze ich diese wie 
vorgegeben auf den Wert 04000h zeigt der Compiler zwar keinen Fehler an, 
aber das Programm läuft nicht mehr. Auch der Debug-Modus hängt sich nach 
dem Aufspielen der Monitoring-Firmware auf. Setze ich diesen Wert wieder 
auf 16k (0e000h) funktioniert alles tadellos.
Hat da jemand evtl. eine Idee oder Beispieldatei dazu?

Danke

Michael

von Olaf (Gast)


Lesenswert?

> Hat da jemand evtl. eine Idee oder Beispieldatei dazu?

Hm..also ich kenne den R8C25 jetzt nicht, aber wenn du Adressen 
verschiebst dann solltest du das in HEW machen. Renesas hat eine ganze 
menge Sections die dann alle auf einmal angepasst werden. Schau also mal 
in den Linkereinstellungen nach. Wenn du nur eine Section irgendwo in 
einer Datei von Hand verschiebst dann kann es sein das sich die anderen 
Sections nicht angesprochen fuehlen.

Olaf

von Michael (Gast)


Lesenswert?

Hi,

viellecht gibt es ja jemanden der sich mit irgendeinem Controller von 
Renesas auskennt. Da ich die sect30.inc Datei vom R8C13 benutze und 
diese auch schon mal im Programm ROM Bereich angepasst habe, dachte ich 
das es diesmal auch funktioniert.
Die damalige Datei für den R8C13 hatte Standardmäßig 8k eingestellt, 
durch anpassen des Wert auf 16k, konnte man den kompletten Bereich 
benutzen. Die Datei sollte (laut Hersteller) für alle Controller der 
Familie gleich sein, was bis 16k auch prima funktioniert. Wenn ich aber 
den Bereich nun größer mache, geht gar nichts mehr.

Evtl. hat jemand eine Datei eines Controllers, einer anderen Gruppe mit 
mehr als 16k???

Michael

von Volker Z. (vza)


Lesenswert?

Den R8C25 gibt es mit 16k,24k,32k,48k und 64k Flash-ROM.
Bitte nenne den genauen Typ.

Poste auch mal deine sect30.inc  , da ich mich eher mit den M16Cxx aus 
kenne.

Volker

von Michael (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

der Controller ist ein R8C/25 mit 64k Speicher. Die genaue Bezeichnung 
des IC lautet: R6F21258SNFP.
Da der Programmspeicher in zwei voneinander getrennte Blöcke aufgeteilt 
ist, würde es mir reichen für den Anfang nur 48k benutzen zu können.
Die Größe habe ich immer in der Zeile 616 geändert.
Wenn ich diese Datei (sect30.inc) mit 16k betreibe, funktioniert alles 
tadellos. Ab 16k aufwärts geht nichts mehr.
Ich habe mal auch die Speicheraufteilung des Controllers angehängt. Da 
sieht man (meiner Meinung nach) auch, das es mit der Änderung der 
maximalen ROM Adresse getan sein müsste.

Danke

Michael

von Michael (Gast)


Lesenswert?

Der M16C sollte laut Renesas von der Struktur her mit der R8C/Tiny 
Familie gleich sein. Angeblich macht es keinen Unterschied, ob man im 
HEW den M16C oder R8C auswählt. Die Dateien, die angelegt werden sind 
die gleichen.

Michael

von Olaf (Gast)


Lesenswert?

> Da ich die sect30.inc Datei vom R8C13 benutze und
> diese auch schon mal im Programm ROM Bereich angepasst habe,
> dachte ich das es diesmal auch funktioniert.

Ich denke das es ziemlicher Murks ist den du da veranstaltest. Zu faul 
mal die Doku zu HEW zu lesen?

Die richtige Vorgehensweise waere es wohl wenn du einfach mal ein neues 
Projekt erzeugst und da angibst welche CPU du hast. Dann erzeugt dir 
naemlich HEW alle diese Files genau passend zu deiner CPU.
Das rueberkopieren irgendwelcher alten Dateien von einer anderen CPU ist 
jedenfalls ganz gewiss nicht zielfuehrend.

Olaf

von Olaf (Gast)


Lesenswert?

> Der M16C sollte laut Renesas von der Struktur her mit der R8C/Tiny
> Familie gleich sein. Angeblich macht es keinen Unterschied, ob man im
> HEW den M16C oder R8C auswählt. Die Dateien, die angelegt werden sind
> die gleichen.

Das stimmt so leider auch nicht. Der Prozessorkern ist identisch. Aber 
die einzelnen Controller koennen sich in den notwendigen 
Initialisierungen ganz deutlich unterscheiden. Und selbst fuer denselben 
Controller koennen sich die Dateien schon deutlich unterscheiden, je 
nachdem ob man Assembler oder C-Code Startups auswaeehlt und auch 
abhaengid davon wie alt die HEW-Version gerade so ist.

Olaf

von Michael (Gast)


Lesenswert?

Also ich habe jetzt mal (wie vorgeschlagen) ein neues Projekt mit der 
Angabe der richtigen CPU gemacht und es funktioniert leider immer noch 
nicht. Da es die CPU ja auch in verschiedenen Speichergrößen gibt 
(16k-64k) ist in der sect30.inc auch nur der kleinste Wert eingetragen!

Und NEIN ich bin nicht zu faul im Datenblatt nachzuschauen, sondern 
komme mit meinen doch recht spärlichen Kenntnissen einfach nicht 
weiter...
Sonst würde ich ja hier nicht fragen.

Habe dann auch mal die sect30.inc (neues Projekt) mit der des alten 
mittels Vergleichprogramm vergleichen lassen und siehe da.... sie 
unterscheiden sich nicht voneinander.

Wäre aber trotzdem gut, wenn da jemand noch eine Idee bzw. 
Lösungsvorschlag hätte.

Michael

von Volker Z. (vza)


Lesenswert?

Michael schrieb:
> Wäre aber trotzdem gut, wenn da jemand noch eine Idee bzw.
> Lösungsvorschlag hätte.

Hier ein "Fallstrick" der mir beim M16C-Serie einfallen würden:

ROM einblenden. Bei den Großen (mit viel Flash) müssen erst 
Flach-Bereiche eingeblendet werden, bevor man sie benutzen kann.

Im "Processor mode register 1" (M16C) gibt hier für ein geschütztes Bit.

Bitte prüfe ob dies auch beim R8C25 so ist.

von M2 (Gast)


Lesenswert?

Starte mal den MapViewer und öffne deine *.mot Datei, evtl. kannst du da 
irgendetwas erkennen.

von Michael (Gast)


Lesenswert?

Hi,

ich bin hier bald mit meinem Latein am Ende. Auch der Renesas Support 
lässt lange auf eine Antwort warten. Kein wirkliches Vergnügen.

Ich habe mal nach dem Processor mode Register geschaut und bin auch 
fündig geworden. Allerdings ähnelt dieses Register nicht dem des M16C. 
Dafür habe ich aber mehrere "Flash Memory Control Register" & und ein 
"Optional Function Register" gefunden. So richtig durchsteigen tue ich 
da allerdings nicht. Das letztere Register ähnelt wohl dem des M16C. 
Dort kann man einen ROM Code Protect ein und ausschalten. Scheint aber 
wohl nicht zu funktionieren.
Der mitgelieferten Map Viewer scheint bei mir nicht richtig zu laufen. 
Egal welche Datei (auch von Beispielprojekten) ich versuche zu öffnen, 
kommt immer ein Fehler, der auf eine dll verweist. Auch eine 
Neuinstallation hat nichts bewirkt.

Vielleicht hat ja jemand eine funktionierende sect30.inc bzw. kann mir 
seine Vorgehensweise für einen Controller der R8C/Tiny-Serie erklären. 
Oder Ihr habt noch ganz andere Ideen. Ich kann auch gerne mal das 
komplette Project per mail posten.

In der Firma habe ich auch schon mehrere Personen, die sich mit 
Controllern auskennen (allerdings nicht mit Renesas) gefragt. Auch hier 
ist man ratlos.

Ihr seit also meine letzte Hilfe!!!!

Michael

von Olaf (Gast)


Lesenswert?

> ich bin hier bald mit meinem Latein am Ende. Auch der Renesas Support
> lässt lange auf eine Antwort warten.

Also meine Erfahrung ist das sie sofort jede Frage kompetent 
beantworten. Und in den wenigen Faellen wo es nicht bereits im ersten 
Telefongespraech klappt da rufen sie auch zurueck.

> Vielleicht hat ja jemand eine funktionierende sect30.inc bzw. kann mir
> seine Vorgehensweise für einen Controller der R8C/Tiny-Serie erklären.

Das habe ich doch schon. Ich benutze den R8C29 und lege einfach ein 
neues Projekt an. Oh..allerdings habe ich garkeine sect30.inc. Das 
duerfte IMHO daran liegen das ich 'Startupfiles als C' beim Projekt 
generieren auswaehle.
Und wie ich dir auch schon erklaert habe, es bringt nichts wenn du in 
den Files rumfummelst. Der HEW muss wissen wo er die Sektion hinlegt und 
wie gross sie sind. Er muss ja z.B auch die Position des Debuggers 
anpassen.

Olaf

von Michael (Gast)


Lesenswert?

Prima,

also noch mal von ganz vorn.

HEW öffnen... New Workspace... C source startup Application... Workspace 
Name eingeben CPU-Family M16C Toolchain Renesas M16C Standard. (was 
anderes geht ja eh nicht). Dann auf OK

Warnmeldung "The data holder of the selected toolchain was not detected"

OK

und dann habe ich keinerlei Möglichkeit eine CPU auszuwählen.

Ich glaube ich muss das alles mal deinstallieren und komplett neu 
installieren.

Oder bekomme ich das Tool Chain irgendwo her?

Michael

von Michael (Gast)


Lesenswert?

soooo...

ich habe jetzt alles deinstalliert, die neusten Testversionen von 
Renesas runter geladen und alles installiert. Jetzt konnte ich auch 
endlich einen neuen Workspace erstellen und meinen Controller mit 
entsprechender Größe auswählen. Soweit so gut.
Den neuen FDT runter geladen und in meinen Controller geflasht. Das 
Flashen funktionierte einwandfrei. Nur das Programm macht leider nichts. 
Dann habe ich versucht mit dem Debugger das Programm anzuschauen, aber 
das funktioniert mal gar nicht. Nach dem Aufspielen der Firmware hängt 
sich der Debugger auf.

Ich raste noch bald auf, wenn ich nicht wenigstens ein Lebenszeichen 
bekommen. :-(

Der MapViewer funktioniert jetzt auch endlich. Erkennen kann ich da aber 
nicht wirklich viel drauf.

Hat noch jemand eine Idee, vorschlag, Vorgehensweise, 
Telefonsupport.....

Michael

von (prx) A. K. (prx)


Lesenswert?

Michael schrieb:

> Der M16C sollte laut Renesas von der Struktur her mit der R8C/Tiny
> Familie gleich sein.

Im Prinzip schon, aber bei den kleineren R8C mit überschaubaren 
ROM-Grössen liegen RAM+ROM zusammen in den ersten 64KB. Bei grösseren 
Modellen nicht mehr. Wer beim Programmieren nicht drauf achtet, ROM- und 
RAM-Pointer sauber zu unterscheiden, der kann bei der Migration bös auf 
die Nase fallen.

von Olaf (Gast)


Lesenswert?

> Den neuen FDT runter geladen und in meinen Controller geflasht.
> Das Flashen funktionierte einwandfrei.

Erklaer das mal genauer. Ich sollte vielleicht noch erwaehnen das ich 
unter dem HEW nur mit dem E8 arbeite und dann funktioniert auch alles.

Wenn ich das richtig verstehe dann benutzt du noch das tool ueber die 
RS232 arbeitet? Wenn ja dann ist es wahrscheinlich sehr wichtig das es 
mit deiner CPU harmoniert. (upgedatet?)
Unter Linux benutze ich ebenfalls die RS232 zum flashen und ich musste 
da erst letztens meinen Flasher patchen. Die verschiedenen 
Debug-Frontends in den Renesas-CPUs scheinen zwar sehr kompatibel zu 
sein, aber die groesse und Position der Flashbloecke ist es nicht.

Wenn du aber auch mit dem E8 arbeitest dann pruefe mal im Connectfenster 
die Groesse und Position des Rams fuer den Debugger.

Olaf

von Michael (Gast)


Lesenswert?

Also....
Nach vielen Versuchen ist es mir endlich gelungen das der Controller im 
geflashten Zustand LED' s ein und ausschaltet bzw. Über die UART ein 
Zeichen sendet. Der Debug Modus mit dem KD30 funktionier immer noch 
nicht. Wenn man den Debugger starten möchte, muss man die entsprechende 
MCU auswählen. Leider gibt es im Standardverzichnis des KD30 keine 
passende MCU. Also habe ich eine aus dem Internet geladen, die er auch 
annimmt, sich dann aber wieder aufhängt.
Was mir im flashmodus bzw. Beim compilieren aufgefallen ist.... Ich habe 
meine alte UART senderoutine eingefügt. Diese ist eine eigenständige 
Funktion, der Länge des Strings und der eigentliche String übermittelt 
bekommt. Der Zu übermittelnde String ist ein Pointer auf eine angelegte 
variable. Compiliere ich nun, meldet mir der Compiler ein Fehler wegen 
des Pointer. Warum habe ich bisher noch nicht rausfinden können. 
Einzelne Buchstaben senden funktioniert, ganze Strangs noch nicht.

Das mit dem Debugger ist s ne Sache. Den E8 kenne bzw. Habe ich nicht. 
Der E8 ist doch ein Emulator, oder? Also eine Box die zwischengeschaltet 
wird? Der KD30 arbeitet über die rs232.

Michael

von Michael (Gast)


Lesenswert?

Das mit dem Pointer abe ich nun auch rausgefunden. Dieser sollte als 
const char und nicht nur als char deklariert werden.

Somit wäre da noch das Problem mit dem Debugger. Lohnt sich das mit dem 
E8?? Was kostet sowas?

Michael

von Olaf (Gast)


Lesenswert?

> Leider gibt es im Standardverzichnis des KD30 keine
> passende MCU.

Du benutzt also einen Debugger der deine CPU nicht kennt und wunderst 
dich das es nicht geht? Findest du das nicht etwas naiv?

> Der Zu übermittelnde String ist ein Pointer auf eine angelegte
> variable. Compiliere ich nun, meldet mir der Compiler ein
> Fehler wegen des Pointer.

Glaubst du es macht sinn anderen von deinen Fehlern zu erzaehlen und die 
Fehlermeldung zu verschweigen?
Wenn ich mal extra fuer dich einen Hamster aufschneide dann wuerde ich 
aus den Eingeweiden lesen das du dich ueber far/near infomieren willst.

> Der E8 ist doch ein Emulator, oder?

Der E8 ist eine Mischung aus Programmer und Debugger. Der 
Hauptunterschied duerfte darin bestehen das er ein syncrones Protokoll 
fahren kann. Ausserdem vermute ich mal das dein R8C bereits ueber 
Mode/Reset geflasht werden kann. Dann kann er Leitungen am Prozessor 
einsparen.

Olaf

von Michael (Gast)


Lesenswert?

> Du benutzt also einen Debugger der deine CPU nicht kennt und wunderst
> dich das es nicht geht? Findest du das nicht etwas naiv?

Der Debugger sollte laut Datenblatt die CPU kennen, deshalb habe ich ja 
die passenden MCU runter geladen. Das funktionierte aber leider immer 
noch nicht.

> Glaubst du es macht sinn anderen von deinen Fehlern zu erzaehlen und die
> Fehlermeldung zu verschweigen?
> Wenn ich mal extra fuer dich einen Hamster aufschneide dann wuerde ich
> aus den Eingeweiden lesen das du dich ueber far/near infomieren willst.

far pointer (implicitly) casted by near pointer

sorry! Habe die Nachricht vom ipad geschrieben und hatte die passende 
Fehlermeldung nicht parat. Kann in dem Eifer passieren.

> Ausserdem vermute ich mal das dein R8C bereits ueber
> Mode/Reset geflasht werden kann.

Soweit ich weiss kann er das.

Abgesehen vom nicht funktionierenden Debugger quäle ich mich gerade mit 
der Interruptfunktion für die UART0 receive. Bei dem R8C13 hatte das 
prima funktioniert. Hier scheint er wohl nicht in die Routine zu 
springen. Mal schauen an was das wieder liegt. Leider nur sehr schwer 
ohne Debugger.
So geht eins ins andere.....

> Olaf
Danke für die regelmäßigen Antworten

Michael

von Michael (Gast)


Lesenswert?

Guten Morgen,

das Interruptproblem habe ich auch gelöst bekommen. Man muss den 
Interrupt nach der UART initialisierung auch wieder einschalten, wenn 
man ihn zuvor ausgeschaltet hat. Dann funktioniert auch alles wieder.

So, jetzt zum Debugger.
Das was ich rausgefunden habe, ist das der KD30 (auch wenn man die 
passende MCU downloaden kann) nicht mehr supportet wird, bzw. dann auch 
nicht mehr für den R8c25 funktioniert. Leider, denn er war einfach zu 
bedienen und funktionierte tadellos. Das HEW liefert aber einen Debugger 
mit, der direkt mit im HEW eingebunden ist. Leider komme ich damit 
überhaupt nicht klar, also muss ein anderer her.

> Olaf
Noch mal genauer zu dem E8.
Wenn ich mir den kaufe, denke ich das alles wieder funktioniert. Kann 
man "online" Variablen anschauen, dessen Werte verändert, Breakpoints 
setzten usw?
Ich denke schon, sonst wäre es kein Debugger :-)
Hast Du eine Ahnung woher ich den bekomme? Habe mal einfach in Google 
gesucht, bin aber noch nicht wirklich fündig geworden. Oder ist das 
schon wieder ein altes Modell und es gibt mitlerweile einen neuen.

Die nächste Frage wäre, woher bekomme ich eine aktuelle Studentenversion 
des HEW?

Danke

Michael

von gk (Gast)


Lesenswert?

Den E8a bekommst Du z.B. von Glyn und MSC. Der kostet, glaube, ich so um 
die 180 €. Im Bundle mit einem Starterkit ist er aber meist günstiger, 
z.B.

http://www.msc-ge.com/de/314-www.html

und da ist die HEW mit dabei, sowie ein EV-Board. (Alle Preise + MWSt.) 
Der HEW-Debugger kann im Prinzip auch das, was der KD30 kann.

gk

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
Noch kein Account? Hier anmelden.