mikrocontroller.net

Forum: Compiler & IDEs M16C62 Testprogramm


Autor: David G. (ded)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe einen M16C62 Mikrocontroller und möchte als Test einfach nur 
eine Led einschalten, welche an Port 9_5 hängt. Dazu habe ich folgendes 
kleines Programm geschrieben:
#include "sfr62.h"

int main(void)
{
  pd9_5 = 1;
  pu23 = 0;
  p9_5 = 0;
  return 0;
}
Dieses habe ich dann mit MinGW compiliert und mit dem M16C-Flasher auf 
den Controller geflasht. Allerdings tut sich überhaupt nichts. Jetzt 
meine Frage: ist mein Programm falsch oder können evtl. beim compilieren 
oder flashen Fehler aufgetreten sein? Oder gibts beim M16 vllt. noch 
irgendetwas anderes was man beachten müsste? Danke.

MfG David

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Usermanual 
(http://www.eng.newcastle.edu.au/eecs/ect/TurnerWeb... 
Seite 172, PDF s. 188) steht:

"Note: Set bit 2 of protect register (address 000A) to "1" before 
rewriting to the P9 direction register."
#include "sfr62.h"
 
int main(void)
{
  prcr = 1<<2; // Seite 50 (PDF S. 66)
  pd9_5 = 1;   // IO-Pin Ausgang
  pu23 = 0;    // interner Pullup an P9.4 bis P9.7 aus
  p9_5 = 0;    // Ausgang LOW => LED in active low Schaltung
  for(;;);
  return 0;
}

Hardware: LED active low

                R      LED
µC P9.5 )------###-----|<-------( Vcc

> Dieses habe ich dann mit MinGW compiliert und mit dem M16C-Flasher auf
> den Controller geflasht.

Der MinGW kann als Crosscompiler für M16C62 verwendet werden? Wusste ich 
gar nicht. Dachte immer, man braucht die Tools von Mitsubishi/Renesas 
oder die KPIT GNU Toolchain dafür.

Autor: David G. (ded)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erst einmal danke für deine Antwort.
Hab das Programm genauso versucht, wie du es gepostet hast, funktioniert 
aber immer noch nicht. Woran könnte das noch liegen?

Autor: David G. (ded)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wegen dem Compiler: meiner Meinung nach müsste das doch mit jedem 
Compiler funktionieren, der die entsprechenden .bin bzw .mot Files 
erzeugen kann.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie geschrieben, kenne ich das nicht. Mir sind nur C-Crosscompiler für 
das M16C Target von KPIT (GCC), Renesas/Mitsubishi, Tasking und IAR 
bekannt.

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Woran könnte das noch liegen?

Kontrolliere ob dein Prozessor prc2 nicht wieder zuruecksetzt wenn
danach ein anderer Befehl kommt. (ein R32 macht das!)
Dann pruefe bei jedem Registerzugriff ob dieses Register nicht
ein prc2=1 braucht und wenn noetig dann setze es vor jedem zugriff.

Oh..und schalte natuerlich die IRQs ab!

Olaf

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Dachte immer, man braucht die Tools von Mitsubishi/Renesas
> oder die KPIT GNU Toolchain dafür.

Fuer die R8C/M16C/M32C kannst du dir auch einfach den Source
des gcc runterladen und alles selber uebersetzen. BTDT. :-)

Was nicht geht, zumindest derzeit ist R32C.

Olaf

Autor: David G. (ded)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube der Fehler liegt wo anders. Ich hab ein einfaches "Hello 
World" geschrieben und mit MinGW compiliert. Die erzeugte .exe 
funktioniert auch. Da der M16C-Flasher aber hex-files verlangt, hab ich 
die .exe mit objcopy -O ihex test.exe test.hex in ein hex-file 
umgewandelt. Das ist allerdings 12kb groß und mit völlig wirrem Inhalt. 
Daher vermute ich, dass auch meine hex vom Led-Programm falsch war. Weiß 
jemand was falsch sein könnte?

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
David G. schrieb:
> Die erzeugte .exe funktioniert auch.

Dann ist das ein i386-Compiler und keiner für M16C.

Du kannst nicht einfach irgendeinen Compiler nehmen, du musst schon 
einen nehmen, der Code für genau den Prozessor erzeugt, auf dem er dann 
auch laufen soll.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daher mein Stutzen bei deiner Beschreibung, dass du MinGW benutzt.

Vermutlich verwendest du die Toolchain für das Target x86 (Windows) als 
Toolchain für das Target M16C. Schlimmer noch du arbeitest nur die x86 
Ausgabe in eine illegale M16C Ausgabe um. Du könntest dem M16C genauso 
gut die Tageszeitung als HEX-datei flashen :)

Der richtige Weg ist: M16C Toolchain installieren und damit M16C 
Programme erzeugen. Welche Toolchains es gibt, siehe oben.

KPIT GCC ist nervig wegen der Zwangsregistrierung dort, aber kostenlos. 
Renesas/Mitsubishi gibt eine zeitlich eingeschränkte Demoversion raus 
(nach Ablauf Beschränkung der Codegröße), Tasking und IAR kosten 
(heftig).

Selbstübersetzen des GNU GCC, wie Olaf schreibt, ist auch ein Weg. Man 
muss dann halt schauen, woher man kompatible Libraries, Startup-Dateien, 
Includedateien, Linkercontrolscripte bekommt. Für Anfänger ist das 
Hardcore.

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Selbstübersetzen des GNU GCC, wie Olaf schreibt, ist auch ein Weg. Man
> muss dann halt schauen, woher man kompatible Libraries, Startup-Dateien,
> Includedateien, Linkercontrolscripte bekommt.

Im Prinzip muss man sich nur das Linkerscript und Startup selber 
schreiben.
Der ganze Rest ist so verfuegbar....

> Für Anfänger ist das Hardcore.

...aber fuer jemanden der M16C mit einem X86 Compiler uebersetzen
ist das aeh..nicht denkbar. =:-)

olaf

Autor: David G. (ded)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mh...ist natürlich ein ziemlicher blöder Fehler:-) Hab bis jetzt nur 
Avr's programmiert und von dem M16 noch recht wenig Ahnung. Daher vielen 
Dank für eure Hilfe.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.