ubasic Port für STM32F4 von Uwe Becker

Ähnliche Dokumente
Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Programmierkurs Java

Sin-Funktion vgl. Cos-Funktion

Programmierung in C. Grundlagen. Stefan Kallerhoff

Programmieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Übersicht Programmablaufsteuerung

Tutorium Rechnerorganisation

Grundlagen von Python

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Einführung in die C++ Programmierung für Ingenieure

Modul 122 VBA Scribt.docx

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Jede Zahl muss dabei einzeln umgerechnet werden. Beginnen wir also ganz am Anfang mit der Zahl,192.

Java Einführung Operatoren Kapitel 2 und 3

Erwin Grüner

Step by Step Webserver unter Windows Server von Christian Bartl

Kontrollstrukturen, Pseudocode und Modulo-Rechnung

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

Java: Vererbung. Teil 3: super()

OSF Integrator für Btracking und Salesforce Anleitung für die Nutzer

Erweiterung der Aufgabe. Die Notenberechnung soll nicht nur für einen Schüler, sondern für bis zu 35 Schüler gehen:

Zugriff auf die Modul-EEPROMs

STM32F429-Basic Version : C.01

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

Modellierung und Programmierung 1

Bauteilattribute als Sachdaten anzeigen

- Frontend

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Anleitung über den Umgang mit Schildern

Einführung in die Programmierung

Diana Lange. Generative Gestaltung Operatoren

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 16

Handbuch zur Anlage von Turnieren auf der NÖEV-Homepage

Sichere Anleitung Zertifikate / Schlüssel für Kunden der Sparkasse Germersheim-Kandel. Sichere . der

Übungen Programmieren 1 Felix Rohrer. Übungen

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 18

5 DATEN Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu

Zeichen bei Zahlen entschlüsseln

Vorkurs C++ Programmierung

Anwendungsbeispiele Buchhaltung

Anleitung Captain Logfex 2013

Benutzerkonto unter Windows 2000

Professionelle Seminare im Bereich MS-Office

C++ Tutorial: Timer 1

Sicherer einkaufen im Internet. Ihre Registrierung für 3D Secure auf der HVB Website Schritt für Schritt.

Multimedia im Netz Wintersemester 2011/12

1. Bearbeite Host Netzgruppen

Bedienungsanleitung für den Online-Shop

INDEX. Öffentliche Ordner erstellen Seite 2. Offline verfügbar einrichten Seite 3. Berechtigungen setzen Seite 7. Öffentliche Ordner Offline

Einführung in die Programmierung (EPR)

MAPS.ME. Benutzerhandbuch!

Dokumentieren mit Eclipse und Doxygen

Second Steps in eport 2.0 So ordern Sie Credits und Berichte

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Kurzanweisung für Google Analytics

Outlook Erstellen einer aus einer HTML - Vorlage INHALT

Doing Economics with the Computer Sommersemester Excel Solver 1

PEFC Logo Generator 1

Die bisher bereits bekannten Aggregatsfunktionen MIN, MAX, SUM, AVG, COUNT, VARIANCE und STDDEV wurden um FIRST und LAST erweitert.

Adminer: Installationsanleitung

Eigenen WSUS Server mit dem UNI WSUS Server Synchronisieren

10 Lesen und Schreiben von Dateien

Digital signierte Rechnungen mit ProSaldo.net

Backup Premium Kurzleitfaden

Visual Basic Basisbefehle Hinweis: Der Text in eckigen Klammern [ ] ist variabel, z.b. [var] => 5.3. Eckige Klammern sind stets wegzulassen!

ftp://ftp.dlink.de/dpr/dpr-1061/documentation/dpr-1061%20printer%20compatible%20list.pdf

Einfügen von Bildern innerhalb eines Beitrages

Datenbanksysteme SS 2007

Bilder zum Upload verkleinern

Die Post hat eine Umfrage gemacht

Lua Grundlagen Einführung in die Lua Programmiersprache

Support-Tipp Mai Release Management in Altium Designer

Leichte-Sprache-Bilder

Datenbank LAP - Chefexperten Detailhandel

Java Einführung Collections

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Installation des Authorware Webplayers für den Internet Explorer unter Windows Vista

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

Datentypen. Agenda für heute, 4. März, Pascal ist eine streng typisierte Programmiersprache

Dokumentation zur Versendung der Statistik Daten

Step by Step Remotedesktopfreigabe unter Windows Server von Christian Bartl

Task: Nmap Skripte ausführen

Der Voxtron Konferenz-Server

Ingenieurinformatik Diplom-FA (Teil 2, C-Programmierung)

Kurzeinführung LABTALK

AGFA ORBIS eportal / Orbis Web

Zahlensysteme. von Christian Bartl

Paket 1 (Reportage - Standesamt) Paket 2 (Reportage - Kirche) Paket 3 (Reportage - Trauung + Sektempfang)

