manche anderen Projekte sinnvolle Programmiertechniken.
MfG JRD
manche anderen Projekte sinnvolle Programmiertechniken.
MfG JRD
Interessantes Projekt, im Gegensatz zum Obercholeriker beschreibst du deinen Aufbau transparent (MCU, IRQ-Frequenz, Clockrate der MCU) und machst Messungen, statt nur Behauptungen aufzustellen ("2 MHz IRQ-Frequenz!!!").
die erst in Forth geschrieben und dann optimiert oder aus Erfahrung raus direkt in ASM implementiert? Und wenn ja, hast du im ersten Fall gemessen was der Unterschied in der Laufzeit war? Der ISR sieht ja jetzt
CPU-Clock sind das 125 Clock Cycles. Habe ich nicht gemessen, aber ich vemute dass das in C direkt in Hochsprache abbildbar ist, ohne ASM.
Johannes
-- selben Hardware." -- Hans-Peter Diettrich in d.s.e.
Es ist, wie unschwer erkennbar, Ralph Aichingers "Atomuhr".
aber der wird praktisch nie verwendet:
: Befehl-xyz ... FORTH ... [CODE ... Assembler ... CODE] ... FORTH ... ;
Ein Assembler-Befehl
:CODE Befehl-xyz ... Assembler ... CODE;
: Befehl-xyz ... FORTH ... ;
gleichen Namens. Wenn man low level IO programmiert und
Ein Interrupt ist in dem FORTH aber immer Assembler. Sonst
erst in FORTH, weil leichter debuggbar. Oft ist eine langsame, portable
mit ihr Testdaten erzeugen kann, macht man sich an die Portierung auf Assembler. Im Archiv der FORTH e.V. (
DES
angegeben. FORTH ist bei sowas im Bereich 5 ... 10 (typ ) ... 20 langsamer. In der Anwendung hier war nichts an den Assmbler-Routinen kompliziert, wurden direkt in Assembler codiert und liefen auch sofort.
erzeugen. FORTH erzeugt relativ langsamen unoptimierten Code. Deshalb
MfG JRD
Hallo Rafael,
sogar ABORT fest war. Das ginge lt. Tom Zimmer und anderen Gurus nicht,
RT und IR sattelfest sein. Schrub ich aber schon in adnerem Beitrag (AWAIT...), samt einer TSR (Finetime.com mit TCOM), die den Windoof IR auf
1msec (100ns?) beschleunigte und dann nur alle 55ms den Orijinol Windoof Uhrentimer IR startete. Die TSR war eine Mischung von : und CODE WordsAnsonsten verwaltete Finetime 16 Timer und 16 Ticker mit 1ms, 10ms, 100ms,
Irgendwann wurde dann die Application in F-PC gestartet, die dann die IPC
Karte versorgt) in einem beliebigen Windoof Fenster. Auch mit weiteren IR, zB. Drehgeber Impulse, Wegaufnehmer, Positionsschalter, ADC und was weiss ich nicht alles. Einige IR waren in : andere (schnelle) in CODE.
Das mit der TSR hab ich dann unter W7 nicht mehr weiter probiert, da war
Eigentlich schade, aber ich brauch es nicht mehr.
Irgendwo in der FG 4.Dimension im vorigen Jahrtausend hab ich das mal
Gurus nicht ging :)
angewendet. Die F-PC Application war dann mit Kunden/Aufgaben spezifischen Worten im Kundeneigenen Sprachkontext geschrieben, so dass er sich schnellstens in die Ablaufsteuerung einlesen konnte und Modifikationen auch ohne mich hinbekam. Ua. Lenkgetriebe Justierstand bei Mercedes
Stellungsregler bei ICE-Eckardt waren die umfangreichsten.
So genug gebrunzt :) JB glaubt und begreift das eh nicht :p
Keine Ahnung, auf welchen Platten das noch rumliegt.
Wolfgang
-- Ich bin in Paraguay lebender Trollallergiker :) reply Adresse gesetzt! ihr Niveau herunter und schlagen mich dort mit ihrer Erfahrung! :p (lt. alter usenet Weisheit) iPod, iPhone, iPad, iTunes, iRak, iDiot
Yep :-)
Ja, hilft aber eben auch bestimmte Teilaspekte genau zu verstehen, wenn sie gut dokumentiert sind.
Ah, du implementierst also die komplette Funktion in ASM und zwar so, dass sie der jeweiligen Forth-Calling Convention entspricht.
Zeugs. Solange es nur ASM alleine ist, ist das schon okay, z.B. meinen Startup-Code implementiere ich in reinem ASM, siehe
alles richtig Deklariert hat, insbesondere Clobber-Register und Seiteneffekte. Sonst hat man teilweise den Effekt, dass der Code zwar funktioniert, bei einer neuen Compilerversion dann aber zu undefiniertem
mal auf dem x86 gesprochen, wenn ich da ein IDIV mache sieht man nicht, dass das eine drei-Register-Operation ist (idiv %rbx macht %rax = (%rdx:%rax) / %rbx, %rdx = %rax = (%rdx:%rax) % %rbx). Einmal den Remainder vergessen und der Compiler glaubt, das was vorher drin war ist auch nachher noch drin...
Hm, interessant. Weil die Forth-Entwicklungsumgebung auf dem jeweiligen
der IRQ ja komplett transparent.
Yep, das haben die Hipsterprogrammierer auch wiederentdeckt und nennen
eben ziemlich sicher korrekte) Implementierung zu haben, mache ich in anderen Sprachen ebenso.
Sehr cool, auch toll geschriebene Artikel. Hat bestimmt viel Zeit gekostet. Beim DES Key Schedule gibt es gar keine Performance Penalty,
Schedule hast du deswegen vermutlich gleich nur in Forth implementiert?
Das sind Ergebnisse, die auch viel praktikabler wirken, also so Faktor
5-20. Ich frage mich, warum bei meinem Messungen auf x86_64 dann so einAber habe ich das schon richtig verstanden, dass jeweils Forth-Unterroutinen keinerlei feste Calling Convention haben, d.h. sich das jeweils von Funktion zu Funktion unterscheiden kann? D.h. also auch
Johannes
-- selben Hardware." -- Hans-Peter Diettrich in d.s.e.
aber eigentlich alles irgendwie unten, also sub...).
Man sollte dazusagen, dass bei ASM-Gebrauch (im Forth-Slang: Forth-Worte als
Forth-Maschine selbst drauf, wg. 2 Stacks und fixem Instruction-Pointer plus Umladeregister, dann gern auch Top-Of-Stack im Register.
auch in Asm,
: def-wort CREATE dies und das ;CODE methode in asm endcode
statt des secondary-Aufbaus
: def-wort CREATE dies und das ;DOES methode in forth-worten ;
(mit diesem universellen Konstrukt braucht es auch keine Arrays, die sind mit einem Fingerschnippen billig zu haben, wie immer man sie braucht.)
Speicherplatzes an Top of Stack (nennt sich sinnigerweise HERE ), kann im Definitionswort oder im Zuge der Definition ad hoc mit ALLOT reserviert werden, oder mit ',' (Komma), was immer das Objekt so braucht, damit wandert das HERE weiter.
es durcharbeiten wenn ich "meinen" ersten Arduino-Prototypen soweit fertig habe.
lg Ralph
-- ----------------------------------------------------------------------------- https://aisg.at ausserirdische sind gesund
[...]
weil du deiner Zeit 100 Jahre voraus bist. Niemand versteht deine Brillianz. Selbst die sogenannten Gurus sind reinste Amateure im Vergleich mit dir, aber niemand merkt es, weil du allen einfach so
Programmiersprachen. Jemand, der mit Leonardo da Vinci quasi verpflichtend und voller Ehrfurcht in einem Satz genannt werden wird.
Ja, sicher auf irgendwelchen Platten, die gerade eben nicht zur Hand
Problem, sodass man den Inhalt nicht mehr lesen kann. Aber wenn man den
unter den strengsten NDAs, die man sich so vorstellen kann. Und wenn die
Problem in deinem Newsreader verhindern, dass du Fakten lieferst.
Denn dass das alles genau so stimmt, darauf gibst du uns sicherlich dein Ehrenwort. Ich wiederhole, dein Ehrenwort.
Johannes
-- selben Hardware." -- Hans-Peter Diettrich in d.s.e.
sind so trivial dass Debugging auch selten ein Thema ist.
und Assembler leicht mischen kann. Die meisten Implementierungen
heute nur noch selten Assembler. Sie verlieren damit aber
haben den Drang weg von simplen 8 Bit Prozessoren auf denen
C sollte da wenig Problem haben, weil es Assembler erzeugt.
verwenden etwa 8 ... 12 Byte RAM. Das alles auf Stack sichern
Und wie ja gesagt: ich habe ja die Wahl ob ich einen Befehl in FORTH oder Assembler codiere. Bei Interrupt ist Assembler naheliegend.
Der wird ja nur im Startup einmal aufgerufen, den zu optimieren bringt nicht viel.
minimale Wortbreite, in diesem FORTH 16 Bit. Der Stack wird durch ein Index-Register, bei Motorola typisch X adressiert:
0,X High Byte Top of Stack 1 ,X Low Byte Top of Stack 2 ,X High Byte Second 3 ,X Low Byte Second:CODE + \ ( N1 N2 --- N3 ) \ N1 + N2 = N3 3 ,X LDA, 1 ,X ADD, 3 ,X STA, 0,X LDA, 2 ,X ADC, 2 ,X STA, INX, INX, RTS, CODE;
D.h. der 1. und der 2. Wert wurden addiert und in den
Benutzung sieht auf der Kommandozeile so aus:
---- ---- ---- | 3
---- ---- 0003 | 5
---- 0003 0005 | +
---- ---- 0008 |
32 Bit werden aus zwei 16 Bit Werten simuliert. Der obere Stackwert ist das obere 16 Bit Datenwort. Bei mir sind auch Portpins per Konvention zwei 16 Bit Zahlen:PB 0 B1! \ Bit 0 an Port PB auf 1 setze PB 0 B0! \ Bit 0 an Port PB auf 0 setzen PB 0 B@ \ --- flag ) Bit 0 an Port PB lesen
Adresse sein. Da ja 65kByte MemoryMap.
Es gibt keinerlei typechecking durch den Compiler. Sonst
Kommanozeile. Bei mir werden immer die drei obersten Wert angzeigt:
RESET
---- ---- ---- | 1
---- ---- 0001 | drop
---- ---- ---- | drop
0000 0000 0000 |Ein Wert zu viel ist leicht zu sehen. Ein Wert zu wenig sieht wie
Im Abschnitt FORTH ist auf S.10 z.B. die Laufzeit der
so ein FORTH intern funktioniert:
MfG JRD
Mein FORTH ist JSR,-threaded, ich habe kein NEXT. Ich hatte NEXT auf dem AIM65 anno 1980. Konkurrierte dort mit interpretiertem Microsoft BASIC. Aber Implementierungstechniken der 70er Jahre waren auf 8 Bit CPUs Ende der 90er Jahren nicht mehr praktikabel. Der trade off Speicherverbrauch vs.
Der erste C-Compiler mit dem ich arbeitete war
stehengeblieben.
Die VD sucht immer noch Artikel. Hat aber wohl auch Mindestanforderungen was den Inhalt und seine Darstellung angeht.
MfG JRD
Johannes Bauer schrieb:
Wo liegt eigentlich dein Problem?
Peinlich sowas...
MfG Rupert
Guter Vorschlag :)
Wolfgang
-- Ich bin in Paraguay lebender Trollallergiker :) reply Adresse gesetzt! ihr Niveau herunter und schlagen mich dort mit ihrer Erfahrung! :p (lt. alter usenet Weisheit) iPod, iPhone, iPad, iTunes, iRak, iDiot
Am 31.08.2019 um 00:50 schrieb Rupert Haselbeck:
Am 31.08.2019 um 02:14 schrieb Wolfgang Allinger:
Klar, dass du Prahlhans das lustig findest.
Wieso ist das ein Problem, wenn man Brillianz neidlos anerkennt?
Dann sollte man aber auch nicht rumflennen, wenn es genauso herausschallt.
Habe momentan keine Ambitionen bei dir einzuziehen, aber falls ich so
Alles Liebe, Dein Johannes
-- selben Hardware." -- Hans-Peter Diettrich in d.s.e.
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.