Forum: Mikrocontroller und Digitale Elektronik Suche Taschenrechner-Sourcen für Mikrocontroller


von Clemens E. (linuxhippy)


Lesenswert?

Hallo,

Ich weiß das klingt doof und komisch aber ich würde 
Taschenrechner-Quellcode für Microcontroller (8051 oder PIC16/18) 
suchen, wenns geht public domain.
Einfaches +/- tuts nicht, zumindest hoch/log/e/etc. müsste er schon 
können.

Also irgendwie sowas wie der TI-30II kann, man gibt irgendeine 
Zeichenfolge ein z.B. e^2*log(3/2) und der parst das aus und rechnet 
fleißig.

Wäre echt super wenn ihr mir helfen könntet :-)

Danke im Vorraus, lg Clemens

von antworter (Gast)


Lesenswert?

Du meinst etwas anderes als einen "Taschenrechner-Quellcode"... was Du 
benötigst fällt eher in die Kategorie Formelparser und -auswerter.

Tutorials zu Bison/Flex sind da eine gute Quelle/Grundlage/Startpunkt 
(das sind übrigens Parser/Scanner für C).

von Frank (Gast)


Lesenswert?

ich geh mal davon aus das du noch keinen PIC mit Fliesskommaaufgaben 
betraut hast. Sowas von langsam ist das! Da kann man jedes einzelne Bit 
umklappen hören.

bye

Frank

von Clemens E. (linuxhippy)


Lesenswert?

Ich weiß das klingt doof und komisch aber ich würde
einen Formel Parser/Auswerter für Microcontroller (8051 oder PIC16/18)
suchen, wenns geht public domain.

Bison und Flex wird wohl kaum in 4kb Flash Platz finden.

lg Clemens

von antworter (Gast)


Lesenswert?

Mein Tip war nicht, Bison & Flex auf dem Mikrocontroller zu 
installieren, sondern im Rahmen des Kompilierens auf dem PC zu benutzen.

von Peter D. (peda)


Lesenswert?

Frank wrote:
> ich geh mal davon aus das du noch keinen PIC mit Fliesskommaaufgaben
> betraut hast. Sowas von langsam ist das! Da kann man jedes einzelne Bit
> umklappen hören.

Ich mag ja die PICs nicht, aber daß sie so schlecht sein sollen, glaub 
ich Dir nicht.

In Taschenrechnern sind nur 4-Bitter drin und die schaffen es ja auch.


Auf nem Standard 8051 (12MHz/12) dauert ne float Multiplikation etwa 
1ms, das kann kein Mensch "mithören".

Das Ergebnis ist schon fertig, bevor der Mensch die "="-Taste überhaupt 
loslassen kann.


Idealer Weise schreibt man so ne Anwendung einfach in C hin.

Probleme gibts nur, wenn man double Genauigkeit haben will, da die 
meisten Compiler nur float implementiert haben.


Peter

von TI-Fan (Gast)


Lesenswert?

"In Taschenrechnern sind nur 4-Bitter drin und die schaffen es ja auch."


In meinem TI-89 ist ein MC68000 drin, und der hat meines Wissens ein 
paar Bit mehr...

von Karl H. (kbuchegg)


Lesenswert?

> 68000

Auch wenn dein TI-irgendwas einen 68000 drinnen hat,
beweist das noch lange nicht, dass ein 4-Bit Rechner
nicht schneller rechnen kann, als du die Taste loslassen
kannst. In einem 08/15 Taschenrechner ist normalerweise
der billigste Chip drinnen, den man kriegen kann.

Manchmal frag ich mich wirklich, ob die Leute heutzutage
glauben, man benötigt mindestens einen 2Ghz Prozessor
um anständig aufs Klo gehen zu können.
Da wundert es mich nicht, dass einige Brüder behaupten
mit der Rechenleistung der 60 Jahre hätte man niemals
zum Mond fliegen können (Jeder der sein Handwerk versteht,
kann die Navigation mit einem Rechenschieber bewerkstelligen)
Schön langsam frage ich mich, ob die Verbreitung von Computern
aus der Sicht der gesammten Menschheit nicht eigentlich völlig
kontraproduktiv ist.

von PeterL (Gast)


Lesenswert?

@ TI-Fan

dan schau mal den Schaltplan eines TI59 an, (rechnet auch recht 
anständig)

von Michael U. (Gast)


Lesenswert?

Hallo,

@Karl heinz Buchegger: "was ist ein Rechenschieber" müsste jetzt 
kommen...

@TI-Fan: 68000... war in meinem Zyxel 1496 Modem auch drin.
Was sagt uns das? Er war wohl billig genug...