MSDE 2000 mit Service Pack 3a

Kurzskript Literaturverzeichnis Microsoft Office Word 2010

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Tutorium Informatik 1. Aufgabe 2: Formatierte Ein- und Ausgabe

Fotos in Tobii Communicator verwenden

So erstellen Sie nützliche Beschreibungen zu Ihren Tradingdaten

Hello World. Javakurs 2014, 1. Vorlesung. Sebastian Schuck. basierend auf der Vorlage von Arne Kappen. wiki.freitagsrunde.org. 3.

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Personalisierte versenden

Transkript:

ubasic Port für STM32F4 von Uwe Becker Das original ubasic von Adam Dunkels findet sich unter : http://dunkels.com/adam/ubasic/ Die Minimal -Version vom ubasic-port für den STM32F4 beinhaltet folgendes : Basic-Befehle : 'REM' Kommentarzeile 'LET' Variablenzuweisung 'PRINT' Ausgabe (per UART) 'IF/THEN/ELSE' Bedingte Anweisung 'FOR/TO/STEP/NEXT' Schleife 'GOTO' Sprung 'GOSUB/RETURN' Sprung zu Unterprogramm und Rücksprung 'END' Ende vom Basic-Programm 'RIGHT$' Liefert die ersten 'n' Zeichen von einem String 'ABS' Liefert den Absolutwert einer Zahl Operatoren : '+' Addition '-' Subtraktion '*' Multiplikation '/' Division '%' Modulo '&' Bitweises UND ' ' Bitweises ODER '^' Bitweises XOR Vergleichsoperatoren : '=' Gleichheit '<' Kleiner '>' Größer Variabeln : 'a' bis 'z' für Integer-Zahlen 'a$' bis 'z$' für Strings Zahlenschreibweise : '123' positive Zahl '-123' negative Zahl '0xA3F' positive Zahl in Hex (A3Fh = 2623d) Klammersetzung : a=((5+3)*2)-2 a=14 www.mikrocontroller.bplaced.net 1 / 6

Benutzung der Files im eigenen Projekt : Files : Im eigenen Projekt müssen die 4 Files ubasic.c + ubasic.h tokenizer.c + tokenizer.h hinzugefügt werden. Basic-RAM : es muss ein Globales RAM-Array eingerichtet werden in dem später das Basic-Programm liegen wird. z.b. char basic_ram[1024]; // 1k für Basic-Programm Basic-Program : das Basic-Programm muss in das RAM-Array kopiert werden. Die Quelle vom Basic-Programm (Flash/SD-Karte/UART usw) ist von der eigenen Implementation abhängig. Init vom ubasic : zur Initialisierung muss die Funktion ubasic_init aufgerufen werden mit einem Pointer auf das Basic-RAM z.b. ubasic_init(basic_ram,0); Start vom Basic-Program : nach der Initialisierung muss in einer Schleife die Funktion ubasic_run solange aufgerufen werden, bis das Ende vom Basic-Programm erreicht ist : z.b. do { ubasic_run(); } while(!ubasic_finished()); Minimal Basic-Programm : 10 REM Testprogram 20 FOR n = 1 TO 10 30 PRINT n 40 NEXT n 50 END www.mikrocontroller.bplaced.net 2 / 6

Hinweise zu meiner Version von ubasic ich habe das ubasic von Adam Dunkels erweitert und für mich angepasst (ein Filevergleich mit dem Original zeigt die Unterschiede) Neben der Beseitigung von ein paar Bugs habe ich noch folgendes hinzugefügt : 1. Der Print-Befehl wird auf eine UART umgeleitet (kann im H-File deaktiviert werden) 2. String Verarbeitung über String Variabeln 'a$' bis 'z$' 3. Zahlenformat HEX : '0x0' bis '0xFFFF' 4. Negative Zahlen möglich 5. Basic-Befehl 'REM' zum einfügen von Kommentarzeilen 6. Pre-Parser vom Basic-Programm der die Geschwindigkeit bei der späteren abarbeitung deutlich erhöht. > alle Basic-Befehle werden in Bytecodes gewandelt (beim Original mussten alle Zeichen vom Basic-Befehl geprüft werden) > alle Sprungziele von GOTO/GOSUB/FOR werden in einem Array gesammelt und die direkte RAM-Adresse wird ermittelt und gespeichert (beim Original wird jedesmal das ganze Programm nach der Zeilen-Nr durchsucht) 7. Basic-Befehl 'FOR' kann mit dem Parameter 'STEP' erweitert werden 8. Auch rückwärts laufende Schleifen möglich 9. Basic-Befehle können verschachtelt werden 10. Der Basic-Befehl "ABS" dient als Vorlage für Befehle mit Rückgabewert=<int> 11. Der Basic-Befehl "RIGHT$" dient als Vorlage für Befehle mit Rückgabewert=<string> 12. Der Basic-Befehl "REM" dient als Vorlage für Befehle mit Rückgabewert=<void> Einschränkungen : Einige Einschränkungen vom Basic bleiben allerdings bestehen : 1. Jede Zeile muss mit einer eindeutigen Zeilen-Nummer beginnen 2. Sprungziele bei GOTO/GOSUB dürfen keine Variablen sein 3. Das Basic-Program muss in einem RAM-Bereich liegen 4. Keine Float Unterstützung 5. Nur 26 Integer- und 26 String-Variablen nutzbar 6. Systembedingt keine sehr hohe Abarbeitungsgeschwindigkeit www.mikrocontroller.bplaced.net 3 / 6

