Hallo Leute!
Ich habe ein (für mich) irgendwie unlösbares Problem: Eigentlich will ich ein funktionierendes C-Programm, in dem einige Funktionen stehen, drastisch "kürzen", indem ich die Funktionen in eine andere C-Datei auslagere und dann in das Hauptproramm einbinde. Jedoch klappt das bei mir irgenwie nicht: Ich habe das nach folgendem Schema gemacht:
Code:
// Main.c
#include <REGAN21.H> /* Register des AN21xx */
#include <EZREGS.H> /* Externe Register des AN21xx */
#include "onewireHEAD.h"
...
Code:
// onewireHEAD.h
#ifndef onewire_H
#define onewire_H
extern xdata unsigned char scratchpad[9] _at_ 0x0122; // 0x0122 bis 0x012A
extern xdata unsigned char temperature[2] _at_ 0x012B; // 0x012B und 0x012C
...
extern unsigned char CalcCRC(unsigned char bytes[], unsigned char groesse);
extern void ReadTemp(unsigned char RomCode[8]);
#endif
Code:
// onewire.c
#include <REGAN21.H> /* Register des AN21xx */
#include <EZREGS.H> /* Externe Register des AN21xx */
#include "onewireHEAD.h"
int myfunc(void){
return 0xAA;
}
unsigned char CalcCRC(unsigned char bytes[], unsigned char groesse){
...
return crc;
}
void ReadTemp(unsigned char RomCode[8]){
...
}
Soweit so gut, aber jetzt kommt beim Linken bei allen Variablen, die in den Include-Dateien <REGAN21.H> und <EZREGS.H> enthalten sind, die Fehlermeldung "MULTIPLE PUBLIC DEFINITIONS"
Das Problem sehe ich darin, dass ich die darin enthaltenen Variablen sowohl in main.c, als auch in onewire.c brauche (sonst kommt die Meldung "undefined identifier"). Hat dafür jemand eine Lösung? :confused:
Damit es keine Missverständnisse gibt,
hier hab ich diese Frage auch gepostet (es hat aber leider noch keiner geantwortet...).
Viele Grüße,
Stefan