Forum: Mikrocontroller und Digitale Elektronik PIC Funktionen auslagern (C)


von Martin M. (ats3788)


Lesenswert?

http://www.mikrocontroller.net/articles/Funktionen_auslagern_(C)

Hallo

Ich bekomme das nicht hin. Hat jemand vielleicht
jemand ein kleines fertiges Projekt das er anhängen könnte.
Ich bin Delphiander und das Konzept von "C" tut mir weh.

von Karl H. (kbuchegg)


Lesenswert?

Welchen Teil, konkret, kriegst du nicht hin?

Das Grund-Prinzip ist eigentlich ganz einfach:
jedes C-File wird für sich alleine compiliert. Was in anderen C-Files 
steht interessiert den Compiler dabei nicht. Es gilt nur dieses eine 
C-File, das gerade compiliert wird - dieses muss daher in sich 
vollständig sein.
C kennt in seiner Urform keinen 'Projektgedanken'. Das du trotzdem mit 
Projekten hantieren kannst, verdankst du deiner IDE (dem Editor). Das 
ist aber dem Compiler ziemlich wurscht. Der schnappt sich einfach nur 
wie befohlen ein C-File und compiliert es.
Die auf die Art entstandenen compilierten Einzelteile, werden vom Linker 
zum kompletten Programm zusammengesetzt.

Daraus folgt alles andere.

: Bearbeitet durch User
von Studentle (Gast)


Lesenswert?

Meinst du mit C-Files auslagern sowas:

main.c
1
#include "timer.h"
2
3
void main(void)
4
{
5
  timer_init();
6
7
}


timer.h
1
void timer_init (void);


timer.c
1
#include "timer.h"
2
3
void timer_init (void)
4
{
5
  // init
6
}

von Martin M. (ats3788)


Lesenswert?

Also ich versuche

*Signal
*Conditioning &
*Measurement
*ADC PIC18 A/D Converter Demonstration for the 18CXXX 04/01/2003

das für xc8 umzuschreiben.
Habe eben den C Compiler für 18 Pics installiert
und siehe  da keine Probleme beim Kompilierenen.
also die Funktionen stimmen.

Jetzt wieder beim XC8 habe ich das Problem das das Headerfile nicht 
erkannt wird.
*openxlcd.c:1: error: can't open include file "xlcd.h": No such file or 
*directory

habe auf groß/klein Schreibung geachtet.
Mache schon 2 Tage an dem "Schimpfwort" Projekt rum.

Was Lustig war habe nur einen funktionierenden Teil kompiliert und
der Debugger debuggt irgendwas im Nirwana und das macht er aber richtig.
Ich habe alle Files im gleichen Verzeichnis. Gehe jetzt erst mal Wein 
trinken mit Freunden. Danke für eure Hilfe

von Karl H. (kbuchegg)


Lesenswert?

Martin Michael schrieb:

> Jetzt wieder beim XC8 habe ich das Problem das das Headerfile nicht
> erkannt wird.
> *openxlcd.c:1: error: can't open include file "xlcd.h": No such file or
> *directory

Na ja.
Das ist aber jetzt wieder was ganz anderes.
Wenn es dieses Header File nicht gibt, dann gibt es das auch nicht.

Wie ist die Schreibweise im Code?
Es macht einen Unterschied, ob man
1
#include <xlcd.h>
schreibt, oder ob man
1
#include "xlcd.h"
schreibt.

Ersteres ist ein Include von den vordefinierten Systemdirectories. 
Letzters ein Include vom Projektpfad.

Wobei man die Systemdirectories in einer normalen IDE auch in irgend 
einem Dialog konfigurieren kann.


> habe auf groß/klein Schreibung geachtet.
> Mache schon 2 Tage an dem "Schimpfwort" Projekt rum.

Schau halt mal auf dem System nach, ob du ein derartiges Header File 
hast.
Vielleicht ist es ja auch wirklich nicht auf dem Projektverzeichnis, 
sondern auf einem Subverzeichnis davon.

von Klaus (Gast)


Lesenswert?

Martin Michael schrieb:
> Jetzt wieder beim XC8 habe ich das Problem das das Headerfile nicht
> erkannt wird.
> *openxlcd.c:1: error: can't open include file "xlcd.h": No such file or
> *directory

Na das läßt sich MPLABX beliebig leicht vermeiden:

#include "

tippen und die Datei auswählen. Geht ebenso mit #include <

MfG Klaus

von Chris B. (dekatz)


Lesenswert?

XLCD ist einer Lib.
MIT
#include <xc.h>
#include <plib.h>
werden auch die entsprechenden Headerdateien nachgeladen.

Wenn du alles "händisch" machen willst:
Deine xlcd.h befindet sich in \microchip\xc8\v1.21\include\plib\xlcd.h

von Martin M. (ats3788)


Lesenswert?

Also das Problem war nicht wie ich dache ein Funktionsproblem sondern
einmal war

*Im "Header" void putsXLCD(const char *buffer)*
*im "C" File void putsXLCD(char *buffer)*

warum das const weg war, ischh weiß es nicht,

zum zweiten im C18 war bis auf das Main File nix anderes drinnen,
Projects-Source Files
bei XC8 musste ich alle files da einfügen und dann hatte ich keine 
Probleme mehr. Warum, vielleicht weiß das jemand von euch.

: Bearbeitet durch User
von Carsten (Gast)


Lesenswert?

Hi,

Martin Michael schrieb:
> *Im "Header" void putsXLCD(const char *buffer)*
> *im "C" File void putsXLCD(char *buffer)*
> warum das const weg war, ischh weiß es nicht,

Das hängt vermutlich damit zusammen das dein Codebeispiel von 2003 ist. 
Wenn ich nicht gerade im Wald stehe gab es den Microchip eigenen C18 
Compiler da noch nicht, vom XC8 ganz zu schweigen ;-)
Mit den Neueinführungen der jeweiligen Compiler wurden dann sicher auch 
die Libs. zum Compiler aktualisiert -Manchmal aber auch 
verschlimmbessert. (Zumindest beim C18 ist die XLCD bestandteil des 
Compilerpaketes)

> zum zweiten im C18 war bis auf das Main File nix anderes drinnen,
> Projects-Source Files
> bei XC8 musste ich alle files da einfügen und dann hatte ich keine
> Probleme mehr. Warum, vielleicht weiß das jemand von euch.

Also:
> Projects-Source Files
  ^^^ Genau da gehören die Quellfiles normalerweise tatsächlich auch 
eingefügt. Wenn man die Pfade zu diesen Files allerdings an anderer 
Stelle passend einfügt (generelle Suchpfade in den Compilereinstellungen 
(< >!)oder expliter Pfad beim Include ( " "! ) macht der Compiler das 
aber auch ohne den expliziten Eintrag unter Source Files ohne Mucken. 
Vermutlich war der Pfad bei deiner C18 Installation einmal definiert und 
bei deinem XC8 jetzt nicht mehr.
Ob es aber an dir oder den generellen Voreinstellungen liegt kann ich 
aber auch nur vermuten.

Gruß
Carsten

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.