Neuer Basic-Befehl hinzufügen : (return_value = <int>) Hier eine Schritt für Schritt Anleitung um einen neuen Basic-Befehl hinzuzufügen : Als Beispiel soll der Befehl ASC hinzugefügt werden Der Befehl liefert den Ascii-Wert eines Zeichens Syntax : ASC(<str_expr>) Return_Wert : <int> 1. File : tokenizer.h ein neues Token am Ende der enum Liste hinzufügen TOKENIZER_ASC 2. File : tokenizer.c das neue Token in der Keywordliste hinzufügen {"ASC", TOKENIZER_ASC}, 3. File : tokenizer.c das neue Token in der Funktion tokenizer_set_expression hinzufügen und zwar bei denen mit dem Rückgabewert <int>, case TOKENIZER_ASC : 4. File : ubasic.c einen neuen Funktionsprototyp hinzufügen static int cmd_asc(void); 5. File : ubasic.c die neue Funktion in der Funktion factor(void) als neuen 'Case' hinzufügen case TOKENIZER_ASC : // 'ASC' r=cmd_asc(); break; 6. File : ubasic.c unter dem Abschnitt NEW <INTEGER> STATEMENTS BY UB die neue Funktion ausprogrammieren static int cmd_asc(void) { char *s; int ret_value=0; accept(tokenizer_asc); accept(tokenizer_leftparen); s=strexpr(); accept(tokenizer_rightparen); ret_value=s[0]; // ascii wert vom ersten Zeichen ermitteln FERTIG return ret_value; } www.mikrocontroller.bplaced.net 4 / 6

Neuer Basic-Befehl hinzufügen : (return_value = <string>) Hier eine Schritt für Schritt Anleitung um einen neuen Basic-Befehl hinzuzufügen : Als Beispiel soll der Befehl CHR$ hinzugefügt werden Der Befehl liefert den Character eines Ascii-Werts Syntax : CHR$(<int_expr>) Return_Wert : <str> 1. File : tokenizer.h ein neues Token am Ende der enum Liste hinzufügen TOKENIZER_CHRSTR 2. File : tokenizer.c das neue Token in der Keywordliste hinzufügen {"CHR$", TOKENIZER_CHRSTR}, 3. File : tokenizer.c das neue Token in der Funktion tokenizer_set_expression hinzufügen und zwar bei denen mit dem Rückgabewert <string>, case TOKENIZER_CHRSTR : 4. File : ubasic.c einen neuen Funktionsprototyp hinzufügen static char *cmd_chrstr(void); 5. File : ubasic.c die neue Funktion in der Funktion *strpart(void) als neuen 'Case' hinzufügen case TOKENIZER_RIGHTSTR : // 'CHR$' r=cmd_chrstr(); break; 6. File : ubasic.c unter dem Abschnitt NEW <STRING> STATEMENTS BY UB die neue Funktion ausprogrammieren static char *cmd_chrstr(void) { char *ret_wert; return ret_wert; }; FERTIG www.mikrocontroller.bplaced.net 5 / 6

Neuer Basic-Befehl hinzufügen : (return_value = <void>) Hier eine Schritt für Schritt Anleitung um einen neuen Basic-Befehl hinzuzufügen : Als Beispiel soll der Befehl DELAY hinzugefügt werden Der Befehl fügt eine kleine Pause ein Syntax : DELAY(<int_expr>) Return_Wert : <void> 1. File : tokenizer.h ein neues Token am Ende der enum Liste hinzufügen TOKENIZER_DELAY 2. File : tokenizer.c das neue Token in der Keywordliste hinzufügen {"DELAY", TOKENIZER_DELAY}, 3. File : ubasic.c unter dem Abschnitt NEW <VOID> STATEMENTS BY UB die neue Funktion ausprogrammieren static void delay_statement(void) { int n; accept(tokenizer_delay); accept(tokenizer_leftparen); n=expr(); accept(tokenizer_rightparen); } 1. File : ubasic.c die neue Funktion in der Funktion statement(void) als neuen Case hinzufügen. case TOKENIZER_DELAY delay_statement(); break; FERTIG www.mikrocontroller.bplaced.net 6 / 6