- Labornetzteil AliExpress         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 31

Thema: C-Compiler für die C-Control

  1. #11
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.06.2004
    Ort
    Düsseldorf
    Alter
    40
    Beiträge
    158
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo Olli,

    was die Pointer angeht, so kannst Du zumindest auf der 2.03 und 2.04 davon ausgehen, dass der Controller das kann. Schau dir mal den Quellcode von BASIC++ an. Dort ist in der TokenToName.bas eine Tokenübersicht gegeben. Die Pointer Token lauten 36 x. Vielleicht ist das was für Dich.

    Gruß,

    Stefan
    http://www.tappertzhofen.eu/bpp2

    Basic++ Programmiersprache
    für den C-Control I Mikrocontroller

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    08.12.2004
    Ort
    Marktoberdorf
    Alter
    36
    Beiträge
    41
    Hallo Stefan,

    Danke für die Info, werd vielleicht später mal den Compiler auch mit speziellen Funktionen von der CC 2.x ausrüsten (Hab selber nur den Robby mit der CC 1.1, mal schauen wie ich das anstell da ich keine CC 2.x zur Verfügung habe oder gibt es irgendwo einen Simulator mit dem ich die dat-Datei direkt testen kann?).

    Wie schaut es dann eigentlich mit dem Handshake-Befehl von der CC 1.1 aus, der hat auch das Token 36 (Conrad schreibt doch eigentlich die CC 2.x wäre vollständig abwärtskompatibel zur 1.1).

    Den Quelltext zum BASIC++-Compiler hab ich runtergeladen (Musste die exe zwar erst mal mit Wine ausführen aber hat gefunzt). Schaut nützlich aus und ich find mich halbwegs zurecht drin obwohl ich mit VB schon länger nicht mehr programmiert hab

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    08.12.2004
    Ort
    Marktoberdorf
    Alter
    36
    Beiträge
    41
    Hab die neue Version ohne den Bug und mit Fehlermeldung bei void-Funktionen mit Rückgabe hochgeladen.

    edit: Hab grad gesehen dass ich vergessen hab beim Compiler die Versionsnummer zu aktualisieren, jetzt wird immer noch 0.1.0.1 angezeigt und die _CCCCC_-Konstante hat auch den falschen Wert. Aber es ist die Version 0.1.1.3 auch wenn sie es selber noch nicht weiß

  4. #14
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Zitat Zitat von OlliH
    Ich hoff ich habs halbwegs so gemacht wie es üblich ist, hab nämlich einfach "drauf los" programmiert ohne davor irgendwelche speziellen Compilerbau-Bücher o. ä. zu lesen
    Üblich ist das, was man tut

    Wenn man alles selber macht ist der Lerneffekt zumindest am grössten und man muss sich nicht mit fremdem Zeug rumschlagen.

    Gerne wird bei solchen Aufgaben ein existierender Compiler genommen und angepasst. Genaugenommen ist dein Compiler kein Compiler, sondern ein Transpiler, wenn ich's recht sehe: er soll C-Code nach BASIC (Byte-)Code übersetzten.

    Als freien, anpassbaren C-Compiler wäre der tcc (tiny C compiler) zu erwähnen. Da muss man für unterschiedliche Aufgaben Ausgabe-Schnippsel angeben. Die werden in den Ausgabe-Strom als ASCII, Object-Code oder was immer man gerne hätte, eingefügt.

    Du wirst bei deinem ccccc gemerkt haben, daß es eine recht aufwändige und nervige Angelegenheit ist, den Eingabestrom (Quelle) in eine brauchbare interne Darstellung zu bekommen und Syntax-Fehlermeldungen mit der richtigen Stelle anzeigen zu lassen. Wenn z.B eine schliessende Klammer fehlt, und man merkt das erst am Ende der Datei, dann sucht sich der Anwender den Wolf nach der Stelle, wenn der Fehler immer das Dateiende angibt.

    Nun sind alle Programmiersprachen auf einer sprachlich-formalen Ebene ziemlich gleich. Man definiert dort z.B., wie ein gültiger Ausdruck aussieht:

    So sind alle Zahlen und Variablen gültige Ausdrücke. Steht A für einen Ausdruck, dann erhält man weitere gültige Ausfrücke (in C), indem man gültige Ausdrücke weiter kombiniert:
    A -> A + A
    A -> A * A
    A -> A / A
    A -> A - A
    A -> - A
    A -> (A)
    A -> (A) ? A : A
    ...
    Indem man die Regeln nacheinander anwendet, kommt man zu allen möglichen (unendlich vielen) Ausdrücken, die die Sprache erlaubt, etwa
    A+A*(A+(A/A))-A
    Die Regeln, nach der ein neues A aus vorhandenen gebildet werden kann, sind leicht zu durchschauen. Ein Compiler muss aber zu Anfang den umgekehrten Weg gehen. Aus einer Zeichenkette muss die Struktur des Ausdrucks wiederhergestellt werden. Das ist eine recht nervige Angelegenheit, die schnell unübersichtlich wird. Änderungen sind da nur schwer einzuflicken.

    Zu diesem Zwecke gibt es fertige Parser wie zB den bison. Bison wird mit der Sprachbeschreibung gefüttert! Also damit, wie die Sprache entsteht, ohwohl er genau die umgekehrte Aufgabe zu lösen hat! Zudem kann man für Operationen Prioritäten angeben, so daß ein
    a+b*c nicht gelesen wird wie ein (a+b)*c, wie es billige Taschenfalschrechner gerne machen.
    Was für Ausdrüche zutrifft, gilt auch genauso für einen C-Block, eine C-Funktion, Argumentliste, Deklaration, Definition, etc. Man sagt dem Parser nur, wie sie gebildet werden, und er dröselt die Quelle dementsprechend auf.

    Zur Vorverdauung lässt man lex oder flex die Eingabe in Tokens (Schlüsselworte) zusammenfassen. flex kann man in verschiedenen Modi betreiben: in einem Kommentar oder einem String haben Zeichen eine andere Bedeutung als ausserhalb. Kommentare in Strings oder Strings im Kommentaren oder Kommentare in Kommentaren sind damit leicht und übersichtlich zu handhaben.

    Die Tokens werden an bison geliefert, den man verwendet, um das Programm intern Darzustellen: Anweisungen, Ausdrücke, Deklaratoren, etc.

    Dadurch kann man sich beim Compilerbau ganz auf die eigentliche Aufgabe konzentrieren.

    Übrigens gibt es auch Parser und Lexer für andere Sprachen als C, etwa jflex und cup für Java.
    Disclaimer: none. Sue me.

  5. #15
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.06.2004
    Ort
    Düsseldorf
    Alter
    40
    Beiträge
    158
    Zitat Zitat von SprinterSB
    Zitat Zitat von OlliH
    Ich hoff ich habs halbwegs so gemacht wie es üblich ist, hab nämlich einfach "drauf los" programmiert ohne davor irgendwelche speziellen Compilerbau-Bücher o. ä. zu lesen
    Üblich ist das, was man tut

    Wenn man alles selber macht ist der Lerneffekt zumindest am grössten und man muss sich nicht mit fremdem Zeug rumschlagen.
    Das stimmt und am Ende merkt man nicht selten, dass seine eigenen Lösungen oft Ähnlichkeit zu Lösungstrategieen haben, die auch konventionell eingesetzt werden.

    Gruß,

    Stefan
    http://www.tappertzhofen.eu/bpp2

    Basic++ Programmiersprache
    für den C-Control I Mikrocontroller

  6. #16
    Benutzer Stammmitglied
    Registriert seit
    08.12.2004
    Ort
    Marktoberdorf
    Alter
    36
    Beiträge
    41
    Danke für die kleine Einführung in fertige Compilerteile. Wenn ich mir das so anschau kommt es mir so vor dass es mehr Arbeit wäre wenn ich fertige Sachen nehme wie wenn ichs komplett selber schreib
    Und wie du schon sagtest, der Lerneffekt ist der größte wenn ichs komplett selber schreibe.

    Zitat Zitat von SprinterSB
    Genaugenommen ist dein Compiler kein Compiler, sondern ein Transpiler, wenn ich's recht sehe: er soll C-Code nach BASIC (Byte-)Code übersetzten.
    Doch, ist schon einer (Falls ich es recht sehe ). Ein Transpiler würde ja den C-Quelltext in BASIC-Quelltext umwandeln. Der ccccc macht aber aus dem C-Quelltext Bytecode (Befehle für die C-Control, z. B. sowas wie das Byte 20 und danach in 2 Bytes einen Integer um etwas in den Rechenstack zu schieben).

    Würde ihn mal nach Wikipedia als Single-pass-Cross-Compiler einordnen

  7. #17
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.06.2004
    Ort
    Düsseldorf
    Alter
    40
    Beiträge
    158
    Also wenn ich die Definition noch richtig im Kopf habe beschreibt ein Compiler einfach ein Programm, dass von einer Quellsprache in eine Zielsprache übersetzt. Im Deutschen nennt man das daher auch übersetzter. Daher sollte CCCCC ein Compiler sein, zumal Bytecode ja auch vom Java Compiler erzeugt wird.
    http://www.tappertzhofen.eu/bpp2

    Basic++ Programmiersprache
    für den C-Control I Mikrocontroller

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    08.12.2004
    Ort
    Marktoberdorf
    Alter
    36
    Beiträge
    41
    Stimmt, eigentlich ist ein Transpiler (Abk.: Transcompiler) ja nur eine Sonderform eines Compilers aber auch ein Compiler. Aber da der ccccc Bytecode erzeugt ist er, wie der Java-Compiler, sowieso einer.

    Aber ist auch relativ Wurst was es für ein Compiler ist

  9. #19
    Benutzer Stammmitglied
    Registriert seit
    08.12.2004
    Ort
    Marktoberdorf
    Alter
    36
    Beiträge
    41
    Habe gerade die erste Beta-Version hochgeladen

    Hier die wesentlichen Neuerungen:
    - Die wichtigsten Direktiven (z. B. #ifdef, #ifndef, #elifdef und andere) sind verfügbar
    - Alle Funktionen für die serielle Schnittstelle sind implementiert
    - Ausgabe der Daten wahlweise als normale dat, im Intel-Hex-Format oder auch wie die Assemblerdaten im Motorola S-Record Format
    - Der Data Loader kann Daten hoch- und runterladen in allen drei Formaten

    Ich hoffe im Windows werden die Umlaute nun richtig dargestellt, bin jetzt zu faul es selber zu testen aber es sollte eigentlich nun passen.

    Das Handbuch ist auch wieder ein bisschen gewachsen, gibts wie immer weiter unten auf der Downloadseite

  10. #20
    Flash_64
    Gast
    Hi,
    kann mir einer ein Code-Beispiel geben, bei dem der ACS-Interrupt genutzt wird bzw. mir erklären, wie ich eine Funktion schreiben kann, die bei einem Interrupt ausgeführzt wird?

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests