www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ada auf Mikrocontrollern (Ports, adressierung)


Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag,

ich soll auf einen Avr programmieren und das mit Ada.Dazu nur ein paar 
fragen.
Unter C hab ich ein Char anleget und dort Ports reingelesen weils ja 8 
Bit werte sind. Wie mache ich das unter Ada? muss ich dort auch ein 
Caracter anlegen? Zudem die nächste Frage Bitoperationen wie logisches 
Oder und UNd um Bitmasken zuvergleichen gibt es doch unter Ada nicht 
oder?
Und wie Adressiere ich binär? Laut Lehrbuch mit 2#10000001# das 
funktioniert bei Integer aber bei charakter murmelt er rum kein 
Standart.char etc.
Als Compiler verwende ich das gps von Adacore. Ada und der Compiler sind 
vorgegeben, da kann ich nicht eben mal leider auf C runter.

mfg

Autor: Johnny B. (johnnyb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Musst Du eine Nuklearraketensteuerung programmieren? ;-)

Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein Autoelektronik ^^

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welchen Prozessor sollst du da beackern?
Und macht da Ada überhaupt Sinn?

Ansonsten: mein Beileid
Zur Sache kann ich leider nichts beitragen. Ada kenn ich nur dem Namen 
nach .-)

Autor: Manuel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich benutze einen ATMEGA 644 und ja habe einen Compiler der das 
mitmachen sollte, is alles erstma Testphase. Nutz halt das Gnatgp von 
Adacore also das GPS tool. NAcher wirds per Jtag rübergepresst 
(JtagICEmkII).

UNd naja Ada von daher sicherheitskritsche Anwendung auf Fahrzeug 
elektronik, ist halt alles bissle Forschungsfaktor drinne.

Autor: Zipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich wuerd mal das Ada Reference Manual (teuer!) hervorziehen und mir da 
die Datentypen reinziehen. Irgendwas mit Byte wuerd ich erwarten, kann 
aber auch smallint sein.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ada Reference Manual (teuer!)

EXTREM teuer. Kostet tatsächlich eine google-Suche...

http://lmgtfy.com/?q=ada+reference+manual

Um zu widerlegen, daß ADA keine Bitoperatoren kennt, muß man das noch 
nicht einmal lesen. Dazu reicht eine einfache google-Anfrage.

Und auch in C ist es sehr sinnvoll, einen char nur als character 
(Buchstaben) zu verwenden, und sonst für nix. In ADA mit der strengen 
Typprüfung ist das dann wohl erst recht unabdingbar.

Oliver

Autor: Zipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
<mecker>
von Ada keine Ahnung, aber das Vertrauen, dass jeder Ada Code 
automatisch fehlerfrei ist ... soweit ist man nun in der 
Automobilindustrie ... interessant.
</mecker>

Autor: Lady Ada (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt derzeit zwei Ada Compiler mit Support-Routinen für die AVR 
8-Bitter. Der eine ist AVR-Ada, frei verfügbar auf Sourceforge.  Dort 
findet man auch einigen Code, der die Fragen ausreichend beantworten 
sollte.

AdaCore vertreibt seine eigene Portierung des GNAT auf AVR-Architektur. 
Dazu kommt idR sehr guter und umfangreicher Support durch 
AdaCore-Mitarbeiter.  Der AdaCore Support sollte die Fragen ebenfalls im 
Handumdrehen beantwortet haben.

Wenn Du in Ada einen 8-bit breiten Wert nutzen möchtest, gibt es die 
beiden Typen Interfaces.Integer_8 und Interfaces.Unsigned_8.  Der 
Standard-Typ Character ist, wie der Name schon sagt, für Textzeichen, 
nicht für Berechnungen.  Ein beliebiges Ada-Tutorial zeigt, wie man eine 
Typkonvertierung (in C ein cast) vornimmt.

In der Regel sollten Typen aus dem Problembereich definiert werden, 
nicht nach der Datenbreite.  Der Compiler macht daraus schon das 
richtige Format.

z. B.

    type Temperature is delta 0.5 range -55.0 .. 120.0;

definiert einen (fixed point) Typ mit dem Wertebereich von -55°C bis 
+120°C und einer Auflösung von einem halben Grad.


Wenn alle Bits von Port B auf Ausgang geschaltet werden sollen, tut's 
folgender Code

   MCU.DDRB_Bits := (0 .. 7 => DD_Output);


Du willst dann Bits 3 und 5 auf high und die anderen auf low setzen:

   MCU.PortB_Bits := (3 => True,
                      5 => True,
                      others => False);

oder

   MCU.PortB := 2#0001_0100#;

in beiden Fällen wird äquivalenter Code erzeugt

Autor: Rolf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Manuel,

die meisten Fragen sollte Lady Ada beantwortet haben. Falls dennoch 
Fragen offen sind, gibt es eine Mailing-Liste für AVR-Ada unter

avr-ada-devel@lists.sourceforge.net

Du kannt mir auch gerne persönlich eine Nachricht schicken an

rolf   ebert   gcc         gmx    de
   punkt   punkt klammeraffe  punkt


Viel Erfolg
    Rolf

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.