Hat jemand Erfahrung mit CrossWorks AVR? Versuche gerade meinen AVR-Studio-Code anzupassen. Warum ich das versuche? Ganz einfach - ohne das leidige Thema erneut aufzurollen - ich brauche 64bit double inkl. Rechenfunktionen. Mein bisheriger Versuch, wenigstens für den Datenaustausch mit eine unveränderlichen Steuerung eine Umsetzung double32 zu double64 zu bauen, hat zwar geklappt - reicht aber nicht aus. Nun hab ich entdeckt, das CrossWorks AVR echte double64 kann - leider aber nur in der Beschreibung. Sobald ich damit versuche zu rechnen - bootet der Processor neu. Also versuch ich derzeit mit der Trialversion das ganze ans Laufen zu bringen - bisher ohne Erfolg. Der Support reagiert auch nicht auf Anfragen.
Ich glaube, du wirst effektiv nur drei Optionen haben: . Den Code so umschreiben, dass er das nicht braucht. Generationen von PDP-11-Programmierern kamen auch ohne aus. ;-) . AVR-GCC erweitern, dass er es auch kann (das dürfte im GCC-Teil gar nicht so sehr schwürig sein, man wird einiges von den 64-Bit-Integern clonen können, der aufwändigere Teil wird die Bibliothek mit den trigonometrischen Funktionen etc. pp. werden). . IAR kaufen. Vergiss das neue Auto dann. :-))
Also die erste scheidet aus. Vielleicht sollte ich kurz anreissen, warum (bevor die double-story aufs Neue beginnt). Ich baue eine neue Steuerung für unser etwas in die Jahre gekommenes Spiegelteleskop (Sternwarte). Das Teil selbst hat 3 Mikroprozessoren in einem gewaltigen Schaltschrank - wovon ich definitiv die Finger lassen muss. Der Steuerrechner kommuniziert mit den Schrank seriell über eine Datenstruktur, die lauter double-Werte enthält. Daran läßt sich auch nichts ändern. Nun empfange ich die Daten, wandel sie derzeit nach double32 (eigene Umwandlung, die auch funkt), rechne einen kleinen Wert dazu und schick das wieder zurück. Das Problem besteht nun darin, dass ich den Wert von der Steuerung "reduziere", einen Wert addiere und wieder zurückwandel auf 64double. Der Verlust bei der Umwandlung wirkt sich auf der Gegenseite als geringfügige Abweichung aus, wodurch die Position leicht pendelt. Es ist also unabdingbar, dass ich im 64Bit-Bereich bleibe. Zu 2. hab ich irgendwo gelesen, das man das angehen will (man sucht wohl jemanden dafür) - ich jedenfalls nicht. 3. entfällt sicher auch, wobei ich nicht sicher bin, ob die 64Bitdouble unterstützen. Deshalb bin ich auf CrossWorks gestoßen, was in der personal edition erschwinglich wäre. Also wer kennt sich damit aus?
Pragmatische Lösung: wechsel von AVR nach ARM und mach es damit (habe nicht geschaut, aber dem ARM traue ich eher zu, dass er Deine 64 Bit double rechnet. Da Du anscheinend wenig Hardware (ausser der RS232) benötigst, wäre der Umstieg wohl <relativ> einfach. Jedenfalls sicher einfacher, als dem AVR Sachen beizubringen, die er nicht kann. Viele Grüße, Stefan
Darüber hab ich auch schon nachgedacht. Ich brauch 2 seriell davon 1x mit Handshake und einpaar Aus-/ EIngänge, RTC. Da hab ich den LPC2138 bereits ins Auge gefaßt. Und WinARM sollte das können (glaub ich gelesen zu haben).
Ich habs zwar noch nie probiert, aber anscheinend kann BASCOM 64 bit double. Deine Aufgabenstellung klingt auch nicht so anspruchsvoll, als daß das nicht mit der freien Demo hinzubekommen wäre. Viel Spass Oliver
Ins Blaue geschossen: Würde eine Library weiter helfen? SoftFloat is a free, high-quality software implementation of the IEC/IEEE Standard for Binary Floating-point Arithmetic. SoftFloat is distributed in the form of ISO/ANSI C source code and should be compilable with almost any ISO-compliant C compiler. http://www.jhauser.us/arithmetic/SoftFloat.html Ich habe aber keinen blassen Schimmer, wieviel Code das gibt und wie schnell es auf dem AVR ist. --------- Ansonsten könntest du noch in den Audacity Sourcecode reinschauen. Die "Audiofritzen" brauchen auch 64-bit floating-point --------- Bei der Crossworks AVR Online Doku wird bei __float64_add die Doku für __float32_add aufgerufen. Vielleicht ist dieser Bug auch beim Code drin. Probiere doch mal statt der Addition die Subtraktion des entsprechenden negativen Werts (die Doku stimmt da). Oder probiere mal __float64_add_asgn zu verwenden. http://www.rowley.co.uk/documentation/avr/index.htm?http://www.rowley.co.uk/documentation/avr/hcc_libc_cruntime_h.htm
Michael Korb wrote: (GCC) > Zu 2. hab ich irgendwo gelesen, das man das angehen will (man sucht wohl > jemanden dafür) - ich jedenfalls nicht. Schade. ;-) (IAR) > 3. entfällt sicher auch, wobei ich nicht sicher bin, ob die 64Bitdouble > unterstützen. Auf jeden Fall. Aber ist halt wirklich der Mercedes unter den Compilern, oder vielleicht eher der Rolls Royce. Ich vermute auch, dass du mit einem 32-bit-Prozessor besser bedient bist. Selbst ein uralter i386 sollte den Job tun.
> http://www.jhauser.us/arithmetic/SoftFloat.html Das schaue ich mir mal an. Ich brauch eigentlich nur Addition bzw. Subtraktion und Umwandlung 32<-->64. Vielleicht kann ich da was entnehmen. Das wäre natürlich am Besten, wenn ich bei AVRStudio bleiben könnte. > Bei der Crossworks AVR Online Doku wird bei __float64_add die Doku für > __float32_add aufgerufen. Vielleicht ist dieser Bug auch beim Code drin. > Probiere doch mal statt der Addition die Subtraktion des entsprechenden > negativen Werts (die Doku stimmt da). Oder probiere mal > __float64_add_asgn zu verwenden. Diese Funktionen kann man nicht direkt verwenden, da sind die, die "angeblich" intern verwendet werden.
Oliver wrote: > Ich habs zwar noch nie probiert, aber anscheinend kann BASCOM 64 bit > double. Deine Aufgabenstellung klingt auch nicht so anspruchsvoll, als > daß das nicht mit der freien Demo hinzubekommen wäre. Hab ich auch schon probiert. Abgesehen davon, dass ich eigentlich nicht wieder mit Basic arbeiten will, hat die Demo eine 4k Begrenzung. Damit komme ich absolut nicht klar. Neben dem eigentlichen Kram muss bzw. will ich noch einiges mehr machen.
Jörg Wunsch wrote: > (GCC) >> Zu 2. hab ich irgendwo gelesen, das man das angehen will (man sucht wohl >> jemanden dafür) - ich jedenfalls nicht. > > Schade. ;-) Dazu hab ich zu wenig Ahnung und ausserdem fehlt mir die Zeit dazu. Da ist ja doch einiges zu tun. > (IAR) > Auf jeden Fall. Aber ist halt wirklich der Mercedes unter den > Compilern, oder vielleicht eher der Rolls Royce. Was kostet das Ding eigentlich für AVR? > Ich vermute auch, dass du mit einem 32-bit-Prozessor besser bedient > bist. Selbst ein uralter i386 sollte den Job tun. So ist es ja momentan. Der Steuerrechner ist ein uralter 386er, das Programm in Pascal. Das Problem ist, dass alles in einem 100ms-Zyklus laufen muss. Die Hauptrechnerei macht zukünftig ein Windows-Programm, der bisherige Steuerrechner sorgt nur für den Austausch im Zyklus und für die Nachführung.
Michael Korb wrote: >> (IAR) >> Auf jeden Fall. Aber ist halt wirklich der Mercedes unter den >> Compilern, oder vielleicht eher der Rolls Royce. > Was kostet das Ding eigentlich für AVR? Da musst du dir von denen ein Angebot schreiben lassen. ;-) Auf jeden Fall vierstellig, aber genau Preise erfährst du nicht auf 'ner Webseite oder so. Ich hab' vom Hörensagen was von USD 3000 für eine Einzelplatzlizenz gehört.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.