PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eigene Lib für Erweiterung - Problem



RobotMichi
30.05.2010, 11:40
Hallo,

ich bin gerade dabei, für einen Kran mit 4 Motoren, die über zwei L293D Motortreiber angesteuert werden, eine eigene Library zu schreiben (auch wenns noch nicht so aussieht (siehe unten). Ich verwende die Control M32.

Ich konnte die Library zwar ohne Probleme im Makefile hinzufügen, sie wird auch compiliert, aber die Funktionen, die ich im Programm aus der Lib aufrufe, haben "implict declaration of funktion ...", wie es der Compiler formuliert. Es ist zwar kein Fehler, sondern nur eine Warnung, doch das Programm funktioniert nicht.

Library:

#include "RP6ControlLib.h"

//Funktions:

void initKran(void)
{
DDRD |= IO_PD5; // Motor_1 Enable

DDRC |= IO_PC2; // Motor_1 Eingang A
DDRC |= IO_PC3; // Motor_1 Eingang B

DDRC |= IO_PC4; // Motor_2 Enable
DDRC |= IO_PC7; // Motor_2 Eingang A
DDRC |= IO_PC5; // Motor_2 Eingang B

DDRA |= ADC3; // Motor_3 Enable
DDRA |= ADC4; // Motor_3 Eingang A
DDRA |= ADC5; // Motor_3 Eingang B

DDRA |= ADC2; // Motor_4 Enable
DDRA |= ADC7; // Motor_4 Eingang A
DDRA |= ADC6; // Motor_4 Eingang B
}

void setKranDirection(int motor, char direction)
{
switch(motor)
{
case 1:
if(direction == 'l')
{
PORTC |= IO_PC2;
PORTC &= ~IO_PC3;
}
else
{
PORTC |= IO_PC3;
PORTC &= ~IO_PC2;
}
break;

case 2:
if(direction == 'l')
{
PORTC |= IO_PC7;
PORTC &= ~IO_PC5;
}
else
{
PORTC |= IO_PC5;
PORTC &= ~IO_PC7;
}
break;

case 3:
if(direction == 'l')
{
PORTA |= ADC4;
PORTA &= ~ADC5;
}
else
{
PORTA |= ADC5;
PORTA &= ~ADC4;
}
break;

case 4:
if(direction == 'l')
{
PORTA |= ADC7;
PORTA &= ~ADC6;
}
else
{
PORTA |= ADC6;
PORTA &= ~ADC7;
}


}
}


Programm:

#include "RP6ControlLib.h"

int main(void)
{
initRP6Control();
initKran();

setKranDirection(1,'l');

while(1);

return 0;
}

Comilerausgabe:

> "E:\Daten\RP6\Programme\Eigene Programme\Kran\\make_all.bat"

E:\Daten\RP6\Programme\Eigene Programme\Kran>set LANG=C

E:\Daten\RP6\Programme\Eigene Programme\Kran>make all

-------- begin --------
avr-gcc (GCC) 4.1.2 (WinAVR 20070525)
Copyright (C) 2006 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.


Compiling: Kran.c
avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=Kran.lst -I../RP6lib -I../RP6lib/RP6control -I../RP6lib/RP6common -std=gnu99 -MD -MP -MF .dep/Kran.o.d Kran.c -o Kran.o
Kran.c: In function 'main':
Kran.c:6: warning: implicit declaration of function 'initKran'
Kran.c:8: warning: implicit declaration of function 'setKranDirection'
Kran.c:13:2: warning: no newline at end of file

Compiling: ../RP6lib/RP6control/RP6ControlLib.c
avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=../RP6lib/RP6control/RP6ControlLib.lst -I../RP6lib -I../RP6lib/RP6control -I../RP6lib/RP6common -std=gnu99 -MD -MP -MF .dep/RP6ControlLib.o.d ../RP6lib/RP6control/RP6ControlLib.c -o ../RP6lib/RP6control/RP6ControlLib.o

Compiling: ../RP6lib/RP6common/RP6uart.c
avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=../RP6lib/RP6common/RP6uart.lst -I../RP6lib -I../RP6lib/RP6control -I../RP6lib/RP6common -std=gnu99 -MD -MP -MF .dep/RP6uart.o.d ../RP6lib/RP6common/RP6uart.c -o ../RP6lib/RP6common/RP6uart.o

Compiling: ../RP6lib/Kran/Library.c
avr-gcc -c -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=../RP6lib/Kran/Library.lst -I../RP6lib -I../RP6lib/RP6control -I../RP6lib/RP6common -std=gnu99 -MD -MP -MF .dep/Library.o.d ../RP6lib/Kran/Library.c -o ../RP6lib/Kran/Library.o

Linking: Kran.elf
avr-gcc -mmcu=atmega32 -I. -gdwarf-2 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=Kran.o -I../RP6lib -I../RP6lib/RP6control -I../RP6lib/RP6common -std=gnu99 -MD -MP -MF .dep/Kran.elf.d Kran.o ../RP6lib/RP6control/RP6ControlLib.o ../RP6lib/RP6common/RP6uart.o ../RP6lib/Kran/Library.o --output Kran.elf -Wl,-Map=Kran.map,--cref -lm

Creating load file for Flash: Kran.hex
avr-objcopy -O ihex -R .eeprom Kran.elf Kran.hex

Creating Extended Listing: Kran.lss
avr-objdump -h -S Kran.elf > Kran.lss

Creating Symbol Table: Kran.sym
avr-nm -n Kran.elf > Kran.sym

Size after:
AVR Memory Usage
----------------
Device: atmega32

Program: 3244 bytes (9.9% Full)
(.text + .data + .bootloader)

Data: 90 bytes (4.4% Full)
(.data + .bss + .noinit)



-------- end --------


> Process Exit Code: 0
> Time Taken: 00:02


Ich hoffe, ihr könnt mir helfen!

lg
Michi

Dirk
30.05.2010, 15:42
@Michi,

Im Programm müßtest du die Kran-Lib includen und nicht die RP6ControlLib (die wird ja schon in der Kran-Lib eingebunden)!

Gruß Dirk

RobotMichi
30.05.2010, 17:26
Hallo,

danke, ich habe meine eigene Library.c im makefile zu den vorhandenen *.c-Files hinzugefügt - das müsste doch auch klappen, oder. Aber du hast recht, die RP6ControlLib muss nicht doppelt eingebunden werden.

lg
Michi