C für 8051

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From German to

Threaded View
Hallo!

nachdem mich mein neues Buch über C für Mikrocontroller
enttäsucht hat, dachte ich mir, frag doch mal die NG.

Ich suche FÜR ANFÄNGER eine Einführung in C mit der Prämisse
auf Microcontroller der 8051 Reihe.    <-----------
Also auch deren speziellen Sachen und MIT Beispielen.   <-----------
(wenn es geht mit Erklärung zu den Programmier Beispielen)

Ich habe keinerlei Vorkenntnisse in C (Ass und Basic schon) !

Suche dahingehend gute Links im Netz, die Bücher sind ja dahingehend
nicht zu gebrauchen.

Herzlichen Dank imVoraus!


by W.



Re: C für 8051
http://sdcc.sourceforge.net
Free C compiler for 8051.
Mit links zu Projekte
--
Evert Vrieze
tel. +31.40.2128359

We've slightly trimmed the long signature. Click to see the full one.
Re: C für 8051

Quoted text here. Click to load it

Vergiss Bücher, ein einfaches kleines Taschenbucch zum Nachschlagen
über  C reicht völlig, wenn Du schon eine Programmiersprache kennst.
Schau Dir einfach die verschiedenen Datentypen an und wofür man die
braucht, bzw. wie Schleifen  (welche Schlüsselwörter) aufgebaut sind.
Dann noch ein Kapittel über Zeiger und das war's dann auch schon. Mehr
gibt es in C nicht.

Speziell zum Controller schau Dir einfach die Beispiele an, die der
Compilerhersteller mitliefert oder nimm ein anderes fertiges Programm
und versuche es zu verstehen und nachzuvollziehen.
Wenn Du dabei an irgendeiner konkreten Stelle  nicht mehr weiter
kommst, dann melde Dich mit einem Beispiel hier und Dir wird geholfen.


Tschö
   Dirk

Re: C für 8051

Quoted text here. Click to load it


Also da überschätzt Du das ganze völlig. Du hast Doch geschrieben,
dass Du schon mal programmiert hast.

Du brauchst: für den Anfang:
Definitionen, Deklarationen, Schleifen(Kopf- Fußgesteuert). Arithmetik
(+,-,/,%,*,++,--,>,<,>>,<<)  Logik(|,&,^,!)(später noch Pointer)und
ein paar Funktionsaufrufe aus stdlib,h, string.h evtl. noch stdio.h.

Alles andere ist compiler-/prozessorspezifisch und dürfte kaum in
einem Buch zu finden sein. Dafür gibt's dann die Beispiele dazu.


Quoted text here. Click to load it

Nicht doch. Einfach ausprobieren.
Nimm einfertiges Beispiel und fang an es zu ergänzen und abzuändern.
Dabei immer schön auf die Fehler und Warnungen des Compilers
achtgeben.

Tschö
    Dirk

Re: C für 8051

Quoted text here. Click to load it

Es hängt davon ab, wie Dein Compiler arbeitet (spezifisch) und was Dir
der Hersteller schon mitliefert.

Meist gibt es irgendwo eine sfr.h (special function register) die
eingebunden wird. Da stehen dann so Sachen drin wie:

#define    P5    0x20

d.h. dass P5 als Adresse 0x20 (z.B. Port5 ist ein Register, dass auf
Adresse 0x20 liegt) definiert wird usw.

entspricht::
    EQU    P5    0x20

Quoted text here. Click to load it

    y = P5;
    P5=y;

Meist ist dann noch jedes einzelne Bit auf dem Port nochmals extra
definiert.

Quoted text here. Click to load it

    if( P5_2)

Testet ob Pin 2 auf Port 5 == 1 ist.
Oder z.B.

    while( !P5_3);

wartet solange bis P5_3  High wird (z.B. Taster gedrückt).



Quoted text here. Click to load it

Wird eher weniger sein als bei Assembler, da der Compiler schon viele
falsche Dinge erkennt, die Dein Assembler völlig ignoriert.


Tschö
   Dirk

Re: C für 8051

Quoted text here. Click to load it

Würde ich so grundsätzlich nicht stehen lassen. Hängt sehr stark von
der Anwendung ab, die ich in diesem Beispiel extra nicht ausgeführt
habe.
Oder was sollte z.B. ein Controller machen, der darauf wartet, das das
Gerät eingeschaltet wird (Standby -> On). Ok er könnte selbst im
Standby sein und auf externe Interrupts warten ...


