Forum: Compiler & IDEs Problem mit Header-Datei für C Programmierung Microcontroller


von Moritz H. (irgendeiner)


Lesenswert?

hallo,

ich muss für eine prüfung ein codeschloss in c programmieren und zwar 
auf einem microcontroller der familie 8051 (infineon sab80c535-n).
das problem dabei ist, dass ich nicht weiß, wie die ports zu adressieren 
sind. zwar habe ich gegooglet und auch eine header datei gefunden, 
jedoch hat mein compiler (uc51) damit ein problem.

die header datei: http://pastebin.com/1kDcthZC

fehler bei umshell (compiler) "syntax error; found `P1' expecting `;'"
dieser fehler tritt für jede zeile auf.

die reg51.h datei von umshell: http://pastebin.com/dY1H138W
diese datei sowie die reg535.h http://pastebin.com/A7V8S54x
sind bereits bestandteil der installation von uc51 gewesen, sowie die 
dateien
reg51.def: http://pastebin.com/J7nrTf8p
und reg535.def: http://pastebin.com/Tpnftwr1


ich habe keine ahnung, wie ich dieses problem angehen könnte, da meine 
c-fähigkeiten sehr bescheiden sind.
benötigt werden port1, 3, 4, 5 und sie sollten alle bitadressierbar 
sein.
desweiteren habe ich bereits ein codeschloss für den gleichen 
microcontroller in assembler geschrieben, wofür ich eine vom lehrer 
vorgegeben .def datei benutzt habe (http://pastebin.com/fqk2yFEv). also 
wären alle adressen von den ports vorhanden, lediglich wie ich diese in 
c zuweisen muss usw. ist mir ein rätsel...

wäre sehr dankbar, wenn mir jemand bei diesem problem helfen könnte.

gruß irgendeiner

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Du brauchst eine zu Deinem Compiler passende Headerdatei. Die, die Du 
da als erstes angegeben hast, kommt von einem C-Compiler der Firma KEIL, 
den aber scheinst Du nicht zu verwenden.

Die Headerdatei, die Dein Compiler verwendet (die, die Du als zweiten 
Link angegeben hast), funktioniert nicht für sich alleine, sondern setzt 
korrespondierenen Code in einer zu Deinem Compiler gehörenden Library 
voraus.

Auch deswegen unterscheidet sich die Keil-Headerdatei syntaktisch ganz 
erheblich von der Deines Compilers, und ohne den Code in der Library 
nachzubilden, wird es nicht möglich sein, die Keil-Headerdatei in eine 
für Deinen Compiler "verdaubare" umzubauen.

Allerdings sehe ich auch gar keinen Grund dafür, derartiges zu tun - 
Deinem Compiler liegt eine zum von Dir verwandten Controller passende 
Headerdatei bei.

Warum nimmst Du nicht die?

Oder liegt Dein Problem darin, daß Du nicht verstehst, wie Du mit Deinem 
Compiler einen Wert an ein I/O-Register des µC übertragen kannst, nichts 
passendes in der Dokumentation oder den mitgelieferten Beispielen Deines 
Compilers gefunden hast und jetzt auf gut Glück versuchst, ein irgendwo 
in den Weiten des Internets gefundenes Beispiel für einen anderen 
Compiler zum Laufen zu bekommen?

von Moritz H. (irgendeiner)


Lesenswert?

Gelöst!

Ich habe nicht verstanden, wo er die Ports (etc.) genau adressiert. habe 
mir die neuen include-Dateien von UC51 angeschaut und da waren die Ports 
über eine .DEF-Datei adressiert. Diese musste ich jetzt nur durch 
weitere Ports erweitern.

von Moritz H. (irgendeiner)


Lesenswert?

wens noch interessiert:

habe das problem gelöst.

habe eine weiter .DEF datei und neue reg51.h und reg535.h gefunden (in 
einer neueren version von uc51), dort wurden die ports adressiert, wens 
interessiert:

reg535.h: http://pastebin.com/4FKfW5s6
reg51.h: http://pastebin.com/yejaX0tF
reg535.def: http://pastebin.com/78W8m9hs
reg51.def: http://pastebin.com/mCJxzLf6

was mir hier aufgefallen ist, dass die .def dateien direkt eingebunden 
wurden, was bei der reg51.h vom ersten post iwie nicht der fall zu sein 
scheint.

hoffe ich kann anderen damit weiterhelfen.

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.