@Clemens Eisserer: eigentlich eine nette Aufgabe...
einfach ganz klein anfangen, einfachen Parser basteln und dann langsam 
anbauen.

Geht aber wohl heutzutage nur noch, wenn man mindestens 10 dicke Bücher 
zu den Theorien auswendig gelernt hat...
Kann man aber auch einfach anfangen, dann merkt man, was geht und wo es 
klemmt.

Gruß aus Berlin
Michael



von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Ich würde mal mit einem stackbasierten Rechner anfangen, das dürfte sehr 
einfach zu implementieren sein:
Statt 2 * log(3+4):
3 4 + log 2 *

von arc (Gast)


Lesenswert?

Wenn der stackbasierte Rechner fertig ist, reicht es wenn man davor eine 
einfache Infix->Postfix-Konvertierung schaltet. Anderes Stichwort: 
Rekursiver Abstieg (recursive descent parser)

von Rolf Magnus (Gast)


Lesenswert?

> Wenn der stackbasierte Rechner fertig ist, reicht es wenn man davor
> eine einfache Infix->Postfix-Konvertierung schaltet.

Wozu? Postfix ist doch eh viel eleganter. Das hat mir schon beim HP48 
gefallen.

von Clemens E. (linuxhippy)


Lesenswert?

naja ... aber eigentlich interessiert mich der Taschenrechner überhaupt 
nicht ... das was ich da basteln will muss das halt einfach nur können.

Gibts sowas nicht schon irgendwo?

Danke, lg Clemens

von Karl H. (kbuchegg)


Lesenswert?

Such nach "Formelparser", wenn du ihn schon nicht selbst
machen willst, was eine gute Übung wäre.
Gibts wie Sand am Meer.

von Selma (Gast)


Lesenswert?

> (Jeder der sein Handwerk versteht, kann die Navigation mit einem
> Rechenschieber bewerkstelligen)

Naja, nur wäre in der Zeit der gesamte Brennstoff verbraucht.

von Clemens E. (linuxhippy)


Lesenswert?

-was eine gute Übung wäre.
Wieso ich kann programmieren!

- Gibts wie Sand am Meer
Drum hab ich hier gefragt, es gibt viel klumpat. vieleicht kennt ja 
jemand was gutes -> dem war nicht so. stattdessen haben mich 
deinesgleichen mit rtfm-posts und "warum willst du das überhaupt" posts 
überhäuft.

Clemens

von Peter D. (peda)


Lesenswert?

Clemens Eisserer wrote:
> naja ... aber eigentlich interessiert mich der Taschenrechner überhaupt
> nicht

Na super.
Und warum fragst Du dann danach ?


Wenn Du unfähig bist danach zu fragen, was Du willst, dann brauchst Du 
auch nicht über die Antworten rumzumotzen.

Auf unpräzise Fragen kann es auch nur unpräzise Antworten geben.


Peter

von Karl H. (kbuchegg)


Lesenswert?

> Naja, nur wäre in der Zeit der gesamte Brennstoff verbraucht.

Du hast in der Vorbereitung Jahre Zeit :-)

von Karl H. (kbuchegg)


Lesenswert?

> Drum hab ich hier gefragt, es gibt viel klumpat. vieleicht kennt ja
> jemand was gutes -> dem war nicht so. stattdessen haben mich
> deinesgleichen mit rtfm-posts und "warum willst du das überhaupt" posts
> überhäuft.

Wenn du programmieren kannst, dann wirst du ja wohl
klumpert von nicht-klumpert unterscheiden können.
Ausserdem ist ein Formelparser alles andere als 'Raketentechnik'.
Das ist ziemlich einfache 08/15 Compiler-parser Technik.
Nichts Aufregendes. Und weil es eben so nach Schema-F abgeht,
gibt es Programme die einen Parser nach den Vorgaben einer Syntax
erzeugen. Zb. bison/flex, zb. bison/yacc, zb. coco und wie sie
alle heissen. Aber auch ein händische aufgebauter 'Rekursiver Abstieg'
ist schnell geschrieben.

Ich bleib immer noch dabei: Schmeiss google an, suche nach
Formelparser und du wirst genug davon finden. In der Zeit in
der du hier runmgejammert hast, hättest du schon mindestens
3 oder 4 runtergeladen und ausprobiert.


von Clemens E. (linuxhippy)


Lesenswert?

ja klar hab ich schon nen haufen runtergeladen und gefunden - bevor ich 
gefragt hab. Nur kompiliert dieses Zeugs natürlich nicht für 8051/PIC.
Ich bin mir nicht sicher ob der Aufwand diese Taschenrechner zu 
portieren das Ergebnis wert wäre, wenn es vieleicht schon derartigen 
Code für Mikrocontroller gibt.

