- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: probleme bei der übertragung mit dem befehl "serwrite

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    15.05.2006
    Ort
    Herxheim
    Beiträge
    13

    probleme bei der übertragung mit dem befehl "serwrite

    Anzeige

    Powerstation Test
    Hallo allerseits
    hab mich hier im forum ein bisschen umgeschaut un gemerkt, dass es hier ziemlich viele leute mit viel kompetenz gibt, weswegen ich mal diesen thema hier öffne, da ich ohne fremde hilfe anscheinend net weiter komme.
    als erstes wollte ich mich jetzt der linienverfolgung witmen , das programiertechnische was dahinter steht sollte eigentlich auch net das problem sein - um allerdings venünftig rechnen zu können benötige ich die werte der transistoren. diese wollte ich über die anweisung serwrite mir im hyperterminal anzeigen lassen, allerdings erscheint bei mir selbst im einfachsten programm eine fehlermeldung
    wäre gediegen wenn ihr mir weiterhelfen könntet
    Code:
      #include "asuro.h"
    
    int main(void)
    {
    String hallo;
    Init();
    SerWrite(Hallo,5);
    while(1);
    return 0;
    }
    
    
    D:\ASURO_src\FirstTry>make all 
    set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c \
    | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > test.d; \
    [ -s test.d ] || rm -f test.d
    -------- begin --------
    avr-gcc --version
    avr-gcc (GCC) 3.3.1
    Copyright (C) 2003 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    Size before:
    test.elf  :
    section    size      addr
    .text      1518         0
    .data         0   8388704
    .bss          1   8388704
    .noinit       0   8388705
    .eeprom       0   8454144
    .stab      3132         0
    .stabstr   1698         0
    Total      6349
    
    
    avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
    test.c: In function `main':
    test.c:5: error: `String' undeclared (first use in this function)
    test.c:5: error: (Each undeclared identifier is reported only once
    test.c:5: error: for each function it appears in.)
    test.c:5: error: parse error before "hallo"
    test.c:8: error: `Hallo' undeclared (first use in this function)
    make: *** [test.o] Error 1
    
    > Process Exit Code: 2
    schon ma im vorraus danke

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Hallo,
    String hallo;
    Das ist hier das Problem,
    Ich gehe einfach davon aus das die Funktion Serwrite einen Zeiger auf ein uint8_t Array erwartet ....

    mithin mußt Du das so schreiben:
    Code:
    uint8_t string[]="Hallo";
    ...
    ...
    SerWrite(string,5);
    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    15.05.2006
    Ort
    Herxheim
    Beiträge
    13
    hey
    danke für die schnelle antwort - hat mir wirklich weitergehoflen - als mein lehrer den post gesehen hat is ihm aufgefallen dass er mir vergessen hatte zu sagen , dass in c++ keine klasse string gibt (hab vorher nur mit java gearbeitet)
    hoffe dass ich so noch rechtzeitig mit meiner facharbeit fertig werde
    ps: ich heiße auch sebastian

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Hallo Sebastian,
    schön daß ich Dir helfen konnte.
    Ich glaub aber, daß Du da was verwechselst.
    Wir sprechen hier von C ohne plus plus und da gibt es keine Klassen.
    Hier kannst Du zum Thema AVR und C++ mehr erfahren.
    Wenn Du sonst noch fragen hast, her damit.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    15.05.2006
    Ort
    Herxheim
    Beiträge
    13
    mh damit ich da jetzt echt nicht was verwechsle
    also c++ is nicht objektorientiert un c folglich auch net
    aber der asuro wird doch in c++ programmiert oder???

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    halt, bevor ich gesteinigt werde

    C -> nix OOP
    c++ -> doch OOP

    Asuro wird in der Regel in C programmiert, also nicht Obiektorientiert.
    Es gibt auch Ansätze von C++ in avr-gcc (sehe mein Link von oben)
    Man kann aber nicht alle Vorzüge von C++ ausspielen.

    Ich hab es persönlich noch nicht probiert, gehöre eher zu der Generation, die mit ZX Spektrum und C64 aufgewachsen ist und tue mir da schwer mit
    den ganzen Klassen usw.

    Ich hoffe, daß es jetzt klar ist

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    15.05.2006
    Ort
    Herxheim
    Beiträge
    13
    also ich hab mich mal jetzt ans programmieren gemacht aber irgend wie funktioniert das net so wie ich will - hier mein programmtext :

    Code:
    #include "asuro.h"
    
    int main(void)
    {
    
    
    
    Init();
    
    uint8_t string []= "linkertransistor";
    
    
    while(1);
    return 0;
    }
    Dazu hab ich folgende fehlermeldung erhalten :
    Code:
    D:\ASURO_src\FirstTry>make all 
    set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c \
    | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > test.d; \
    [ -s test.d ] || rm -f test.d
    -------- begin --------
    avr-gcc --version
    avr-gcc (GCC) 3.3.1
    Copyright (C) 2003 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    Size before:
    test.elf  :
    section    size      addr
    .text      1536         0
    .data         0   8388704
    .bss          1   8388704
    .noinit       0   8388705
    .eeprom       0   8454144
    .stab      3240         0
    .stabstr   1832         0
    Total      6609
    
    
    avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
    test.c: In function `main':
    test.c:10: error: `uint8_t' undeclared (first use in this function)
    test.c:10: error: (Each undeclared identifier is reported only once
    test.c:10: error: for each function it appears in.)
    test.c:10: error: parse error before "string"
    make: *** [test.o] Error 1
    
    > Process Exit Code: 2

    Allerdings hab ich mich im netz schlau gemacht und solche "stringzeiger gefunden" - damit hats auch merh oder weniger geklappt siehe quelltext (zumindest mal kein fehler beim compilieren)

    Code:
     #include "asuro.h"
    
    int main(void)
    {
    const char *linkertransistor;
    const char *rechtertransistor;
    unsigned int transistor[2];
    
    Init();
    
    LineData(transistor);
    linkertransistor = "____";   //das war jeweils nur zum test, ob die funktion linedata() fuktioniert
    rechtertransistor = "1152";   //das war jeweils nur zum test, ob die funktion linedata() fuktioniert
    
    linkertransistor = transistor[0];
    rechtertransistor = transistor[1];
    
    SerWrite(linkertransistor,4);
    SerWrite(rechtertransistor,4);
    
    while(1);
    return 0;
    }
    allerdings bekam ich merkwürdige ergebnisse wie beispielsweise
    Ï oder Ï!™ëAÑ„

    an was könnte das liegen?

    mfg sebastian

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Hallo Sebastian,
    so wie ich gerade sehe bist Du ziemlich am Anfang, was C bzw. avr-gcc Programmieren angeht.

    dazu empfehle ich Dir diese durchzuackern.

    Und jetzt zu Deinen Problemen:
    Compilerfehler:
    test.c:10: error: `uint8_t' undeclared (first use in this function)
    uint8_t ist kein Standardtyp von C dafür mußt Du inttypes.h includen(besser), oder unsigned char benutzen sehe Link von oben.

    Und zu dem rest,such mal hier in Forum nach itoa oder Asuro und Odometrie auslesen,
    das wurde schon 1000 mal diskutiert.
    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    15.05.2006
    Ort
    Herxheim
    Beiträge
    13
    yopp ich glaub das siehst de ziemlich richtig (wie gesagt hab 1,5 jahre nur mit java programmiert) ok werd ich machen ich meld mich dann wieder - danke für den hinweis

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Hallo,
    das soll ja nicht heißen daß ich Dir nicht helfen will !

    Der Ansatz ist schonmal richtig, für die Funkton Linedata brauchst Du ein 2 Feldiges Feld
    Code:
    uint16_t transistoren[2];
    Um die ADC Kanäle von den Transistoren auszulesen mußt Du das Feld, oder besser gesagt Zeiger darauf an die ReadLine Funktion übergeben
    Code:
    ReadLine(transistoren);
    Jetzt hast Du in deinem Feld 2 Zahlen drin zwischen 0-1023, die darfst Du nicht direkt an die serielle Schnittstelle schicken, sonst kommt Käse raus, wie Du schon gesehen hast.
    Dafür ist die Funktion itoa,
    Beispiel:
    In deinem Feld Transistoren hast Du 2 Zahlen, von mir aus 2x125
    wenn Du sie an UART sendest, kommt ein ASCII zeichen von 125 raus, also ein "}"
    Du mußt Deine Zahl 125 in 3 ASCII kodierte Zeichen umwandeln und das wäre dann 0x31 0x32 0x35, die darfst Du dann an UART schicken und im Terminal erscheint 125

    Aber, Kopf hoch, Du bist nicht der erste, der darauf reinfällt, Suche mal nach itoa, Du wirst Dich wundern ...

    So, ich hoffe, meine Ausführungen waren didaktisch und fachlich richtig, und helfen Dir in irgendwelcher Weise.

    Gruß Sebastian

    P.S. Nochwas vergessen, itoa befindet sich in stdlib.h
    Software is like s e x: its better when its free.
    Linus Torvald

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad