- Akku Tests und Balkonkraftwerk Speicher         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 28

Thema: Winavr - Direktzuweisung ?

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    31.07.2005
    Beiträge
    54
    Anzeige

    E-Bike
    jum, aber sie sind compiler-abhängig

    wenn du mal einen nicht-gcc compiler benützt, verwendet dieser andere headerfiles, und da sind diese makros wahrscheinlich nicht definiert.

    cu

    chris

    ps: das heisst natürlich nicht, dass das verwenden dieser makros 'böse' ist, bei einem anderen compiler wird man einfach die namen per search & replace änder müssen

  2. #12
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Es kommt darauf an, ob du für den eigenen Bedarf Programme schnitzt oder öfters mit Fremdarbeiten / -Umgebungen beschäftigt bist. (--> Lesbarkeit)
    Im letzteren Fall gewöhnt man sich solche (praktischen) Extras halt schnell ab. Mußt du fremde Programm lesen, bis du froh, wenn du nicht bei jedem zweiten Wort erst schauen mußt, was da dahinter steckt.
    Ein "besser" / "schlechter" ist da immer Ansichtssache
    (IMHO)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #13
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Zitat Zitat von Felix G
    Also das musst du aber mal genauer erklären, denn irgendwie sehe ich da kein Problem !?

    Wenn mir bei Port A die Bezeichnung PORTA nicht gefällt,
    und ich der Meinung bin daß EIERSALAT viel besser passen würde,
    dann reicht doch ein einfaches #define EIERSALAT PORTA

    klar, wenn ich schon im ganzen Projekt überall mit PORTA gearbeitet habe ists ein bischen nervig,
    dann muss man halt ein paar Sekunden Zeit investieren und replace drüberjagen.
    ...und dabei alle anderen PORTA überheinern, die nix damit zu tun haben. Niemand wird ernsthaft "PORTA" oder ähnliches direkt benutzen. Ein
    #define EIERSALAT PORTA
    reicht idR nicht aus. Wenn, dann ist angesagt
    #define EIERSALAT_PORT PORTA
    #define EIERSALAT_PIN PINA
    #define EIERSALAT_DDR DDRA
    #define EIERSALAT_BIT 5
    // oder
    #define EIERSALAT_MASK (1<<5)

    EIERSALAT_PORT &= ~EIERSALAT_MASK;
    EIERSALAT_PORT &= ~(1 << EIERSALAT_BIT);
    if (bit_is_set (EIERSALAT_PIN, EIERSALAT_BIT)) {...}


    Zitat Zitat von Felix G
    Dein Makro-Konstrukt finde ich ehrlichgesagt ein bischen übertrieben...
    das ganze geht nämlich genauso gut auch ohne[...]
    Mir ist durchaus bewusst, daß man C programmieren kann ohne einen Präprozessor zu benutzen oder Makros zu definieren.
    Meine Makros find ich auch recht fett. Das ist mir aber inzwischen egal, ich benutz die schon lange und auf verschiedenen AVRs und musste seither nix mehr dran ändern.
    For allem dann ist's praktisch, wenn es viele Ports sind und ich mit Port-Expandern arbeite. Bei über 50 Ports wird's dann schnell unübersichtlich... Umstellen von einem physikalischen Port auf einen via Expander oder zurück ändert nix an der C-Quelle, sondern nur in der Zuweisung einer anderen Port-Konstanten
    Gleichzeitig produzieren die Makros vorbildlich dichten Code.

    Daß Programmierstil Geschmackssache ist, steht natürlich ausser Frage.
    Zugegebenermassen würd mir so was wie
    #define PORT_TASTER PORTD.3
    PORT_TASTER.DDR = 0; // als IN
    PORT_TASTER.PORT = 1; // mit Pullup
    if (0 == PORT_TASTER.PIN) ...
    , was der OP im Sinn hatte, auch nicht schlecht gefallen, und es war die Motivation, ähnliche Konstrukte zu realisieren.
    Disclaimer: none. Sue me.

  4. #14
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.04.2004
    Ort
    München
    Alter
    36
    Beiträge
    288

    -I Schalter

    Hi!
    mir is klar, das das hier jetzt schon nen bisschen älter is, aber ich hätt mal noch ne frage dazu:

    Das sieht alles recht kompliziert aus, aber das kann man wie eine Black Box benutzen und muss es nicht verstehen. Diese beiden Dateien verwende ich in allen Projekten. Sie liegen in einem Verzeichnis ausserhalb der Projekte und den Pfad gebe ich GCC mit dem -I Schalter mit. Etwa:
    avr-gcc ... -Ic:/avr-projekte/include ...
    Was is dieser -I Schalter und wie wird er verwendet?? ich Suche nämlich genau diese Funktion, damit ich nicht in jedem Verzeichnis miener verschiedenen Programme immer die gleiche Includedatei haben muss!!
    (is ja auch wesentlich aufwendiger, wenn man immer alle includedateien ändern muss wenn man die Includedatei mal verbessert!)

    Wäre sehr Dankbar für ne Erklrung des -I Schalters!
    Grüße, Javik

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hi Javik,
    das Beispiel hast Du doch gleich mitzitiert,
    avr-gcc ... -Ic:/avr-projekte/include ...
    einfach ein -I mit dem Pfad in den GCC aufruf, und schon wird der Pfad beim compilieren miteinbezogen.
    Kann man auch im Makefile separat hinterlegen, damit man die Einstellungen wieder findet.

  6. #16
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.04.2004
    Ort
    München
    Alter
    36
    Beiträge
    288
    Hi Linux,

    Ja schon aber ich wusst net wo ich das hinschrieben soll ^^
    ich habs jetzt gemacht wie du mir geraten hast einfach ins Makefile reinschreiben!
    da gibts schon ne eigene Stelle... AUGEN AUF ^^ :

    Code:
    # Place -I options here
    CINCS = -Ic:\Programme\Winavr\....
    jetzt kann ich in dem angegebenen Verzeichnis meine ganzen includes reinhaun
    Super! Danke

    Gruß Javik
    Beschreibung meiner 8 Roboter unter: http://www.j-robotics.de

  7. #17
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    58
    Beiträge
    576
    Hallo Leute

    Der Thread ist schon alt, aber schreibe da gleich dazu .

    Irgendwie stehe ich da am Schlauch
    (schon Stunden gesucht...)

    Habe bisher unter CodeVison sowas verwendet:
    #define rs PORTA.6

    Aufruf dann mit:
    rs= 1;

    Nach Rückumstieg auf WinAVR muss ich das jetzt umschreiben..


    Komme leider mit diesen Logischen Verknüpfungsanweisungen nicht zurecht.

    Müsste das in WinAVR dann nicht so heissen:
    #define rs PORTA |= (1<<6)

    Mag er aber nicht

    Will mit Define nur das Bit vom Port zuweisen wo ich dann nachher wieder sagen kann:
    rs=1;


    Bitte helft mir
    l.G. Roberto

  8. #18
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    41
    Beiträge
    1.780
    das geht so nicht...


    aus deinem Code baut der Präprozessor das hier:

    PORTA |= (1<<6) = 1;

    Dieser Code macht aber keinen Sinn.
    So viele Treppen und so wenig Zeit!

  9. #19
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    58
    Beiträge
    576
    Hallo Felix

    Ja das dachte ich mir, aber wie mache ich es richtig?
    l.G. Roberto

  10. #20
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    58
    Beiträge
    576
    Ps.:
    Habe da jetzt endlich etwas dazu gefunden:
    https://www.roboternetz.de/phpBB2/ze...efine+port+pin

    Sehe ich das so richtig?

    Ich kann mit #Define nur dem "rs" eine 4 Zuweisen (Bit 4)

    Das das Bit 4 gesetzt wird muss ich dann schreiben:

    PORTA |= (1 << rs);

    Stimmt das so? geht das nicht einfacher ?
    So müsste ich ja immer im Code den Port neu angeben

    l.G. Roberto

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test