Und weil doch ein Taschenrechner (es muss kein Formelparser sein!) eine 
sooo wunderschöne Übungsaufgsbe für Newbies ist - was liegt näher als 
hier zu fragen?

Clemens

von ??? (Gast)


Lesenswert?

> Und weil doch ein Taschenrechner (es muss kein Formelparser sein!) eine
> sooo wunderschöne Übungsaufgsbe für Newbies ist ...

Dann aber ein richtiger Taschenrechner mit Matrixtastatur und LCD.
Da braucht man dann auch keinen Formelparser...

von Karl heinz B. (kbucheg)


Lesenswert?

> Und weil doch ein Taschenrechner (es muss kein Formelparser sein!) eine
> sooo wunderschöne Übungsaufgsbe für Newbies ist - was liegt näher als
> hier zu fragen?

Also was willst du machen.

* Ein Taschenrechner
  So mit 10er Tastatur und Tasten auf denen jeweils eine Funktion
  liegt. Taste gedrückt - Funktion wird ausgeführt.

* Formelparser
  zb. per Terminal oder sonstwoher kommt ein String, der
  eine Formel enthält. Diese Formel soll ausgewertet werden
  und das Ergebnis zurückgeliefert werden.

Entscheide dich mal. Beides wird anders aufgebaut!


von Karl heinz B. (kbucheg)


Lesenswert?

> Ich bin mir nicht sicher ob der Aufwand diese Taschenrechner zu
> portieren das Ergebnis wert wäre

Der Aufwand ist minimal.
Da kommt ausser ein paar Funktionen und etwas Rechnerei
nichts systemspezifisches vor. Wozu auch: Eine
Formel auswerten funktioniert gleich, egal ob ich auf
einem Pentium, einer Cray oder einem µC bin.
Unterschiede gibt es nur bei der Ein/Ausgabe. Wenn
der Autor grade nicht geschlafen hat, dann hat er einen
Einstiegspunkt an den ein String übergeben wird und aus
dem ein double zurückkommt. Dort ist dein Ansatzpunkt.
Alles andere Systemspezifische wirfst du über Bord und
schon hast du deinen Formelparser.

von Peter D. (peda)


Lesenswert?

Clemens Eisserer wrote:
> ja klar hab ich schon nen haufen runtergeladen und gefunden - bevor ich
> gefragt hab. Nur kompiliert dieses Zeugs natürlich nicht für 8051/PIC.


Das ist völlig normal.

C ist portabel, d.h. es sind immer einige kleine Anpassungen nötig, wenn 
man das Target oder den Compiler wechselt.

Also immer schön die Fehlermeldungen lesen und beseitigen.
Dazu muß man natürlich verstehen, was man macht.

Wie neulich "Ich will CAN machen, aber es nicht verstehen müssen", geht 
eben nicht.


Peter

von Linuxhippy2 (Gast)


Lesenswert?

1.)
> Wie neulich "Ich will CAN machen, aber es nicht verstehen müssen", geht
> eben nicht.
rofl
fühlt sich herr assembler-gott lol auf den schlipss getreten? 
abgesehen davon hast hier nicht einen verwertbaren post abgegeben.

2.)
> Unterschiede gibt es nur bei der Ein/Ausgabe. Wenn
> der Autor grade nicht geschlafen hat, dann hat er einen
> Einstiegspunkt an den ein String übergeben wird und aus
> dem ein double zurückkommt.

Das setzte vorraus dass man einen Compiler verwendet welcher den 
double-datentyp kennt. Ich möchte sdcc eionsetzen und der kennt nur 
4byte floats was für meinen Anwendungsfall zu wenig ist.

Bin gerade am suchen nach software-fp bibliotheken welche nicht 
irgendwelche annahmen über die verwendete platform treffen...

lg Clemens

von Linuxhippy2 (Gast)


Lesenswert?

> Also was willst du machen.

Entweder, oder. für mich würden beide Sachen verwertbar sein ... ein 
Formelparser/auswerter fürde eine Realisierung wie ein TI30-2 erlauben, 
anders ists halt ein old-school ti-30.

lg Clemens

von Peter D. (peda)


Lesenswert?

Linuxhippy2 wrote:
> 1.)
>> Wie neulich "Ich will CAN machen, aber es nicht verstehen müssen", geht
>> eben nicht.
> *rofl*
> fühlt sich herr assembler-gott lol auf den schlipss getreten?


