- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 5 von 5

Thema: Mehrere Fragen zum Thema Programmieren

  1. #1

    Mehrere Fragen zum Thema Programmieren

    Anzeige

    Praxistest und DIY Projekte
    Hallo,

    bin heute gerade mit dem Zusammenbau von meinem Asuro fertig geworden. Selbsttest etc. ist alles ohne Probleme gelaufen.
    Da ich mich also zum Programmieren wendete bemerkte ich das es doch einige Hürden für mich zu überwindet gibt.

    Code:
    #include "asuro.h"
    
    int main(void)
    {
     unsigned char fs;
     Init();
     fs=PollSwitch();
     MotorSpeed (120,120);
     
     if (fs==0) 
    	{MotorDir(FWD,FWD);}
    	 else
    	{MotorDir(RWD,RWD);
    	SerWrite("Fahre zurück",12);	         //Fehlermeldung : asuro.c:160: error: conflicting types for 'SerWrite'
    	BackLED(ON,ON);
    	Sleep (21600);				//Anmerkung: 216=3ms  -> 21600= 3 sec ?        Resultat:  Funktioniert nicht?!
    	SerWrite("Drehen",6);		
    	MotorDir(FWD,RWD);
    	Sleep (21600);}
    		
     while (1);
     return 0;
    }
    Dieses Programm wollte ich zunächst einfach kompilieren lassen, jedoch mäckert da das Programmer's Notepad am SerWrite rum.
    Hab daraufhin versucht (wie es bei der standartmäßigen Anleitung zu lesen war) nur den SerWrite Befehl in einem seperaten Quellcode kompilieren zu lassen, wodurch sich aber nichts änderte.
    Hinzu kommt noch das ich bereits in meinem vorherigen Programm am Befehl Sleep() scheiterte.
    Hatte dort versucht die StatusLED von Gelb auf rot wechseln zu lassen --> Die LED bleibt auf Gelb.

    Hier nochmal die komplette Fehlermeldung:
    Code:
    avr-gcc --version
    avr-gcc (WinAVR 20100110) 4.3.3
    Copyright (C) 2008 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.
    
    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
    In file included from asuro.h:34,
                     from test.c:1:
    c:/winavr-20100110/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete.  Use <avr/interrupt.h>."
    test.c: In function 'main':
    test.c:14: warning: pointer targets in passing argument 1 of 'SerWrite' differ in signedness
    test.c:16: warning: large integer implicitly truncated to unsigned type
    test.c:17: warning: pointer targets in passing argument 1 of 'SerWrite' differ in signedness
    test.c:19: warning: large integer implicitly truncated to unsigned type
    avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=asuro.lst asuro.c -o asuro.o
    In file included from asuro.h:34,
                     from asuro.c:29:
    c:/winavr-20100110/lib/gcc/../../avr/include/avr/signal.h:36:2: warning: #warning "This header file is obsolete.  Use <avr/interrupt.h>."
    asuro.c:160: error: conflicting types for 'SerWrite'
    asuro.h:74: error: previous declaration of 'SerWrite' was here
    make: *** [asuro.o] Error 1
    
    > Process Exit Code: 2
    > Time Taken: 00:00
    Hoffe ihr könnt mir weiterhelfen und bedanke mich im vorraus für eure Hilfe.

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Der größte Wert für Sleep() ist 255. Für längere Wartezeiten mußt du eine Schleife verwenden und Sleep() mehrfach aufrufen.

    SerWrite() könnte so funktionieren:
    Code:
    	char text[]="Fahre zurück\n";
    	SerWrite(text,13);	         //Fehlermeldung : asuro.c:160: error: conflicting types for 'SerWrite'
    Allerdings wird bei mir auch deine Version fehlerfrei übersetzt. (Es könnte aber auch am "ü" hängen. ascii>127?)

    Gegen das SerWrite()-Problem mit den Vorzeichen (wohl eine neuere AVR-GCC-Version) half bei mir eine Änderung in asuro.h und asuro.c.

    asuro.h:
    Code:
    /* function for serial communication */
    void SerWrite(char *data, unsigned char length); // edit by mic 1.4.2011
    /* timeout = 0 => bloking mode !!! */
    void SerRead(char *data, unsigned char length, unsigned int timeout); // edit by mic 7.6.2012
    asuro.c:
    Code:
    /* function for serial communication */
    void SerWrite(char *data, unsigned char length) // edit by mic 1.4.2011
    {
    
    void SerRead(char *data, unsigned char length,unsigned int timeout) // edit by mic 7.6.2012
    {
    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Danke!

    //Edit: Programm ist jetzt erfolgreich erstellt worden. Nun aber ein neues Problem: Die Variable fs ist anscheinend immer 0, obwohl ich wie ein wilder die K1-K6 betätige...
    //Edit2: Bin im Forum fündig geworden ^^.
    Geändert von Adriano (27.12.2012 um 12:54 Uhr)

  4. #4
    Neuer Benutzer
    Registriert seit
    29.09.2013
    Ort
    Dortmund
    Beiträge
    1
    Das mit dem Sleep() kann man mit folgendem "Vorprogramm" in den Griff bekommen

    #include <asuro.h>

    void sleep_ms(int ms)
    {
    while(ms>0)
    {
    Sleep(72);
    ms=ms-1;
    }
    }
    void main(void) {
    ...



    Dann muss man für z.B. Sleep(72); nur noch sleep_ms(1); einfügen, und die Höhe der Zahl ist egal.
    Nur bedenken:
    1000 ms = 1 s = sleep_ms(1000)

    Das SerWrite könnte sich dadurch erübrigen (bei mir wars so).

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Zitat Zitat von Adriano Beitrag anzeigen
    Danke!

    //Edit: Programm ist jetzt erfolgreich erstellt worden. Nun aber ein neues Problem: Die Variable fs ist anscheinend immer 0, obwohl ich wie ein wilder die K1-K6 betätige...
    //Edit2: Bin im Forum fündig geworden ^^.
    Stimmt laut deine Programm. Du verwendest die While-schleife nicht richtig. Es steht hinter den ganzen fs=PollSwitch(); und if (fs==0) Test. Das dadurch nicht wiederholt wird. Dabei macht es auch "nichts fuhr immer" weil da nur ein Punkt-Komma hinter steht. Was es wiederholen soll muss dort zwischen {}-Klammern stehen.

    - - - Aktualisiert - - -

    Zitat Zitat von Johnny ARX Beitrag anzeigen
    ...
    Code:
    ...
    void sleep_ms(int ms)
     ...
    
    Dann muss man für z.B. Sleep(72); nur noch sleep_ms(1); einfügen, und die Höhe der Zahl ist egal.
    Nur bedenken:
    1000 ms = 1 s = sleep_ms(1000)
    ...
    Nicht ganz egal. Int (signed 16bit integer) geht bis auf 32.767

Ähnliche Themen

  1. Newbe fragen zum Thema: Klima Control
    Von aggro600 im Forum Elektronik
    Antworten: 23
    Letzter Beitrag: 19.07.2012, 22:18
  2. Ein paar grundlegende Fragen zum Thema Motor
    Von Daniel002 im Forum Motoren
    Antworten: 8
    Letzter Beitrag: 06.03.2011, 21:39
  3. fragen zum thema HF
    Von Che Guevara im Forum Elektronik
    Antworten: 4
    Letzter Beitrag: 06.01.2008, 04:01
  4. Hilfe zum Thema: Sensoren Programmieren
    Von Peter Pan im Forum Robby CCRP5
    Antworten: 7
    Letzter Beitrag: 01.02.2007, 21:18
  5. Grundlegende Fragen zum Thema: Robotik
    Von blade im Forum Sonstige Roboter- und artverwandte Modelle
    Antworten: 2
    Letzter Beitrag: 30.11.2005, 23:10

Stichworte

Berechtigungen

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

12V Akku bauen