Tschö
   Dirk

Re: C für 8051
Quoted text here. Click to load it

Bei welchem Compiler? Da '.' eigentlich ein C-Operator ist sollte einem das
von jedem C-Compiler um die Ohren gehauen werden. P1_0 ist die Notation die
ich kenne.



--
Matthias Weißer
snipped-for-privacy@matwei.de
We've slightly trimmed the long signature. Click to see the full one.
Re: C für 8051


Quoted text here. Click to load it


Geht schon. Auch der 8051 hat ein paar Register, die bitadressierbar
sind. Einfache eine Struktur auf das Register setzen ...


Tschö
   Dirk

Re: C =?iso-8859-15?Q?f=FCr?= 8051
Quoted text here. Click to load it

Wenn P1 eine Union mit einem Bitfeld ist, dann sollte zumindest etwas
wie P1.bit0 gehen. Ich bin mir nicht ganz sicher ob auch Zahlen als
Namen für Bitvariablen in ISO C erlaubt sind, vermutlich nicht. Sicher
wird das manche Compiler nicht davon abhalten eine solche Schreibweise
zu erlauben, aber wenn man das Programm dann portieren muss hat man ein
Problem.

--
AVR-Tutorial, über 350 Links
Forum für AVRGCC und MSPGCC
We've slightly trimmed the long signature. Click to see the full one.
Re: C für 8051
Quoted text here. Click to load it

Dann ist der IAR-Compiler kaputt. Selbst als Präprozessormakro wird das vom
GCC nicht aktzeptiert.



--
Matthias Weißer
snipped-for-privacy@matwei.de
We've slightly trimmed the long signature. Click to see the full one.
Re: C für 8051
Quoted text here. Click to load it

Interpreter? Für C? C ist eine Compilersprache. Der Compiler läuft z.B. auf
einem PC und erzeugt eine ASM-Datei die dann vom Assembler und Linker z.B.
in eine HEX-Datei verwandelt wird. Diese spielst du auf den Controller und
gut.



--
Matthias Weißer
snipped-for-privacy@matwei.de
We've slightly trimmed the long signature. Click to see the full one.
Re: C für 8051
Quoted text here. Click to load it

Aber C wird zu mindestens 95% Prozent (eher gegen 100%) compiliert und nicht
interpretiert. Es mag aber auch für C Interpreter geben was aber eher
ungewönlich ist. Für BASIC ist das alles andere als ungewöhnlich.

Quoted text here. Click to load it

Schreib ich irgendwas von Betriebsystem? Hast du das z.B. übersehen?
Natürlich kann ein Compiler auch in deinem Kopf "laufen"

Quoted text here. Click to load it

Mag sein. Wird der heute _ernsthaft_ eingesetzt?

Quoted text here. Click to load it

Klar findet man immer Beispiele bei denen das nicht so ist. Aber macht das
Sinn in einer kurzen Antwort das alles zu erwähnen? Auch hier gilt: Bei 95%
aller heutigen C Compiler läuft es nach obigem Schema
Compiler->Assembler->Linker



--
Matthias Weißer
snipped-for-privacy@matwei.de
We've slightly trimmed the long signature. Click to see the full one.
Re: C für 8051
^^^^^^^^^

Bitte den Realnamen setzen, alles andere gilt im Usenet
als unhöflich. Danke.

Quoted text here. Click to load it

Da wirst Du kein gutes Buch finden. Eine Sprache sollte
man niemals abhängig von einer CPU oder einem OS lernen.
Lerne zuerst die Sprache ANSI C und für den Rest braucht
man kein Buch: wer C programmieren kann, kann jede CPU
in C programmieren (die Erweiterungen des Keil Compilers
für den 8051 sind z.B. relativ klein).

Quoted text here. Click to load it

Du willst Dir "Kernighan & Ritchie, Programmieren in C,
2. Aufl." kaufen.

Quoted text here. Click to load it

Dann solltest Du die Sprache zuerst auf einem System mit
einem guten Debugger erlernen: also auf dem PC.

Quoted text here. Click to load it

Im Netz wirst Du da nichts finden.

cu, Marco

--
S: Minolta: Winkelsucher (VN), VC-9

E-Mail: snipped-for-privacy@linuxhaven.de
We've slightly trimmed the long signature. Click to see the full one.
Re: C für 8051

Quoted text here. Click to load it
ANSI C (ISO C) kennt beispielsweise keine I/O-Zugriffe, ist eine
reine Intellektuellen-Sprache für Informatiker. Man versuche nur
einmal in den üblichen C-Newsgroups eine Frage nach Portzugriffen
zu stellen... BTDT :->

Für Anfänger empfehle ich vielmehr einen der üblichen Compiler:
Für Jemanden, der vor der Kommandozeile keine Angst hat, ist der
GCC brauchbar (und anspruchsvoll) - hier insbesondere der AVR-GCC,
der wie der Name schon sagt, für die AVR-Controller-Familie
angepasst wurde. Hierfür gibt es zig Beispiele und Sourcen im
Internet und jede Menge Hilfen.

Quoted text here. Click to load it
Davon ist heute sehr abzuraten. Abgesehen von der sehr schludrigen
Übersetzung (der Übersetzer konnte kein Deutsch) ist das Kernighan
und Ritchie-"C" eher von historischem Wert. Leider kenne ich noch
kein Standardwerk zu C99 - dem aktuellen C-Derivat, das international
von ANSI und ISO als Standard anerkannt ist - welches heute inzwischen
von fast allen modernen Compilern zumindest teilweise unterstützt wird
(erkennt man u.a. daran, dass Kommentare mit // abgetrennt werden
können, was von C++ übernommen wurde; es gibt aber auch noch andere
nützliche Ergänzungen).

Quoted text here. Click to load it
Interessante Theorie...

Thomas.

Re: C für 8051

Quoted text here. Click to load it

Das ist so pauschal z.B. schon mal völliger Blödsinn. Nicht selten
wird sowas z.B. über bestimmte Memory Adressen gemacht und das
geht sogar mit Standard ANSI C:

  unsigned char *video_mem = 0x232323;

  video_mem[0] = 0x00;
  ...

Ansonsten sehen z.B. Portzugriffe sowieso auf jedem System und
bei jedem Compiler anders aus. Aber wenn man bereits ANSI C
kann, ist es kein Problem, sich die dafür notwendigen, proprietären
APIs in 5 Minuten anzueignen:

  unsigned char a;
  a = inp (0x50);

Quoted text here. Click to load it

Du solltest Dich vorher bitte mal richtig informieren, bevor Du
einem Einsteiger einen solchen Unfug erzählst. Das wichtigste in
der Entwicklung ist übertragbares Grundlagenwissen. Wer ANSI C
kann, kann eigentlich alle Embedded Systeme ohne große Einarbeitung
programmieren.

Leute, die nur einen bestimmten Compiler wie z.B. Keil kennen,
sind dagegen in der Praxis nicht zu gebrauchen.

Quoted text here. Click to load it

Nein, das sollte man nicht versuchen, da das dort nicht
hingehört. Nur was hat das jetzt mit dem Thema zu tun?
Sprechen wir hier von irgendwelchem Gehacke oder von einer
prof. Herangehensweise?

Quoted text here. Click to load it

Ach und der gcc ist kein ANSI C/C++ Compiler? Interessante These.
Mal davon abgesehen, daß der gcc für die gewünschte 8051 Ziel-
architektur nicht geeignet ist.

Quoted text here. Click to load it

Jede, der etwas Ahnung von C-Programmierung hat, wird Dir hier ganz
sicher nicht zustimmen. Das Buch ist nicht ohne Grund die Bibel der
C Programmierer. Weitere Bücher zu C wird man in der Regel nicht
benötigen.

Quoted text here. Click to load it

Kannst Du Dich bitte mal informieren? Das Buch beschreibt keineswegs
K&R-C sondern ANSI-C.

Quoted text here. Click to load it

Wofür brauchst Du im Embedded Bereich bitte C99?

Quoted text here. Click to load it

ROTFL, na klar. Mal abgesehen vom gcc dürfte es wenige, verbreitete
Compiler geben, die überhaupt was von C99 unterstützen (mal von den
C++ Kommentaren abgesehen).

Quoted text here. Click to load it

