CrossWorks AVR

OP #520099
Lesenswert?

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.
Moderator Persönliche Seite #520168
Lesenswert?

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. :-))
OP #520216
Lesenswert?

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?
#520249
Lesenswert?

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
Gast #520281
Lesenswert?

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
Gast #520287
Lesenswert?

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
Moderator Persönliche Seite #520301
Lesenswert?

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.
OP #520795
Lesenswert?

> 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.
OP #520797
Lesenswert?

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.
OP #520798
Lesenswert?

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.
Moderator Persönliche Seite #520951
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren