www.mikrocontroller.net

Forum: Compiler & IDEs CrossWorks AVR


Autor: Michael Korb (michaelkorb)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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. :-))

Autor: Michael Korb (michaelkorb)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Stefan Kleinwort (_sk_)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael Korb (michaelkorb)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.ht...

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael Korb (michaelkorb)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael Korb (michaelkorb)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Michael Korb (michaelkorb)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.