Dazu sage ich jetzt lieber nichts.

--
S: Minolta: Winkelsucher (VN), VC-9

E-Mail: snipped-for-privacy@linuxhaven.de
We've slightly trimmed the long signature. Click to see the full one.
Re: C =?iso-8859-1?Q?f=FCr?= 8051
Quoted text here. Click to load it
Den "Willi" hat in der email-Adresse.

Quoted text here. Click to load it
Die Programmiersprache C ist nicht eben leicht erlernbar
und dieses Buch ist als Einführung eher unangenehm.
Es wurde ehdem immer empfohlen, weil es kaum Alternativen
gab.

MfG  JRD

Re: C für 8051

Quoted text here. Click to load it

Hängt vom Grundlagenwissen und von Lehrmaterial ab.

Quoted text here. Click to load it

Warum?

Quoted text here. Click to load it

Ich würde dieses Buch uneingeschränkt empfehlen. Es
wird IHMO alles sehr anschaulich erklärt.

cu, Marco

--
S: Minolta: Winkelsucher (VN), VC-9

E-Mail: snipped-for-privacy@linuxhaven.de
We've slightly trimmed the long signature. Click to see the full one.
Re: C =?iso-8859-1?Q?f=FCr?= 8051
Quoted text here. Click to load it
  Die englische Ausgabe ist eine Bleiwüste ohne
bildliche Illustrationen die Features anhand von
Beispielen runterleiert.
  Brodies "Starting FORTH", das offizielle Einführungs-
buch von FORTH Inc., ist dagegen praktisch ein Comic:
da treiben sich SWAP-Drachen und Scharfrichter rum.
Dergestalt, daß sich Hochschullehrer in den USA geweigert
haben es in Einführungskursen für FORTH zu verwenden,
weil es ihre akademiologische Würde angekratzt hätte.
Es geht also auch deutlich anders.

MfG JRD

Re: C =?ISO-8859-1?Q?f=FCr?= 8051

Quoted text here. Click to load it

Vielleicht ist "MayLi" nicht immer verständlich, aber hinter seinem Fifth
steckt ein ganz einfacher und plausibler Ansatz, den ich mehr im Sinne von
Systementwicklung aus SW und HW verstanden habe...

Du wirst Dich wundern, aber ich habe Fifth sehr gerne eingesetzt, mit keinem
Tool ist es mir bisher so leicht gefallen interaktiv heterogene
Mehrprozessorsystem aus PC, uC und DSPs zu programmieren. Mit keinem System
konnte ich bisher so schnell die zu programmierende HW beherrschen.

Das schöne an Fifth war/ist, dass man nicht für jeden Prozessor im System
ein RTOS braucht, dass es auf das wesentliche beschränkt ist und trotzdem
objektorientierte Ansätze, Parallelprozessing und Multiprozessing mitbringt
... Das schlechte (und im Grunde das KO) war die Dokumentation und der
nicht mehr zeitgemäße Editor (=IDE)...

Und das System war/ist äußerst effizient. Wir haben mit einem sehr kleinen
Kernteam sowohl Hardware als auch Software entwickelt, immerhin mit 21 DSPs
und einem uC als Master. Während des Entwickelns war der PC als
zusätzlicher eingener Knoten am System angeschlossen und stand zur
Auswertung und für Testprogramme ebenfalls in Fifth programmierbar zur
verfügung. Durch die einfache Programmierung konnte auch eine relativ
einfache Hardwarestruktur verwendet werden und vor allem genau auf die
Bedürfnisse der Anwendung angepasst werden.

Heute verwendet die Firma drei Entwicklungssysteme, eines für den PC
(MS-C++), eines für den embedded Controller (VXWorks und C(++)) und eines
für die DSP Kaufkarten. Das neue System ist "State of the Art", es
verwendet PCI-Interfaces, wo vorher einfache Schnittstellen liefen, es
verwendet Kaufkarten mit einer Funktionsanhäufung, die nicht gebraucht
werden. Die verwendeten Betriebsysteme und Libraries erfordern, dass die
Hardware passend zur Software ausgesucht/erstellt wird, denn tief in dem
gekauften Softwerk etwas ändern zu wollen ist kaum möglich...

Im Ganzen kann das neue System etwas mehr (kein Wunder, mehr DSPs, die
schneller sind), braucht doppelt so viel Platz, 10 mal mehr Energie und
kostet ein zig-faches. Der eingesetzte embedded Controller (heute PPC mit
700MHz und lausiger I/O-Karte) ist nicht schneller in der
Interruptverarbeitung, Taskswitching oder Generierung von Steuersignalen
als der damalige Controller (C167 mit 20MHz)...
Das führt zu solchen Stilblüten, dass man neuerdings Alles, was unter
einigen ms Antwortzeiten braucht in FPGAs versteckt, vorher hat der
Controller das nebenbei gemacht...

Ganz zu schweigen von dem lausigen Support der diversen
Tool/Hardware-Lieferanten, "da hat man ja Anspruch drauf, schließlich hat
man ja teure Lizenzen gekauft"...

Solch eine Entwicklung der Entwicklungen habe ich übrigens in völlig
verschiedenen, branchenfremden Firmen beobachten können.

Mir stellt sich nach meiner Fifth-Grenzerfahrung nun die Frage, welches
moderne Programmiersystem, bestehend aus Programmiersprache und
Entwicklungsumgebung mir folgendes bietet:

- eine einfache Sprache für alle Prozessoren (Zielsystem und steuernder PC)
- Unterstützung von heterogenen Mehrprozessorsystemen
- Unterstützung von Multiprozessing
- Einfache OOP Elemente (wäre schön)
- RTOS inklusive (meist ja eh nur 'ne Hauptschleife)
- interaktive Ausführbarkeit von Funktionsteilen
  d.h. Programmstück schreiben, per Knopfdruck compilieren ins
  Zielsystem übertragen und ausführen lassen, damit sind folgende
  Vorteile verbunden:
  - man gewöhnt sich an kleinere Programmteile sofort zu testen, was
    die spätere Fehlersuche erleichtert
  - man kann Controller und Peripherie besser erforschen/begreifen
  - man kann schon beim Kurztest Laufzeiten der Programmteile abschätzen
- billig, so daß auch kleine Firmen und Ing.Büros das Zeug kaufen können.
- Es muß UNKOMPLIZIERT und EINFACH sein! Ich möchte nicht so ein
  Herrschaftswissen erforderndes System. Um einfache, sichere Systeme
  entwickeln zu können, müssen die Tools einfach beherrschbar sein.

Genau hier kommen wir zum eigentlichen Problem, der Preis. Wenn ich mir die
Preissituation für moderne Entwicklungssysteme so ansehe (10-25kEuro für'n
modernen Arbeitsplatz mit Windriver Produkten), dann ist klar, dass man
keine flexible Hardware mehr entwickelt, denn wenn man einmal für eine
Zielplattform investiert hat, dann muß man dabei bleiben...
Die Entwicklungssysteme und RTOSs sind so kompliziert (zum Teil
komplizierter als die eigentliche Anwendung), dass man nicht mehr HW/SW und
noch mehr in Personalunion machen kann. Das ist auch so gewollt,
schließlich muß die Firma ja noch sehr viel Geld für Schulung ausgeben, so
dass die Kundenbindung schließlich in Abhängigkeit endet...


Es wäre eigentlich mal an der Zeit, dass sich was an den konservativen
Entwicklngsmethoden ändert, wieso muß das immernoch so umständlich sein?
Von Emulgator und Geschmacksverstärker will ich gar nich reden...

Gruß aus Kiel
Ingolf

PS: Ich will hier niemanden missionieren ;-)

--
Ingolf Pohl

Re: C für 8051

Quoted text here. Click to load it


Sorry, ich wollte keine Meinung das ich nun doch kein
C machen soll, sondern Tips wie ich es lernen kann.
Mal davon abgesehen habe ich im Zusammenhang mit
C noch nie von einem Interpreter gehört.
Das ist eher Basic Ecke. C hat Compiler !

Ich habe einen Basic Compiler für 8051, aber mit dem kann
man nun mal nicht alles so realisieren wie man es gern hätte.
Die Flexiblität ist da nicht sooo gut.
Und ASS ist für den Fall zu umständlich.

Wenn ich was mit C anfange will, dann hat das schon seinen Grund,
zumal ich schon geschrieben hatte, daß ich mit mit Basic uns ASS
etwas auskenne......


By W.



Site Timeline