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


von Manuel (Gast)


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

von Johnny B. (johnnyb)


Lesenswert?

Musst Du eine Nuklearraketensteuerung programmieren? ;-)

von Manuel (Gast)


Lesenswert?

nein Autoelektronik ^^

von Karl H. (kbuchegg)


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

von Manuel (Gast)


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.

von Zipp (Gast)


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.

von Oliver (Gast)


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

von Zipp (Gast)


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>

von Lady Ada (Gast)


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

von Rolf (Gast)


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

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.