Hallo zusammen,
ich bin auf der Suche nach den #defines für das Configuration Word meines PIC12F617
in meiner Software steht:
#include "htc.h"
__CONFIG (FOSC_INTOSCIO & WDTE_ON & PWRTE_ON & MCLRE_OFF & CP_OFF & IOSCFS_4MHZ & BOREN_ON & WRT_HALF);
Wo finde ich denn diese Konstanten ????
htc includiert PIC.H
PIC.H includiert pic_chip_select.h
pic_chip_select.h includiert pic12f617.h
aber nirgends in diesen Datein sind die Konstanten für das Konfiguration Wort zu finden.
Ich hab mir die aus der Datei P121F617.INC zusammengebastelt. Dort stehen sie mit einem vorangestellten Unterstrich.
Dies Datei wird aber anscheinend nicht benutzt. Irgendwo müssen die doch deklariert sein, damit der Compiler sie kennt.
ich Danke euch schonmal im voraus für Infos.
Siro
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Ich weiß jetzt nicht, welchen Compiler du benutzt.
Ich verwende nur die PIC24 mit den Tools von Microchip. Die #defines für die Config-Bits sind in den jeweiligen p24xxx.h. Da findet sich dann sogar noch eine kleine Doku dazu. Beispiel:
Das wird für die kleineren so ähnlich sein, kann das aber nicht nachvollziehen, da ich nichts für die 8-Bitter installiert habe.Code:/* -------------------------------------------------------- */ /* Macros for setting device configuration registers */ /* -------------------------------------------------------- */ /* Register FBS (0xf80000) */ extern __attribute__((space(prog))) int _FBS; #define _FBS(x) __attribute__((section("__FBS.sec"),space(prog))) int _FBS = (x); /* ** Only one invocation of FBS should appear in a project, ** at the top of a C source file (outside of any function). ** ** The following constants can be used to set FBS. ** Multiple options may be combined, as shown: ** ** _FBS( OPT1_ON & OPT2_OFF & OPT3_PLL ) ** ** Boot Segment Write Protect: ** BWRP_ON Enabled ** BWRP_OFF Disabled ** ** Boot segment Protect: ** BSS_HI5K High Security Boot Protect 000200h - 002BFEh ** BSS_HI2K High Security Boot Protect 000200h - 0015FEh ** BSS_HI1K High Security Boot Protect 000200h - 000AFEh ** BSS_STD5K Standard Security Boot Protect 000200h - 002BFEh ** BSS_STD2K Standard Security Boot Protect 000200h - 0015FEh ** BSS_STD1K Standard Security Boot Protect 000200h - 000AFEh ** BSS_OFF No boot program flash segment ** */ #define BWRP_ON 0xFFFE #define BWRP_OFF 0xFFFF #define BSS_HI5K 0xFFF1 #define BSS_HI2K 0xFFF3 #define BSS_HI1K 0xFFF5 #define BSS_STD5K 0xFFF9 #define BSS_STD2K 0xFFFB #define BSS_STD1K 0xFFFD #define BSS_OFF 0xFFFF
Wo kommt denn das #define für "__CONFIG" her? Dort in der Nähe wäre ein guter Platz.
Die *.inc sind Include Files für Assembler.
MfG Klebwax
Strom fließt auch durch krumme Drähte !
Ich danke euch erstmal für die Infos.
So wie Ihr das beschreibt kenne ich das auch von früher. Da sind die Werte bzw. Namen in der entsprechenden Datei z.B. p24xxx.h declariert,
Diese Datei muss logischerweise irgendwo, sinnvollerweise am Anfang des Programms mit #include in das Projekt mit eingebunden werden.
Das hab ich ja auch schon tausend mal gemacht. In der Datei P12F617.INC ist das ja auch so.
Aber ich vergaß zu erwähnen, dass ich das erste Mal den XC8-Compiler verwende und dadurch hat sich anscheinend ALLES geändert.
Also nochmal kurz der Übersicht wegen:
Woher kennt der C-Compiler in meiner __CONFIG Zeile WDTE_ON ?
Die stehen bei mir NICHT in der Datei PIC12F617.H
auch nicht in den vielen abhängigen include Dateien, die da wären
XC.H
HTC.H
PIC.H
pic_chip_select.h
pic12f617_legacy.h
PIC12F617.H
Das ist aber auch ein Chaos.....
Ich kanns einfach nicht finden....
@Klebwax:
__CONFIG ist in der Datei PIC.H so declariert.
#define __CONFIG(x) \
__config(___mkstr(__CONFIG), ___mkstr(pic), ___mkstr(x))
Mann o Mann, wer soll das noch verstehen, da muss man erstmal mit dem Cursor zählen wieviele Unterstriche das sind.
Es sind 2 bis 3 Unterstriche. Hilft mir aber nicht weiter meine Konstanten zu finden.
Strom fließt auch durch krumme Drähte !
Schade, ich arbeite aber nicht mit MPLAB-X nach Stundenlanger Probiererei und erklärlichen Fehlern und Menüs bin ich zurück zum MPLAB, das funktioniert wenigstens.
Ich habs dann aber trotzdem nochmal probiert mit MPLABX und der Tastenkombination, hat aber leider nicht funktioniert. Gesucht hat das Programmm aber anscheinend.
unable to resolve identifier.
Aber unter MPLABX bekomme ich überhaupt kein Compilat zu Stande.
Na was solls, das heisst also wieder zurück zum Assembler . Ich stehe eh auf Kriegsfuss mit "C"
Danke Euch für die Benühungen.
Siro
Das kann ich nun garnicht nachvollziehen. Ich hab früher die PIC16xx in C (nicht MPLAB) programmiert. Als dann MPLAB als MPLABX auch für Linux zu bekommen war, hab ich das gleich ausprobiert. Zusammen mit dem PICkit 3 läuft das prima. Ich habe das auf mehreren Rechner installiert, die Downloadzeit ist länger als die Zeit bis zum ersten toggeln eines Portpins.
Die meisten Features nutze ich noch garnicht, weil mir die Erfahrungen mit einer modernen IDE fehlen. An manches muß man sich auch gewöhnen z.B. wenn einem schon der Editor sagt, daß man gerade einen Fehler hingeschrieben hat, daß es eine Variable oder Funktion mit diesem Namen garnicht gibt. Aber dieses Ctrl-B (goto declaration) ist schon sehr hilfreich, wie du gerade siehst.
Auf die Debugfeatures möchte ich aber auf keinen fall verzichten. Breakpoints (die PIC24 haben da mehr als die PIC16), Single Step etc. Und mit der Maus über eine Variable gehen und den Wert sehen, oder sich ganze Strukturen anzeigen lassen. So als ob man auf dem PC und nicht auf der Zielhardware arbeitet.
Ich habe, wenn ich mich recht erinnere, auf einem anderen Rechner den XC8 mit installiert. Ich schau da mal nach ob ich da was finde.
MfG Klebwax
Strom fließt auch durch krumme Drähte !
Na ich weis nicht, mit dem MPLABX bin ich anscheinend überfordert.
Alleine der USB-Switcher, was soll das denn. Ich hab das dauernd umstellen müssen,
Dann hatte ich den PM3 Programmer dran, da kam erstmal ein Warnhinweis, dass dieser zerstört werden könnte.
Ich hab dann den ICD-3 angeschlossen. Irgendwie wollte das alles nicht vernünftig laufen.
Die MPLABX will ich auch nicht schlecht machen, da gibt es wirklich sehr viele Vorteile, wie Du schon sagtest. Aber meiner Meinung nach noch nicht ausgereift.
Und ich würde deinen PIC24 nun auch nicht NUR in Assembler programmieren wollen, obwohl ich das schon gemacht habe und dabei einen Core-Fehler entdeckte, der in "C" nie aufgetaucht wäre.
Siehe
https://www.roboternetz.de/community...post-increment
Ich werde früher oder später sicher nochmal mit der MPLAB-X probieren, aber im Moment bleibt ich noch beim altbewährten.
Mit den nicht gefundenen Konstanten oder den total verschachtelten includes bei "C" ist ja kein Weltuntergang,
braucht man sich normalerweise nicht drum zu kümmern, aber wenn ich das nicht mehr nachvollziehn kann, nervt mich das schon. Weil es funktioniert ja, aber ich weis nicht warum.....
Siro
So, ich hab mal auf dem anderen Rechner nachgeschaut. Der XC8 war früher der HighTech Compiler, ist wohl von Microchip gekauft worden.
In ../xc8/v1.xx/docs gibt es ein manual.pdf. Da ist der Compiler beschrieben. Im Kapitel 5.3.5 werden die Configuration-Bits behandelt. Die Beschreibung der Device-spezifischen Configbits findest du in .../docs/chips/name_deines_chips.html.
Hab mir ein MPLABX Projekt mit dem Prozessor PIC12F617 angelegt und einen File mit main() erzeugen lassen, die Bits nach Manual gesetzt, ging sofort. Das Ctrl-B "Go to declaration" geht natürlich bei einem #pragma nicht.
MfG Klebwax
Strom fließt auch durch krumme Drähte !
Hallo Klebwax, ich hab mir das auch nochmal angeschaut:
Und habe fast identisches gefunden.
Ich habe jetzt eine andere Vorgehensweise probiert.
#pragma config Usage
#pragma config <setting>=<named value>
Hier gibt es zumindest eine recht gute Beschreibung
Dazu sollte man sich die Dateien im Ordner:
C:/Programme/Microchip/xc8/v1.10/docs/chips/12f617.html
ansehen.
Nun sieht meine Konfiguration so aus:
zudem verweise ich mal auf das XC8 User ManualCode:#pragma config BOREN = ON /* Brown-out Reset Selection bits */ #pragma config WRT = HALF /* Flash Program Memory Self Write Enable bits */ #pragma config FOSC = INTOSCIO /* Oscillator Selection bits */ #pragma config MCLRE = OFF /* MCLR Pin Function Select bit */ #pragma config WDTE = ON /* Watchdog Timer Enable bit */ #pragma config IOSCFS = 4MHZ /* Internal Oscillator Frequency Select */ #pragma config CP = OFF /* Code Protection bit */ #pragma config PWRTE = ON /* Power-up Timer Enable bit */
DS52053A-page 73
3.3.5 Configuratio Bit Access
Jetzt weis ich zwar immer noch nicht woher der Compiler dann seine Werte nimmt, aber was solls.
Ich arbeite erstmal so damit. Das sieht auch viel übersichtlicher aus mit der der pragma direktive.
Jetzt weis ich auch warum ich kein Projekt compiliert bekomme unter unter MPLABX
"C:\Programme\Microchip\xc8\v1.01\bin\xc8.exe" --pass1 --chip=12F675 -Q -G --asmlist --double=24 --float=24 --emi=wordwrite --opt=default,+asm,-asmfile,+speed,-space,-debug,9 --addrqual=ignore --mode=free -P -N255 --warn=0 --summary=default,-psect,-class,+mem,-hex,-file --runtime=default,+clear,+init,+keep,-no_startup,+osccal,-resetbits,-download,-stackcall,+config,-clib,+plib "--errformat=%%f:%%l: error: %%s" "--warnformat=%%f:%%l: warning: %%s" "--msgformat=%%f:%%l: advisory: %%s" -obuild/Production/production/newmain.p1 newmain.c
Das System kann den angegebenen Pfad nicht finden.
Wundert mich jetzt nichtmerh, weil das Verzeichnis heisst ja auch:
C:\Programme\Microchip\xc8\v1.10\bin\xc8.exe
und das habe ich bei den Tools auch richtig eingestellt.
Keine Ahnung warum er den Compiler im falschen Verzeichnis sucht.
Dank Dir auch nochmal für die Mühe.
Siro
Geändert von Siro (01.11.2012 um 15:40 Uhr)
Lesezeichen