Es kann mir doch herzlich egal sein, ob jemand seinen CAN ohne eigene 
Arbeit ans Laufen kriegt, meine (AT89C51CC01, SJA1000) laufen 
jedenfalls.

Ich erschrecke auch nicht vor Compilermeldungen, wenn ich mir mal ein 
fremdes Codebeispiel ansehe. Sind doch in der Regel nur irgendwelche 
fehlende Defines oder andere Namensgebungen in den Includes.


> abgesehen davon hast hier nicht einen verwertbaren post abgegeben.

Tja, wie die Frage, so die Antwort.

Aber ich helfe gern bei konkreten Fragen.

Ansonsten sülze ich auch gerne mal zurück, wenn mir danach ist (jetzt 
z.B.).


Peter

von Linuxhippy2 (Gast)


Lesenswert?

> Ich erschrecke auch nicht vor Compilermeldungen, wenn ich mir mal ein
> fremdes Codebeispiel ansehe. Sind doch in der Regel nur irgendwelche
> fehlende Defines oder andere Namensgebungen in den Includes.

Meistens, aber nicht immer. 100kB große Floating Point bibliotheken 
welche sehr genaue Annahmen über die verwendete Platform machen müssen 
und z.B. double als Datentyp verwenden auf einen Compiler zu portieren 
welcher nur 4byte floats kennt ist in meinen Augen nicht trivial.

lg Clemens

von Peter D. (peda)


Lesenswert?

Linuxhippy2 wrote:

> und z.B. double als Datentyp verwenden

Das ist das erste mal, daß Du mit double rausrückst (trotzdem hatte ich 
ja schon oben dazu was gesagt).

Und das sich andere erst den Kopf zerbrechen müssen, welches 
Userinterface (Tastenfeld, Texteingabe) der feine Herr denn wünscht usw.

Genau sowas meinte ich mit nicht konkreten Fragen.

Da braucht sich keiner zu wundern, wenn man keine Lust mehr hat, dem 
Fragesteller alles wie Würmer aus der Nase zu ziehen, nur weil der zu 
faul ist, daran zu denken, daß andere nicht in seinen Kopf schauen 
können.


Es braucht sich hier überhaupt keiner zu schämen, Fragen offline zu 
verfassen und vielleicht sogar nem anderen zu lesen zu geben.
Ganz im Gegenteil, das erhöht die Erfolgsquote ungemein.


Peter

von Ich bin heute lästerlich drauf :-) (Gast)


Lesenswert?

Ach Du Sch...

Da erklärt sich jemand selber zum Linuxhippy und kriegt dann die Krise, 
weil SDCC kein Linux ist.

Also ich würde mal vorschlagen, dass Du Dir besser einen Controller 
suchst, für den es auch ein GCC-Derivat gibt. Dann brauchst Du Dich 
nicht weiter mit inkompatiblen Bibliotheken und unzulänglichen 
Ergebnissen herumzuschlagen, sondern allenfalls damit, dass Dein 
Controller für die Double-Lib noch zu klein ist.

Überhaupt schlage ich vor, gar keinen Controller für Dein Vorhaben zu 
nehmen, sondern ein x86-Checkkarten-Computer...

duck und weg :-)

von Εrnst B. (ernst)


Lesenswert?

Ich bin heute lästerlich drauf :-) wrote:

> Da erklärt sich jemand selber zum Linuxhippy und kriegt dann die Krise,
> weil SDCC kein Linux ist.
>
> Also ich würde mal vorschlagen, dass Du Dir besser einen Controller
> suchst, für den es auch ein GCC-Derivat gibt.


Huh? SDCC ist genauso wenig "Linux" wie "GCC".
Linux ist ein Kernel, SDCC und GCC sind Compiler...
Beide Compiler sind Open Source, SDCC hauptsächlich für 8051, PIC14, 
PIC16, Z80, und GCC für den ganzen Rest.


Bei nem einfachen Taschenrechner würd ich übrigens echt überlegen, statt 
den eingebauten double/float libs den ganzen Krempel selber zu machen, 
mit BCD-Kodierten Floats.

Macht die Anzeige viel einfacher, und die Rechnungen laufen wie in der 
Grundschule, eins gemerkt, einen runtergeholt, ...
Das schaft sogar ein 4Bit uC.

/Ernst

von Ich bin heute lästerlich drauf :-) (Gast)


Lesenswert?

Ernst, Du hast ja so recht!

Und mir brauchst Du das auch nicht zu erklären, ich hatte vielmehr auf 
diesen komischen Linuxhippy mit der SDCC-4byte-float-Krise gezielt.

Gruß vom Lästerlichen

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.