- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 10 von 13

Thema: Arduino -wofür 16-Bit int?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    06.05.2005
    Ort
    Berlin
    Beiträge
    212

    Arduino -wofür 16-Bit int?

    Hallo liebe Roboter
    Ich versuche mich gerade an einem "Arduino Uno smd"
    und habe einen Taster an "digital pin 8" (PB0) angeschlossen.
    Ich wundere mich etwas über den mit der Arduino IDE mitgelieferten Beispielcode
    zum Abfragen eines Portpins (Button.ino).
    Die globale Deklaration und Initialisierung sieht hier so aus:
    Code:
    const int buttonPin = 2;
    Danach wird noch eine Variable für einen einzelnen Portzustand
    wieder in 2Byte global deklariert und initialisiert:
    Code:
    int buttonState = 0;
    Werden hier wirklich 2 Byte, bzw. 16 Bit Variablenplatz im RAM
    einer 8 Bit MCU (Atmega328 ) für je ein einzelnes Bit genutzt?

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.02.2013
    Ort
    Graz
    Beiträge
    211
    Gute Frage. Es gibt eine boolean Datentyp, der nur 1 byte belegt. Oder gleich den Datentyp "Byte". Schonmal probiert?

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von ichbinsisyphos Beitrag anzeigen
    Gute Frage. Es gibt eine boolean Datentyp, der nur 1 byte belegt. Oder gleich den Datentyp "Byte". Schonmal probiert?
    Das hilft bei einer fertigen Library wenig. Außerdem:

    6.2.5. Datentyp bool
    C sieht keinen eigenen Datentyp für logische Werte vor.
    Logische Ausdrücke und Vergleiche liefern stattdessen einen Wert vom Typ int:
    Solange das RAM nicht knapp wird, ist doch alles gut.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.02.2013
    Ort
    Graz
    Beiträge
    211
    Aber beim Arduino gibts einen "boolean"-Typ der 1byte Länge hat, und den Typ "Byte". Ob die Bibliotheken das annehmen und womit sie intern arbeiten ist eine andere Frage, aber 16bit für einen 1bit-Wert das wär wirklich ziemlich schwachsinnig.

    edit: ja, laut "O'Reilly Arduino Cookbook" kann man zum Auslesen und Beschreiben der digitalen pins boolean-Werte nehmen.
    Geändert von ichbinsisyphos (06.03.2013 um 20:51 Uhr)

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    06.05.2005
    Ort
    Berlin
    Beiträge
    212
    Das es das Format "Byte" gibt, ist mir bekannt.
    Eigentlich kenne ich das vom avr-gcc als "uint8_t".
    Das ist auch eindeutiger, da "Byte" nichts darüber aussagt,
    ob das Format vorzeichenbehaftet ist (was immer das ..._t bei uint8_t am Ende auch bedeuten mag.)
    Ich habe extra den Beispielcode zitiert und meine Frage ist eigentlich auch,
    ob es einen, mir nicht zugänglichen Sinn hat, hier 16 statt 8 Bit zu bemühen.
    Solange das RAM nicht knapp wird, ist doch alles gut.
    Ich hab noch keine Ahnung, wie knapp das werden wird,
    aber das Problem ist ja nicht nur der RAM Speicher.
    Der Mega328 ist doch nur ein 8-Bitter.
    Der muß doch ziemlich unnötige Verrenkungen machen um mit 16-Bit Variablen
    umzugehen, wenn es nicht nötig ist.
    Ich benutze ja keine RISC-MCU, um sie dann mit ungeschicktem
    Code zu kastrieren .

    Das habe ich mittlerweile in der Arduino Referenz gefunden:
    On the Arduino Uno (and other ATMega based boards) an int stores a 16-bit (2-byte) value.
    Ein paar Zeilen weiter:
    The Arduino takes care of dealing with negative numbers for you,
    so that arithmetic operations work transparently in the expected manner.
    There can be an unexpected complication in dealing with the bitshift right operator (>>) however.
    http://arduino.cc/en/Reference/Int
    Logisch, wenn ich das Vorzeichenflag mitschiebe, zudem wirds ja bei nem 8-Bitter
    vermutlich auch keinen Überlauf unter das LSBit des oberen Bytes eines int geben .
    Naja, das wird mir allerdings langsam suspekt.
    Bitoperationen sind ja nun mein Hobby .

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    21.02.2013
    Ort
    Graz
    Beiträge
    211
    Ich glaub, dass bei der Arduino-Dokumentation vieles so ist, wie es ist, weil man die typische Zielgruppe möglichst nicht mit zu vielen unterschiedlichen Konzepten abschrecken will.

    Nur zum Zwischenspeichern von pin states spricht meiner Meinung nach garnichts gegen 8bit. Wie gesagt, der Herr O'Reilly schreibt da booleans rein und raus. Wenn du auf den Wert irgendwelche weiteren Operationen anwenden willst, musst du dir das halt im Detail ansehen.

    edit
    Zitat Zitat von Arduino.h
    ...
    typedef uint8_t boolean;
    typedef uint8_t byte;

    void init(void);

    void pinMode(uint8_t, uint8_t);
    void digitalWrite(uint8_t, uint8_t);
    int digitalRead(uint8_t);

    ...
    Button.h verwendet aus irgendwelchen Gründen das C++-eigene "bool", auch 1 byte.
    Geändert von ichbinsisyphos (06.03.2013 um 22:52 Uhr)

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    73
    Beiträge
    1.175
    Blog-Einträge
    1
    Zitat Zitat von tholan Beitrag anzeigen
    ......

    Der Mega328 ist doch nur ein 8-Bitter.
    Der muß doch ziemlich unnötige Verrenkungen machen um mit 16-Bit Variablen
    umzugehen, wenn es nicht nötig ist.
    Ich benutze ja keine RISC-MCU, um sie dann mit ungeschicktem
    Code zu kastrieren .

    ...
    ....war das nicht mit dem "8-Bitter" nur was in Sachen Befehlsbus...?? also max 255 Befehle...?? Das hat doch nix mit Variablenlängen usw. zu tun denke ich, aber Prozessortopologie ist schon ein paar Jahrzehte her bei mir.

    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

Ähnliche Themen

  1. 16-bit int in 2 8-bit int zerlegen
    Von Christoph2 im Forum C - Programmierung (GCC u.a.)
    Antworten: 22
    Letzter Beitrag: 15.04.2016, 15:21
  2. PollComport(int,char,int) von rs232.h benutzen
    Von pete1612 im Forum Software, Algorithmen und KI
    Antworten: 0
    Letzter Beitrag: 15.04.2012, 21:48
  3. Erste Arduino-kompatible 32-bit-Entwicklungsplattform
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 0
    Letzter Beitrag: 26.05.2011, 12:30
  4. Wofür C1 bei RN-Control?
    Von Jimmy23 im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 2
    Letzter Beitrag: 11.04.2010, 12:19
  5. Elektromotor: wofür 3. Anschluss?
    Von scales im Forum Motoren
    Antworten: 3
    Letzter Beitrag: 18.08.2006, 15:01

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress