Anwendungen / 10 MHz Uhr

Aug 27, 2019 14 Replies
10MHz kommen aus Rubidium Blechschachtel die als Surplus bei ebay.com zu finden ist.


formatting link


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. (

formatting link
)

DES

formatting link
AES
formatting link
SHA
formatting link

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 Words

Ansonsten 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

formatting link
-- aber sobald

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 ein

Aber 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

  1. Werten gespeichert. Dann wurde der Zeiger hochgesetzt

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:

formatting link

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.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required