PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro LIB ver2.61 Fehlermeldung



irobot_22587
31.12.2006, 23:36
!!!!!!Hilfe!!!!!!!

Die erweiterten Lib Funktionen sehen sehr gut aus. Wuerde ich gerne nutzen.

Ich bekomme jedoch immer eine Compiler Fehlermeldung, wenn ich die asuro.c und asuro.h durch die Dateien der neuen version ersetze. Unten in der Code Section die Fehlermeldung und die Auszuegen aus dem makefile, meinem Programm und der asuro.c (ver2.61) Dateien.

Bitte dringends um Hilfe, komme mit meinen Projekten nicht weiter.

Gruesse und frohes neues Jahr aus dem sonnigen Kalifornien!



************************************************** *************************************
******************************Fehlermeldung aus PN2************************************
************************************************** *************************************

C:\azuro\ASURO_src\Edge>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=Edge.lst Edge.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > Edge.d; \
[ -s Edge.d ] || rm -f Edge.d
make: *** Warning: File `Edge.d' has modification time in the future (2007-01-01 00:06:36 > 2007-01-01 00:06:34)
-------- 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.

avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=Edge.lst Edge.c -o Edge.o
avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=C:/azuro/ASURO_src/Edge/asuro.lst C:/azuro/ASURO_src/Edge/asuro.c -o C:/azuro/ASURO_src/Edge/asuro.o
C:/azuro/ASURO_src/Edge/asuro.c:184: warning: return type defaults to `int'
C:/azuro/ASURO_src/Edge/asuro.c:184: warning: function declaration isn't a prototype
C:/azuro/ASURO_src/Edge/asuro.c: In function `SIGNAL':
C:/azuro/ASURO_src/Edge/asuro.c:188: warning: control reaches end of non-void function
C:/azuro/ASURO_src/Edge/asuro.c: At top level:
C:/azuro/ASURO_src/Edge/asuro.c:195: warning: return type defaults to `int'
C:/azuro/ASURO_src/Edge/asuro.c:195: warning: function declaration isn't a prototype
C:/azuro/ASURO_src/Edge/asuro.c:195: error: redefinition of `SIGNAL'
C:/azuro/ASURO_src/Edge/asuro.c:184: error: `SIGNAL' previously defined here
C:/azuro/ASURO_src/Edge/asuro.c:212: warning: return type defaults to `int'
C:/azuro/ASURO_src/Edge/asuro.c:212: warning: function declaration isn't a prototype
C:/azuro/ASURO_src/Edge/asuro.c:212: error: redefinition of `SIGNAL'
C:/azuro/ASURO_src/Edge/asuro.c:195: error: `SIGNAL' previously defined here
make: *** [C:/azuro/ASURO_src/Edge/asuro.o] Error 1

> Process Exit Code: 2

************************************************** *************************************
************************************MAKEFILE AUSZUG **********************************
************************************************** *************************************
# Target file name (without extension).
TARGET = Edge

# Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s


# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c

# If there is more than one source file, append them above, or adjust and
# uncomment the following:
SRC += C:/azuro/ASURO_src/Edge/asuro.c

# You can also wrap lines by appending a backslash to the end of the line:
#SRC += baz.c \
#xyzzy.c

************************************************** *************************************
************************************Programm AUSZUG **********************************
************************************************** *************************************
#include "c:/azuro/ASURO_src/Edge/asuro.h"
#include "stdlib.h"
#include "string.h"


int main(void)
{
int data[2], array[5], i, j, speed, avg, pointer;

Init();

StatusLED(GREEN);
FrontLED(ON);
BackLED(OFF,OFF);
avg=0;
pointer=0;
speed=120;
for (i=0;i<20;i++) LineData(data); // make sure sensors are OK
// SerWrite("\n\r-- ASURO Calibration --\n\r",27);
for (i=0;i<5;i++){

************************************************** *************************************
********************* asuro.c Ver2.61 AUSZUG Line 178-217 *****************************
************************************************** *************************************

/*!
* \func SIG_OVERFLOW2
* \brief Interrupt Funktion: Timer2 Overflow
* uses timer2 (36kHz for IR communication)
*/
SIGNAL (SIG_OVERFLOW2)
{
TCNT2 += 0x25;
count36kHz ++;
if (!count36kHz) timebase ++;
}

/*!
* \func SIG_INTERRUPT1
* \brief Interrupt Funktion: INT1
*/
SIGNAL (SIG_INTERRUPT1)
{
switched=1;
StopSwitch();
}

/*!
* \func SIG_ADC
* \brief Interrupt Funktion: A/D Wandler
* last modification:
* Ver. Date Author Comments
* ------- ---------- -------------- ---------------------------------
* 2.61 20.11.2006 m.a.r.v.i.n static Variable toggle initialisiert
* auf False (Bug report von Rolf_Ebert)
*
*
*/
SIGNAL (SIG_ADC)
{
static unsigned char tmp[2],flag[2],toggle=FALSE;
if (autoencode){
tmp[toggle]= ADCH;
if (toggle) ADMUX = (1 <<ADLAR) | (1 <<REFS0) | WHEEL_RIGHT;
else ADMUX = (1 <<ADLAR) | (1 <<REFS0) | WHEEL_LEFT;

irobot_22587
01.01.2007, 01:25
Ich habe nach einiger Suche einen Unterschied in der "asuro.h" gefunden. In der alten Version befand sich der Befehl "#include <avr/signal.h>". Dieser include Befehl fehlte in der "asuro.h" Ver 2.61.

Mutig und experimentierfreudig hatte ich die Zeile in die Ver 2.61 asuro.h eingefuegt und voila - die Compiler Fehlercodes sind weg.

Erstes Problem gelöst!!!

Naechstes Problem gefunden:

Ein Test der Go() Funktion zeigt ein Problem mit dem Encoder counter. Der Encoder counter läuft nicht los. Ich kann keine Funktion finden, die den counter anstösst!!!

Anbei in der Code section ein Auszug aus der Original-Asuro.c Lib Ver 2.61 mit der Go() Function und drei Debug SerWrite Statements plus der Auszug aus dem Programm, dass die Go() Function aufruft.

Der Output im Hyperterminal zeigt immer nur den Wert 0 für encoder[LEFT] und encoder[RIGHT].

Hat jemand Rat?

/************************************************** *************************
* void Go(int distance, int speed = 150)
*
* input
* distance: postiv->go forward ; negativ-> go backward
* speed: sets motorspeed
*
* last modification:
* Ver. Date Author Comments
* ------- ---------- -------------- ---------------------------------
* sto1 29.07.2005 stochri motorfunction
* And1 31.07.2005 Andun added speed and Odometrie
* ------- ---------- -------------- ---------------------------------
*
************************************************** *************************/
void Go(int distance, int speed)
{
int enc_count = 0;
int tot_count = 0;
int diff = 0;
int l_speed = speed, r_speed = speed;
enc_count=abs(distance);

// enc_count=distance*10000;
// enc_count/=12823;

Encoder_Set(0,0); // reset encoder

MotorSpeed(l_speed,r_speed);
if(distance<0) MotorDir(RWD,RWD);
else MotorDir(FWD,FWD);

while(tot_count<enc_count) {
tot_count += encoder[LEFT];
diff = encoder[LEFT] - encoder[RIGHT];
SerWrite("\n\rEncoder Left | Right - ",25); //---> added Debug Statement
PrintInt(encoder[LEFT]); //---> added Debug Statement
SerWrite(" | ",3); //---> added Debug Statement
PrintInt(encoder[RIGHT]); //---> added Debug Statement
if (diff > 0) { //Left faster than right
if ((l_speed > speed) || (r_speed > 244)) l_speed -= 10;
else r_speed += 10;
}
if (diff < 0) { //Right faster than left
if ((r_speed > speed) || (l_speed > 244)) r_speed -= 10;
else l_speed += 10;
}
Encoder_Set(0,0); // reset encoder
MotorSpeed(l_speed,r_speed);
Msleep(1);
}
MotorDir(BREAK,BREAK);
Msleep(100);
}

************************************************** ************************************
* Programm Auszug
************************************************** ************************************
#include "c:/azuro/ASURO_src/Edge/asuro.h"
#include "stdlib.h"
#include "string.h"

int main(void)
{
int data[2], array[5], i, j, speed, avg, pointer;

Init();

StatusLED(GREEN);
FrontLED(ON);
BackLED(OFF,OFF);
avg=0;
pointer=0;
speed=120;
for (i=0;i<5;i++){
Go(20,speed);
LineData(data);
avg=avg+data[0]+data[1];
array[pointer]=data[0]+data[1];
pointer++;
Msleep(900);
Go(-20,speed);
Msleep(900);
}

damaltor
01.01.2007, 05:26
die Funktion zum starten des Encoders ist "Encoder_Init()".

bevor du eine der funktionen go uder turn nutzt, solltest du "Encoder_Set(0,0)" ausführen, um die werte zurückzusetzen.

inka
01.01.2007, 14:32
hi allerseits,
ich kenne die suchfunktion - um es vorwegzunehmen :-), versuche seit 2 stunden etwas über die möglichkeit die erweitere asuro.c runterzuladen zu finden - vergeblich, auch deshalb, weil man dabei so viele interessante themen findet...

Die auf der cd, die ich mit dem bausatz bekam ist ja version 2.10 vom okt.2003. Irgendetwas von RN habe ich gefunden, von waste, stochri und damaltor fand ich komentare dazu, aber keinen link :-(

gruß inka

m.a.r.v.i.n
01.01.2007, 14:36
Hi,

bei Verwendung der Asuro Lib V2.61 muß auch die aktuelle WinAVR (http://sourceforge.net/projects/winavr/) Version installiert sein.

Wenn man mit der alten WinAVR Version arbeiten will, fügt in die asuro.h wieder folgende Zeile ein.

#include <avr/signal.h>

ein. Diese Header-Datei ist bei der aktuellen WinAVR Version obsolete.

Die Asuro Lib befindet sich hier:
http://sourceforge.net/projects/asuro

irobot_22587
01.01.2007, 15:40
die Funktion zum starten des Encoders ist "Encoder_Init()".

bevor du eine der funktionen go oder turn nutzt, solltest du "Encoder_Set(0,0)" ausführen, um die werte zurückzusetzen.

Danke fuer die Hilfe bisher!

Neuste WinAVR Version mit der Lib 2.61 macht Sinn ebenso wie alternativ die von mir bereits vorgenommene Addition des #include <AVR/signal.h> Befehls in der asuro.h Datei.

Nun nochmal zu meinem Encoder Problem. Die Go() Funktion in der asuro.c Ver 2.61 verwendet sowohl die "Encoder_Init()" als auch die "Encoder_Set(0,0)". Trotzdem faengt bei mir der Encoder nicht an zu zaehlen (siehe Programm Auszuege in meinem gestrigen Post).

Allerdings habe ich immer noch die alten Win AVR mit der gefixten "asuro.c / asuro.h" Ver 2.61 am Laufen.

Frohes Neues Jahr!

damaltor
01.01.2007, 15:40
hi allerseits,
ich kenne die suchfunktion - um es vorwegzunehmen :-), versuche seit 2 stunden etwas über die möglichkeit die erweitere asuro.c runterzuladen zu finden - vergeblich, auch deshalb, weil man dabei so viele interessante themen findet...

Die auf der cd, die ich mit dem bausatz bekam ist ja version 2.10 vom okt.2003. Irgendetwas von RN habe ich gefunden, von waste, stochri und damaltor fand ich komentare dazu, aber keinen link :-(

gruß inka

hallo,

die version auf der cd ist von arexx. die sog. erweiterte lib ist von rn-usern entwickelt worden (bzw ist ein teil von der originalen lib übernommen worden, andere funktionen wurden angepasst und einige neue hinzugefügt).

die asuro lib 2.6.1 findest du hier:
http://sourceforge.net/project/showfiles.php?group_id=155217

runterladen, entpacken, und die asuro.c und die asuro.h in deinem programmierverzeichnis durch die neuen dateien ersetzen (sicherheitskopie ist nicht nötig, originaldateien sind ja auf der cd).

viel spaß =)