Forum: Compiler & IDEs CrossWorks AVR


von Michael K. (michaelkorb)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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. :-))

von Michael K. (michaelkorb)


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?

von Stefan K. (_sk_)


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

von Michael K. (michaelkorb)


Lesenswert?

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

von Oliver (Gast)


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

von Stefan (Gast)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Michael K. (michaelkorb)


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.

von Michael K. (michaelkorb)


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.

von Michael K. (michaelkorb)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

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.