PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : NIBOBee - Funktionen deklarieren



pinsel120866
10.01.2010, 11:38
Hallo,

wie kann ich TRUE und FALSE richtig deklarieren?

Folgender Code:

#include <nibobee/iodefs.h>
#include <nibobee/delay.h>
#include <nibobee/analog.h>
#include <nibobee/led.h>
#include <stdlib.h>


uint8_t objekt_sichtbar_rechts(uint8_t distance_r)
{
uint16_t j,z;

PORTA |= (1 << PA0); // PA0 auf HIGH (LED ausschalten)
DDRA |= (1 << DDA1); // PA1 als Ausgang
PORTA &= ~(1 << PA1); // PA1 auf LOW

OCR2 = 254-distance_r; // wenn OCR2=0xFE dann Objekt sehr nahe
z=0;
for(j=0;j<30;j++) // loop time: 5ms
{
if (PINA & (1 << PA2))z++;
Msleep(6); // 6*Sleep(6)=1ms
}
if (z>=29) return FALSE; // Objekt nicht gefunden
else return TRUE;
}

uint8_t objekt_sichtbar_links(uint8_t distance_l)
{
uint16_t i,y;

PORTA |= (1 << PA1); // PA1 auf HIGH (LED ausschalten)
DDRA |= (1 << DDA0); // PA0 als Ausgang
PORTA &= ~(1 << PA0); // PA0 auf LOW

OCR2 = 254-distance_l; // wenn OCR2=0xFE dann Objekt sehr nahe
y=0;
for(i=0;i<30;i++) // loop time: 5ms
{
if (PINA & (1 << PA2))y++;
Msleep(6); // 6*Sleep(6)=1ms
}
if (y>=29) return FALSE; // Objekt nicht gefunden
else return TRUE;
}



uint8_t abstand_rechts()
{
uint8_t k,n;

k=255;
for(n=0;n<8;n++)
{
if (!objekt_sichtbar_rechts(n)) k=n; // solange kein Objekt, Distanz erhoehen
}
return k;
}

uint8_t abstand_links()
{
uint8_t l,m;

l=255;
for(m=0;m<8;m++)
{
if (!objekt_sichtbar_links(m)) l=m; // solange kein Objekt, Distanz erhoehen
}
return l;
}



/************************************************** ***********************

Hauptprogramm

************************************************** ***********************/
int main(void)
{
led_init();
uint8_t n,m;

while(1)
{
n=abstand_rechts();
m=abstand_links();

if ((n!=255) && (m!=255))
{
if (n<2) led_set(LED_R_RD, 1);
if (m<2) led_set(LED_L_RD, 1);


Msleep(10);
}
}

}


Bringt diese Fehler:

Build started 10.1.2010 at 11:30:35
avr-gcc -I"C:\Users\HP\Documents\NibobeeTest\..\..\..\..\Prog ram Files\NIBObeeLib\include" -mmcu=atmega16 -Wall -gdwarf-2 -std=gnu99 -D_NIBOBEE_ -DF_CPU=15000000UL -Os -fsigned-char -MD -MP -MT NibobeeTest.o -MF dep/NibobeeTest.o.d -c ../Nib
obeeTest.c

../NibobeeTest.c: In function 'objekt_sichtbar_rechts':
../NibobeeTest.c:21: warning: implicit declaration of function 'Msleep'
../NibobeeTest.c:23: error: 'FALSE' undeclared (first use in this function)
../NibobeeTest.c:23: error: (Each undeclared identifier is reported only once
../NibobeeTest.c:23: error: for each function it appears in.)
../NibobeeTest.c:24: error: 'TRUE' undeclared (first use in this function)
../NibobeeTest.c: In function 'objekt_sichtbar_links':
../NibobeeTest.c:42: error: 'FALSE' undeclared (first use in this function)
../NibobeeTest.c:43: error: 'TRUE' undeclared (first use in this function)
make: *** [NibobeeTest.o] Error 1
Build failed with 6 errors and 1 warnings...

erik_wolfram
10.01.2010, 11:42
#define TRUE 1
#define FALSE 0


muss zu Anfang deklariert werden (also einfügen).
Dann sollte es klappen, schließlich kann man TRUE / FALSE ja mit 1 / 0 ersetzten.

pinsel120866
10.01.2010, 12:11
Danke, hat geklappt, jetzt kriege ich eine andere Fehlermeldung:

Build started 10.1.2010 at 12:07:03
avr-gcc -I"C:\Users\HP\Documents\NibobeeTest\..\..\..\..\Prog ram Files\NIBObeeLib\include" -mmcu=atmega16 -Wall -gdwarf-2 -std=gnu99 -D_NIBOBEE_ -DF_CPU=15000000UL -Os -fsigned-char -MD -MP -MT NibobeeTest.o -MF dep/NibobeeTest.o.d -c ../Nib
obeeTest.c

../NibobeeTest.c: In function 'objekt_sichtbar_rechts':
../NibobeeTest.c:23: warning: implicit declaration of function 'Msleep'
avr-gcc -mmcu=atmega16 NibobeeTest.o -L"C:\Program Files\NIBObeeLib\lib" -lnibobee_line -lnibobee_utils -lnibobee_base -lnibobee_usart -lnibobee_i2c -o NibobeeTest.elf
NibobeeTest.o: In function `objekt_sichtbar_links':
C:\Users\HP\Documents\NibobeeTest\default/../NibobeeTest.c:42: undefined reference to `Msleep'
NibobeeTest.o: In function `objekt_sichtbar_rechts':
C:\Users\HP\Documents\NibobeeTest\default/../NibobeeTest.c:23: undefined reference to `Msleep'
NibobeeTest.o: In function `main':
C:\Users\HP\Documents\NibobeeTest\default/../NibobeeTest.c:97: undefined reference to `Msleep'
make: *** [NibobeeTest.elf] Error 1
Build failed with 3 errors and 1 warnings...

Bitte nochmals um Hilfe.

radbruch
10.01.2010, 12:32
Hallo

Da man nicht weiß, wie der Kompiler true und false intern speichert, ist das besser:

false = (1==0)
true = !false

Alles andere ist kritisch:
http://www.rn-wissen.de/index.php/Fallstricke_bei_der_C-Programmierung#TRUE_ist_nicht_1

Gruß

mic

pinsel120866
10.01.2010, 12:42
Danke Radbruch,

ich musse es so einfügen:

false = (1==0);
true = (0==1);

Nun wird msleep nicht verstanden, sh. weiter oben.

radbruch
10.01.2010, 13:24
true = (0==1);

????

Die bee kennt kein Msleep(), Verzögerungen in Millisekundenschritten macht sie mit delay() aus delay.c

pinsel120866
10.01.2010, 15:49
OK, danke der Code wurde nun übersetzt.

Wie du dem Code oben entnehmen kannst, habe ich 2 IR-LEDs an X1 angeschlossen. Wenn ich nun die Ports auf LOW ziehe, leuchten sie nicht.

Warum ist das so? Darf ich PA0 - PA3 nicht verwenden?