-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 22

Thema: Problem beim kompilieren:

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.02.2005
    Beiträge
    385

    Problem beim kompilieren:

    Anzeige

    Hi,
    ich habe eine Zeit lang keine große Lust gehabt mich in die C-Programmierung meines AVR einzuarbeiten. Jetzt hab ich sie wieder und hab gerade die ganzen Packages unter Suse Linux 10.0 installiert, die man so braucht, also gcc-core, avr-libc, uisp, binutils. Dann wollte ich das Testprogramm das man auf http://www.tldp.org/linuxfocus/Engli...ticle352.shtml findet kompilieren, die Fehlermeldung lautete:


    Code:
    linux:/home/mathias/Desktop # make
    avr-gcc -g -mmcu=atmega8 -Wall -Wstrict-prototypes -Os -mcall-prologues -Os -c avrm8ledtest.c
    avrm8ledtest.c:27: error: syntax error before 'void'
    avrm8ledtest.c:34: warning: type defaults to 'int' in declaration of 'outer1'
    avrm8ledtest.c:34: warning: data definition has no type or storage class
    avrm8ledtest.c:36: error: syntax error before 'while'
    avrm8ledtest.c:78: error: syntax error before numeric constant
    avrm8ledtest.c:78: warning: type defaults to 'int' in declaration of 'delay_ms'
    avrm8ledtest.c:78: warning: function declaration isn't a prototype
    avrm8ledtest.c:78: warning: data definition has no type or storage class
    avrm8ledtest.c:80: error: syntax error before 'volatile'
    avrm8ledtest.c:81: error: syntax error before numeric constant
    avrm8ledtest.c:81: warning: type defaults to 'int' in declaration of 'delay_ms'
    avrm8ledtest.c:81: warning: function declaration isn't a prototype
    avrm8ledtest.c:81: warning: data definition has no type or storage class
    make: *** [avrm8ledtest.o] Fehler 1
    Ich poste auch mal das Makefile und den Code, weiß nicht ob das hilft aber schaden kanns ja nicht:

    Make:
    Code:
    # makefile, written by guido socher
    MCU=atmega8
    CC=avr-gcc
    OBJCOPY=avr-objcopy
    # optimize for size:
    CFLAGS=-g -mmcu=$(MCU) -Wall -Wstrict-prototypes -Os -mcall-prologues
    #-------------------
    all: avrm8ledtest.hex
    #-------------------
    help: 
    	@echo "Usage: make all|load|load_pre|rdfuses|wrfuse1mhz|wrfuse4mhz|wrfusecrystal"
    	@echo "Warning: you will not be able to undo wrfusecrystal unless you connect an"
    	@echo "         external crystal! uC is dead after wrfusecrystal if you do not"
    	@echo "         have an external crystal."
    #-------------------
    avrm8ledtest.hex : avrm8ledtest.out 
    	$(OBJCOPY) -R .eeprom -O ihex avrm8ledtest.out avrm8ledtest.hex 
    avrm8ledtest.out : avrm8ledtest.o 
    	$(CC) $(CFLAGS) -o avrm8ledtest.out -Wl,-Map,avrm8ledtest.map avrm8ledtest.o 
    avrm8ledtest.o : avrm8ledtest.c 
    	$(CC) $(CFLAGS) -Os -c avrm8ledtest.c
    #------------------
    load: avrm8ledtest.hex
    	./prg_load_uc avrm8ledtest.hex
    # here is a pre-compiled version in case you have trouble with
    # your development environment
    load_pre: avrm8ledtest_pre.hex
    	./prg_load_uc avrm8ledtest.hex
    #
    loaduisp: avrm8ledtest.hex
    	./prg_load_uc -u avrm8ledtest.hex
    # here is a pre-compiled version in case you have trouble with
    # your development environment
    load_preuisp: avrm8ledtest_pre.hex
    	./prg_load_uc -u avrm8ledtest.hex
    #-------------------
    # fuse byte settings:
    #  Atmel AVR ATmega8 
    #  Fuse Low Byte      = 0xe1 (1MHz internal), 0xe3 (4MHz internal), 0xe4 (8MHz internal)
    #  Fuse High Byte     = 0xd9 
    #  Factory default is 0xe1 for low byte and 0xd9 for high byte
    # Check this with make rdfuses
    rdfuses:
    	./prg_fusebit_uc -r
    # use internal RC oscillator 1 Mhz
    wrfuse1mhz:
    	./prg_fusebit_uc -w 1
    # use internal RC oscillator 4 Mhz
    wrfuse4mhz:
    	./prg_fusebit_uc -w 4
    # use external 3-8 Mhz crystal
    # Warning: you can not reset this to intenal unless you connect a crystal!!
    wrfusecrystal:
    	@echo "Warning: The external crystal setting can not be changed back without a working crystal"
    	@echo "         You have 3 seconds to abort this with crtl-c"
    	@sleep 3
    	./prg_fusebit_uc -w 0
    #-------------------
    clean:
    	rm -f *.o *.map *.out *t.hex
    #-------------------

    Code:
    Code:
    /*********************************************
    * vim: set sw=8 ts=8 si :
    * Author: Guido Socher, Copyright: GPL 
    * This program is to test the led connected to
    * PC5. 
    * See http://linuxfocus.org/English/November2004/
    * for details.
    * Chip type           : ATMEGA8
    * Clock frequency     : Internal clock 1 Mhz (factory default)
    *********************************************/
    #include <avr/io.h>
    
    //#define OLD 1
    
    #ifdef OLD
    /* compatibilty macros for old style */
    #ifndef cbi
    *#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))*
    #endif
    
    #ifndef sbi
    *#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))*
    #endif
    
    #endif /*OLD*/
    
    *void delay_ms(unsigned short ms)*
    /* delay for a minimum of <ms> */
    /* with a 1Mhz clock, the resolution is 1 ms */
    {
            // Note: this function is faulty, see avrm8ledtest-0.2.tar.gz for
            //       updated code.
            unsigned short outer1, outer2;
                 outer1 = 50; 
    
                while (outer1) {
                    outer2 = 1000;
                    while (outer2) {
                            while ( ms ) ms--;
                            outer2--;
                    }
                    outer1--;
            }
    }
    
    #ifdef OLD
    // old style now depricated:
    *void main(void)*
    {
            // enable  PC5 as output 
            sbi(DDRC,PC5);
            while (1) {
                    // led on, pin=0 
                    cbi(PORTC,PC5);
                    delay_ms(500);
                    // set output to 5V, LED off 
                    sbi(PORTC,PC5);
                    delay_ms(500);
            }
    }
    
    #else
    
    /* new style */
    *void main(void)*
    {
              /* INITIALIZE */
              /* enable PC5 as output */
              DDRC|= _BV(PC5);
    
    
              /* BLINK, BLINK ... */
    
              /* PC5 is 5 (see file include/avr/iom8.h) and _BV(PC5) is 00100000 */
              while (1) {
                          /* led on, pin=0 */
                          PORTC &= ~_BV(PC5);
                          delay_ms(500);
                          /* set output to 5V, LED off */
                          PORTC|= _BV(PC5);
                          delay_ms(500);
              }
    }
    
    #endif /*OLD*/
    Das Problem ist eben auch, dass ich weder den Code verstehe, noch weiß was die Sache mit dem Makefile soll. Also Ahnung von Programmieren hab ich schon allerdings nur in Java (hilft mir ja hier nicht weiter schätz ich mal)

    Ich hoff ihr könnt mir helfen.

    mfg
    jagdfalke

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,
    also mir würden diese Sternchen am Anfang und am ende erstmal auffallen,
    probiers mal ohne in den jeweiligen Zeilen die er anmeckert.

    er schreibt ja so schön:
    syntax error before 'void'
    dann schau mal vor das void

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.02.2005
    Beiträge
    385
    Ok, das hätten wir schon mal, danke. Ich hab den Code mal im Archive runtergeladen und da waren diese * von vornherein ncht.

    Mit dem Befehl "make load" sollte ja das Programm rübergeschoben werden. Der output von make load ist;
    ./prg_load_uc avrm8ledtest.hex
    + avrdude -p m8 -c dapa -e -U flash:w:avrm8ledtest.hex
    ./prg_load_uc: line 35: avrdude: command not found
    + set +x
    Was mich etwas iritiert ist, dass immer von avrdude gesprochen wird (2x). Ich habe aber nie avrdude installiert. Gehts wohl nicht ohne?

    Kann mir jemand nen Link geben, wo ich Schritt für Schritt avr-c lerne?

    mfg
    jagdfalke

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.08.2005
    Ort
    49.80248 8.59252
    Alter
    33
    Beiträge
    172
    Mit irgenwas muss das Programm ja uebertragen werden und da ist avrdude ganz gut fuer geeignet. Das wirst du wohl oder uebel installieren muessen. uisp kannst du auch nehmen aber das unterstuetzt meines Wissens nicht die neuesten AVRs.

    Arbeite dich da mal durch: http://www.mikrocontroller.net/artic...R-GCC-Tutorial

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.02.2005
    Beiträge
    385
    Ok, also wir kommen der Sache schon näher
    Mittlerweile sieht das ganze so aus:
    linux:/home/mathias/avr programm/avrm8ledtest-0.3 # make load
    ./prg_load_uc avrm8ledtest.hex
    + avrdude -p m8 -c dapa -e -U flash:w:avrm8ledtest.hex

    avrdude: AVR device not responding
    avrdude: initialization failed, rc=-1
    Double check connections and try again, or use -F to override
    this check.


    avrdude done. Thank you.

    + set +x
    Sieht recht gut aus, abgesehen davon, dass der Controller nicht antwortet. Strom ist angeschlossen, JSP-Dongle am parport0. Kann es was mit dem PrinterSpooler von Linux zu tun haben? Wenn ja, wie schalte ich den aus?

    mfg
    jagdfalke

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.08.2005
    Ort
    49.80248 8.59252
    Alter
    33
    Beiträge
    172
    JSP-Dongle sagt mir leider mal garnichts. Vllt musst du das Device noch mit -P angeben. Schau auch ob du die noetigen Berechtigungen auf parport0 hast.
    Ich glaub nicht, dass da ein Spoller dazwischenfunkt. SUSE hat sicher irgendein Tool womit man das Teil probehalber einfach beenden kann.

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.02.2005
    Beiträge
    385
    Es muss natürlich ISP heißen, nicht JSP. (Das Kabel mit dem man den Controller mit dem PC verbindet.

    Ich hab mal den Aufruf von avrdude mit einem -F versehen. make load schaut jetzt so aus:
    linux:/home/mathias/avr programm/avrm8ledtest-0.3 # make load
    ./prg_load_uc avrm8ledtest.hex
    + avrdude -F -p m8 -c dapa -e -U flash:w:avrm8ledtest.hex

    avrdude: AVR device not responding
    avrdude: initialization failed, rc=-1
    avrdude: AVR device initialized and ready to accept instructions

    Reading | ################################################## | 100% 0.00s

    avrdude: Device signature = 0xffffff
    avrdude: Yikes! Invalid device signature.
    avrdude: erasing chip
    avrdude: AVR device not responding
    avrdude: reading input file "avrm8ledtest.hex"
    avrdude: input file avrm8ledtest.hex auto detected as Intel Hex
    avrdude: writing flash (204 bytes):

    Writing | ################################################## | 100% 0.11s

    avrdude: 204 bytes of flash written
    avrdude: verifying flash memory against avrm8ledtest.hex:
    avrdude: load data flash data from input file avrm8ledtest.hex:
    avrdude: input file avrm8ledtest.hex auto detected as Intel Hex
    avrdude: input file avrm8ledtest.hex contains 204 bytes
    avrdude: reading on-chip flash data:

    Reading | ################################################## | 100% 0.08s

    avrdude: verifying ...
    avrdude: verification error, first mismatch at byte 0x0000
    0x0c != 0xff
    avrdude: verification error; content mismatch

    avrdude: safemode: Fuses OK

    avrdude done. Thank you.

    + set +x
    Das F bewirkt ja, dass er nicht drauf achtet ob der Controller antwortet oder nicht. Ist das Programm jetzt drauf?

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.08.2005
    Ort
    49.80248 8.59252
    Alter
    33
    Beiträge
    172
    Na ueberleg mal, wenn er den mega8 vorher nicht gefunden hat bzw er nicht antwortet, dann haste das Programm ins Nirvana geschrieben.

    Uberpruef mal die Verkabelung. MISO MOSI vertauscht und so.

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.02.2005
    Beiträge
    385
    Man kann sich ja leider nicht immer darauf verlassen, was einem der PC erzählt. Denn das Writing sieht ja aus also obs geklappt hätte.
    Die Verkabelung kann kaum falsch sein: richtig am Controller angeschlossen ist es und am PC kann man eh nix falsch machen.

  10. #10
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.02.2005
    Beiträge
    385
    Weiß keiner Rat?

    Hier nochmal die Files (dürften jetzt etwas anders sein):

    .c-File
    Code:
    /*********************************************
    * vim: set sw=8 ts=8 si :
    * Author: Guido Socher, Copyright: GPL 
    * This program is to test the led connected to
    * PC5. 
    * See http://linuxfocus.org/English/November2004/
    * for details.
    * Chip type           : ATMEGA8
    * Clock frequency     : Internal clock 1 Mhz (factory default)
    *********************************************/
    #include <avr/io.h>
    #include <inttypes.h>
    
    //#define OLD 1
    
    #ifdef OLD
    /* compatibilty macros for old style */
    #ifndef cbi
    #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
    #endif
    
    #ifndef sbi
    #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
    #endif
    
    #endif /*OLD*/
    
    void delay_ms(unsigned short ms)
    /* delay for a minimum of <ms> */
    /* with a 1Mhz clock, the resolution is 1 ms */
    {
    	uint8_t inner,inner1;
    
        	while (ms) {
    		inner = 100;
    		while (inner) {
    			inner--;
    			inner1 = 70;
    			while (inner1) {
    				inner1--;
    			}
    		}
    		ms--;
    	}
    }
    
    #ifdef OLD
    // old style now depricated:
    void main(void)
    {
    	// enable  PC5 as output 
    	sbi(DDRC,PC5);
    	while (1) {
    		// led on, pin=0 
    		cbi(PORTC,PC5);
    		delay_ms(500);
    		// set output to 5V, LED off 
    		sbi(PORTC,PC5);
    		delay_ms(500);
    	}
    }
    
    #else
    
    /* new style */
    void main(void)
    {
              /* INITIALIZE */
              /* enable PC5 as output */
              DDRC|= _BV(PC5);
    
    
              /* BLINK, BLINK ... */
    
              /* PC5 is 5 (see file include/avr/iom8.h) and _BV(PC5) is 00100000 */
              while (1) {
                          /* led on, pin=0 */
                          PORTC &= ~_BV(PC5);
                          delay_ms(500);
                          /* set output to 5V, LED off */
                          PORTC|= _BV(PC5);
                          delay_ms(500);
              }
    }
    
    #endif /*OLD*/
    MakeFile:
    Code:
    # makefile, written by guido socher
    MCU=atmega32
    CC=avr-gcc
    OBJCOPY=avr-objcopy
    # optimize for size:
    CFLAGS=-g -mmcu=$(MCU) -Wall -Wstrict-prototypes -Os -mcall-prologues
    #-------------------
    all: avrm8ledtest.hex
    #-------------------
    help: 
    	@echo "Usage: make all|load|load_pre|rdfuses|wrfuse1mhz|wrfuse4mhz|wrfusecrystal"
    	@echo "Warning: you will not be able to undo wrfusecrystal unless you connect an"
    	@echo "         external crystal! uC is dead after wrfusecrystal if you do not"
    	@echo "         have an external crystal."
    #-------------------
    avrm8ledtest.hex : avrm8ledtest.out 
    	$(OBJCOPY) -R .eeprom -O ihex avrm8ledtest.out avrm8ledtest.hex 
    avrm8ledtest.out : avrm8ledtest.o 
    	$(CC) $(CFLAGS) -o avrm8ledtest.out -Wl,-Map,avrm8ledtest.map avrm8ledtest.o 
    avrm8ledtest.o : avrm8ledtest.c 
    	$(CC) $(CFLAGS) -Os -c avrm8ledtest.c
    #------------------
    load: avrm8ledtest.hex
    	./prg_load_uc avrm8ledtest.hex
    # here is a pre-compiled version in case you have trouble with
    # your development environment
    load_pre: avrm8ledtest_pre.hex
    	./prg_load_uc avrm8ledtest.hex
    #
    loaduisp: avrm8ledtest.hex
    	./prg_load_uc -u avrm8ledtest.hex
    # here is a pre-compiled version in case you have trouble with
    # your development environment
    load_preuisp: avrm8ledtest_pre.hex
    	./prg_load_uc -u avrm8ledtest.hex
    #-------------------
    # fuse byte settings:
    #  Atmel AVR ATmega8 
    #  Fuse Low Byte      = 0xe1 (1MHz internal), 0xe3 (4MHz internal), 0xe4 (8MHz internal)
    #  Fuse High Byte     = 0xd9 
    #  Factory default is 0xe1 for low byte and 0xd9 for high byte
    # Check this with make rdfuses
    rdfuses:
    	./prg_fusebit_uc -r
    # use internal RC oscillator 1 Mhz
    wrfuse1mhz:
    	./prg_fusebit_uc -w 1
    # use internal RC oscillator 4 Mhz
    wrfuse4mhz:
    	./prg_fusebit_uc -w 4
    # use external 3-8 Mhz crystal
    # Warning: you can not reset this to intenal unless you connect a crystal!!
    wrfusecrystal:
    	@echo "Warning: The external crystal setting can not be changed back without a working crystal"
    	@echo "         You have 3 seconds to abort this with crtl-c"
    	@sleep 3
    	./prg_fusebit_uc -w 0
    #-------------------
    clean:
    	rm -f *.o *.map *.out *t.hex
    #-------------------
    prg_load_uc
    Code:
    #!/bin/sh 
    prg="adude"
    if [ "$1" = "-u" ]; then
    	shift;
    	prg="uisp"
    fi
    if [ -z "$1" -o "$1" = "-h" -o "$1" = "--help" ]; then
    	echo "prg_load_uc -- load a .hex file into a atmega8 microcontroller"
    	echo ""
    	echo "Usage: prg_load_uc [-hu] File.hex"
    	echo ""
    	echo "OPTIONS: -h this help"
    	echo "         -u use uisp instead of avrdude"
    	echo "            avrdude can automatically detect dapa or avrusb500."
    	echo "            uisp can only be used with the parallel port dapa."
    	echo ""
    	echo "This script can be easily adapted to different Programmer types"
    	exit 0
    fi
    pfile="$1"
    
    if [ "$prg" = "uisp" ]; then
    	set -x
    	uisp -dlpt=/dev/parport0 --erase  -dprog=dapa
    	uisp -dlpt=/dev/parport0 --upload if="$pfile" -dprog=dapa  -v=3 --hash=32 --verify
    	set +x
    fi
    if [ "$prg" = "adude" ]; then
    	if grep "Vendor=0403 ProdID=6001" /proc/bus/usb/devices > /dev/null ; then
    		set -x
    		avrdude -F -p m8 -c avrusb500 -e -U flash:w:"$pfile"
    		set +x
    	else
    		set -x
    		avrdude -F -p m8 -c dapa -e -U flash:w:"$pfile"
    		set +x
    	fi
    fi

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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