Hallo Liebes Forum,
Ich hänge gerade an etwas sehr dummes.. Benutzt wird MPLAB X IDE 4.15
und der x16 Compiler mit einem dsPIC33.
Folgendes:
Ich möchte gerne __delay_ms(2); benutzen, habe dazu xc.h und auch die
libpic30.h included, aber trotzdem meckert er immer mit "undefined
reference to __delay_ms()"
Ich habe einige Threads dazu gefunden, jedoch keine mit einer Lösung die
bei mir funktioniert.
delays.h gibt es zbsp bei mir gar nicht. :(
Wer kann mir bei diesem eigentlich einfachen Problem helfen ?
Danke
Ich war dem auch mal auf der Spur. Habe gerade meinen Arbeitslaptop
nicht zur Hand, aber irgendwo in den .h war ein #ifdef welches die
Prototypen zu den delays hatte.
Man musste vorher noch FCY definieren, dann ging es. Hier einen
Ausschnitt eines Codes von mir (Aus einem Backup, ...):
quartett schrieb:> Ich möchte gerne __delay_ms(2); benutzen, habe dazu xc.h und auch die> libpic30.h included, aber trotzdem meckert er immer mit "undefined> reference to __delay_ms()"
Undefined reference ist eine Meldung des Linkers. Der Compiler hat den
Header und den Prototypen sehr wohl gefunden. Du musst dem Linker die
richtigen Optionen/Bibliotheken übergeben.
mr. mo schrieb:> Man musste vorher noch FCY definieren, dann ging es. Hier einen> Ausschnitt eines Codes von mir (Aus einem Backup, ...):
Oh WOW!! JETZT compiliert er ohne Fehlermeldung. Vielen dank.
Aber warum wird FOSC/4 ? Und was bedeutet bei dir ULL ? Ich habe einfach
#define FOSC (48000000)
#define (FOSC/4) geschrieben.
Nur warum steht das nirgends schön sauber erklärt ? Kann es sein dass
der dsPIC einfach ne komplett andere Welt hat als die Klassischen pics ?
Gruß
quartett schrieb:> Nur warum steht das nirgends schön sauber erklärt ? Kann es sein dass> der dsPIC einfach ne komplett andere Welt hat als die Klassischen pics ?
vielleicht lernst du zuerst mal LESEN im xc help und hier nicht immer
zuerst rumlabern!
"... klassischer pic" - was soll/darf es den sein?! pic10/12/16/18/24/33
da steht ...
void __delay_ms(unsigned int time);
Remarks:
This function is implemented as a macro.
Default Behavior:
This function relies on a user-supplied definition of
FCY to represent the instruction clock frequency. FCY must be defined
before header file, libpic30.h, is included. The specified delay is
converted to the equivalent number of instruction cycles and passed to
__delay32(). If FCY is not defined, then __delay_ms() is declared
external, causing the link to fail unless the user provides a function
with that name.
mt
Danke. Jedoch steht das bei mir NICHT drin.
In der xc.h stehen die ganzen if defined welcher controller included
wird. In der Datei gibt es bei mir kein __delay_ms(). Und in der
libpic30.h steht der Text den du mir gepostet hast NICHT drin, da steht
überhaupt kein Text! ;)
quartett schrieb:> Und in der> libpic30.h steht der Text den du mir gepostet hast NICHT drin, da steht> überhaupt kein Text! ;)
... das tut schon weh, seit wann stehen help info's im header file?!
schau mal unter mplabx im xc16 help oder ruf es sepparat auf.
mt
Apollo M. schrieb:> ... das tut schon weh, seit wann stehen help info's im header file?!
Schon lange. Jeweils über der betreffenden Funktion. Mit Tools wie
Doxygen kann man da dann eine Referenz draus machen. Bei den
Bibliotheken für die STM32 z.B. ist das so, aber in den Source statt
Header Files.
mr. mo schrieb:> #define FOSC (117964800ULL)> #define FCY (FOSC/4)
Wobei man beachten sollte, daß die PIC24 die Oszillatorfrequenz nur
durch 2 teilen und nicht durch 4, wie die PIC16. Das kann man aber
leicht testen, indem man mit __delay_ms() ein Rechteck ausgibt und mit
Scope oder LA misst.
Dr. Sommer schrieb:> Mit Tools wie> Doxygen kann man da dann eine Referenz draus machen.
Um das User Manual zu lesen, muß man Doxygen noch nicht mal kennen. Man
braucht aber einen PDF Reader.
MfG Klaus
Apollo M. schrieb:> quartett schrieb:>> Und in der>> libpic30.h steht der Text den du mir gepostet hast NICHT drin, da steht>> überhaupt kein Text! ;)>> ... das tut schon weh, seit wann stehen help info's im header file?!>> schau mal unter mplabx im xc16 help oder ruf es sepparat auf.>> mt
Naja habe halt einfach auf Ctrl Taste und auf die Funktion gedrückt um
an die entsprechende Stelle in der lib File zu kommen :) Aber danke,
dann weiß ich das jetzt auch!
Klaus schrieb:> mr. mo schrieb:>> #define FOSC (117964800ULL)>> #define FCY (FOSC/4)>> Wobei man beachten sollte, daß die PIC24 die Oszillatorfrequenz nur> durch 2 teilen und nicht durch 4, wie die PIC16. Das kann man aber> leicht testen, indem man mit __delay_ms() ein Rechteck ausgibt und mit> Scope oder LA misst.
Wo finde ich das raus? Dazu muss doch irgendwo was stehen was der
dsPIC33 kann ? Und kann ich nicht sofort für die instruction clock
frequency meine Taktfrequenz angeben ?
Gruß
quartett schrieb:> Wo finde ich das raus? Dazu muss doch irgendwo was stehen was der> dsPIC33 kann ? Und kann ich nicht sofort für die instruction clock> frequency meine Taktfrequenz angeben ?
Das ist doch jetzt nicht Dein Ernst, dass wir Dir hier das Lesen des
dsPIC33E/PIC24E Family Reference Manual nahelegen sollen, oder???
quartett schrieb:> Ok, laut dem Oscillator System Block Diagram, kann nur durch 2 geteilt> werden.
Steht auch explizit im Text. Überflieg das Manual mal wenigstens.
quartett schrieb:> Ok, laut dem Oscillator System Block Diagram, kann nur durch 2 geteilt> werden.
Das hat aber nichts damit zu tun, in welchem Verhältnis der Systemtakt
und der Befehlsstakt zueinander stehen. Beim klassischen 8051 sinds 12,
bei den AVR sinds IMHO 2, bei den PIC16 4 und bei den PIC24 2. Das ist
aber nicht wirklich geheim, das steht im Datenblatt. Für das
__delay_ms() braucht man den Befehlstakt.
MfG Klaus
Klaus schrieb:> quartett schrieb:>> Ok, laut dem Oscillator System Block Diagram, kann nur durch 2 geteilt>> werden.>> Das hat aber nichts damit zu tun, in welchem Verhältnis der Systemtakt> und der Befehlsstakt zueinander stehen. Beim klassischen 8051 sinds 12,> bei den AVR sinds IMHO 2, bei den PIC16 4 und bei den PIC24 2. Das ist> aber nicht wirklich geheim, das steht im Datenblatt. Für das> __delay_ms() braucht man den Befehlstakt.>> MfG Klaus
Aus http://ww1.microchip.com/downloads/en/DeviceDoc/70580C.pdf :
"The system clock source is divided by two to produce the internal
instruction cycle clock. In this document, the instruction cycle
clock is denoted by FCY."