- Labornetzteil AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Kontrolle durch Kenner erbeten... C-Code

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    74
    Beiträge
    1.175
    Blog-Einträge
    1

    Kontrolle durch Kenner erbeten... C-Code

    Anzeige

    Praxistest und DIY Projekte
    Hallo Freunde von GCC !

    Duch langes Verwenden von ArduinoCode bin ich ein wenig vom C++ Weg abgekommen, ich meine muss mich langsam wieder umstellen. Nun habe ich
    einen Sorcecode erstellt für einen Alarmsender mit ATTiny2313 als µC.
    Ich habe zwar keine Fehlermeldungen beim Compilieren, aber bestimmt habe ich mich bei der Erstellung etwas hinten angestellt. Während es ja beim Arduino die Loopschleife als Hauptprogramm(-Funktion) gibt habe ich mir hier einen "abgebrochen" es mit 'ner while-Schleife und einigen Flags hinzubekommen.
    Die Kenner werden sich bestimmt über den Programmierstil die Bäuche kugellig lachen, ich nehms mit Humor , aber ich möchte gern lernen aus den kritischen Kennerblicken und -worten.

    Hier ist der Sourcecode zu finden.

    Ich danke schon mal für Eure Kritik und Anregung.
    Leider kann ich momentan auch nicht praktisch testen, das STK500 ist zZt woanders..

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

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von -schumi-
    Registriert seit
    30.12.2009
    Ort
    Wasserburg am Inn / Bayern
    Alter
    30
    Beiträge
    449
    So ganz bin ich noch nicht dahintergekommen was du mit den Flags bezweckst, aber ein paar Dinge die mir aufgefallen sind:
    • in der main:
      Code:
      while (erg<1) // Dauerschleife bis Alarmmeldung
      Und dann? Der Mikrocontroller darf sein Programm nie verlassen, denn du weist ja nicht was danach noch so im Flash an Programmcode folgt, der µC kann also alles mögliche machen. Du musst immer eine Hauptschleife haben die unter keinen Umständen verlassen werden kann: while(1)
    • Beide Unterprogramme können zwar int-Werte zurückgeben, aber die einzigen Rücksprungbefehle sind: "return 0;". Wozu muss man dann Int-Werte zurückgeben können, wenn sowiso in jedem Fall nur ein 0er zurückgegeben wird?



    Was soll denn das Programm genau machen?


    1. Warten bis PB2 low ist
    2. für 3 Minuten Alarm geben
    3. Alarm abschalten
    4. warten bis PB2 wieder high ist (kein Alarmsignal mehr)
    5. wieder warten bis PB2 low ist (sprich ab Schriit 1 abwärts)

    Stimmt das so?

    <EDIT:>
    Falls die Liste so stimmt, sollte folgendes Programm funktionieren (nicht getestet, aber so falsch kanns nicht sein ):
    https://dl.dropboxusercontent.com/u/...ogramm2.c.html
    Geändert von -schumi- (25.04.2013 um 00:52 Uhr)

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    74
    Beiträge
    1.175
    Blog-Einträge
    1
    Hallo Schumi !
    habe recht herzlichen Dank für Deine Mühen und auch den Code !!! ich werde am Wochenende mein STK500 wieder haben und kann dann probieren...
    Ja was soll das Programm machen Du hast es fast richtig erfasst, den konkreten Ablauf wird die Praxis erst zeigen.
    Folgendes soll erst mal passieren:
    1. INPort.1 wartet auf LOW
    2. OUTPort.1 gibt 3Min. LOW (Kann event.auch HIGH werden je nach Anschluss, erst mal unwichtig)
    3. OUTPort.2 gibt dauerhaft LOW (Kann event.auch HIGH werden je nach Anschluss, erst mal unwichtig)
    4. INPort.2 wartet auf LOW oder auch Reset möglich... dann weiter bei 1.

    Dazu noch die Frage, wie verhält es sich mit boolschen Variablen, habe gelesen das das in C nicht vorhanden ist, im Boch über C,C++ finde ich aber den Datentyp
    bool bzw. _bool ???
    Na ja ich muss mich wieder Einarbeiten, möchte aber nicht nach ASM oder Bascom wechseln C/C++ soll es schon sein was ich auf meine "alten Tage " noch mals auffrischen möchte und auch anwenden.

    Danke und Gruss

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

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.685
    Zitat Zitat von oderlachs Beitrag anzeigen
    ... Dazu noch die Frage, wie verhält es sich mit boolschen Variablen ...
    Das ist ja ne häufig diskutierte Frage. Gibts im Prinzip nicht, macht ja nix:

    #define bool blafasel
    Denn per #define kann man alles so anlegen, wie man will
    Ciao sagt der JoeamBerg

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Seit C99 gibt es einen entsprechenden Datentypen: http://stackoverflow.com/questions/1...-native-c-type

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    74
    Beiträge
    1.175
    Blog-Einträge
    1
    Ja Markus, so stehts auch in meinen neueren C/C++ Handbüchern, aber ob GCC da so mit macht weiss ich eben nicht, der Versuch wirds zeigen.
    Danke
    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Tut er. Einfach nur stdbool.h einbinden und schon hast du "bool". Für die gescheiten Integer-Datentypen (uintXX_t und intXX_t) gibt es analog stdint.h.

    mfG
    Markus
    Tiny ASURO Library: Thread und sf.net Seite

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.685
    ... nur stdbool.h einbinden und schon hast du "bool ...
    Manchmal brauche ich Anstöße - dann fällt mir wieder ein, dass ich schon mal fündig geworden war. Bei mir liegt das z.B. im directory
    ...\WinAVR-20100110\lib\gcc\avr\4.3.3\include

    In dieser stdbool.h steht dann noch:

    Code:
    ...
    /* As a special exception, if you include this header file into source
       files compiled by GCC, this header file does not by itself cause
       the resulting executable to be covered by the GNU General Public
       License.  This exception does not however invalidate any other
       reasons why the executable file might be covered by the GNU General
       Public License.  *//*
     * ISO C Standard:  7.16  Boolean type and values  <stdbool.h>
     */
    ...
    Ciao sagt der JoeamBerg

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    74
    Beiträge
    1.175
    Blog-Einträge
    1
    So ich habe es jetzt getestet auf dem STK500, leider brachte der Source von Schumi Fehlermeldungen bei _delay_ms mit sich.(??)

    So habe ich meinen Code nochmals umgearbeitet ein wenig und es klappt bestens (ich sehe das so..). Wegen der Einfachheit der Aufgaben, will ich da auch keine weiteren Klimmzüge mehr machen.
    Ich werde bald zu grösseren Aufgaben in Sachen AVR und C++ stossen, wo ich bestimmt wieder ein paar "Nüsse zu knacken habe"

    Hier mein aktueller Source

    Ich danke allen Helfen recht herzlich, ich habe auch wieder dabei gelernt und das ist gut so.

    Danke und Gruss

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

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    07.11.2004
    Beiträge
    332
    Hallo Gerhard,

    der von Dir gezeigt Code hat aber nichts mit C++ zu tun. Hier werden nur die Standard C von K&R verwendet.

    wurde oben zwar schon angesprochen, aber folgende Zeile löst Deine Bool Frage:

    Code:
       
    #include <stdbool.h>
    Ein Buch für C++ wäre da meiner Meinung nach falsch, es sei den, Du willst Objektorientiert Deinen Kontroller programmieren.

    Gruss R.
    Geändert von Ritchie (27.04.2013 um 19:58 Uhr)
    Kaum macht man es richtig, schon funktioniert's ...

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Arduino Kenner gefragt...
    Von oderlachs im Forum Arduino -Plattform
    Antworten: 18
    Letzter Beitrag: 30.11.2011, 16:30
  2. Hilfe beim Compilieren einer C-Quelldatei erbeten
    Von Vilem im Forum C - Programmierung (GCC u.a.)
    Antworten: 13
    Letzter Beitrag: 15.04.2011, 18:46
  3. ATmega durch falschen Code kaputt machen
    Von quad im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 12.09.2008, 23:02
  4. LCD Kenner hier ?
    Von jar im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 13.03.2007, 23:54
  5. Durch inline kleinerer Code?
    Von luma im Forum C - Programmierung (GCC u.a.)
    Antworten: 31
    Letzter Beitrag: 20.06.2005, 15:22

Berechtigungen

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

Labornetzteil AliExpress