PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Configuration Word Konstanten



Siro
30.10.2012, 21:33
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

PICture
30.10.2012, 22:33
Hallo!


Ich hab mir die aus der Datei P121F617.INC zusammengebastelt. Dort stehen sie mit einem vorangestellten Unterstrich. Dies Datei wird aber anscheinend nicht benutzt.

Das hast du richtig gemacht. Die Datei wird sicher nicht benutzt, weil woher soll der Compiler wissen, wie man den PIC konfigurieren will ? :D


Irgendwo müssen die doch deklariert sein, damit der Compiler sie kennt.

Sie müssen leider am Anfang jedes Programms vom Programmierer deklariert werden. ;)

Klebwax
31.10.2012, 02:30
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:


/* -------------------------------------------------------- */
/* 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

Das wird für die kleineren so ähnlich sein, kann das aber nicht nachvollziehen, da ich nichts für die 8-Bitter installiert habe.

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

Siro
31.10.2012, 10:27
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.;)

Klebwax
31.10.2012, 11:30
Aber ich vergaß zu erwähnen, dass ich das erste Mal den XC8-Compiler verwende und dadurch hat sich anscheinend ALLES geändert.

Da du XC8 erwähnst, benutzt du sicher auch MPLABX. Ich kenne da auch nicht alle Funktionen, aber probier mal folgendes: positionier den Cursor auf dein WDTE_ON und drücke Ctrl-B. Wenn der Compiler das WDTE_ON kennt, sollte er zur Deklaration springen.

MfG Klebwax

Siro
31.10.2012, 16:34
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 :p . Ich stehe eh auf Kriegsfuss mit "C"
Danke Euch für die Benühungen.
Siro

Klebwax
31.10.2012, 17:12
Aber unter MPLABX bekomme ich überhaupt kein Compilat zu Stande. :(
Na was solls, das heisst also wieder zurück zum Assembler :p . Ich stehe eh auf Kriegsfuss mit "C"

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

Siro
31.10.2012, 23:32
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/threads/31661-PIC24H-Repeat-Problem-bei-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

Klebwax
01.11.2012, 10:47
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

Siro
01.11.2012, 13:59
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:


#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 */

zudem verweise ich mal auf das XC8 User Manual
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

Klebwax
01.11.2012, 19:50
Dank Dir auch nochmal für die Mühe.

Keine Ursache!

Es beruhigt mich aber ungemein, daß die Doku auf deinem Recher die gleiche ist, wie die auf meinem. Und es ist auch schön zu wissen, daß es funktioniert, wenn man die Doku ernst nimt.

MfG Klebwax

P.S. v1.10 vs. v1.01 sieht aus, als ob mal eine ältere Version installiert wurde. Ich habe vom 16 Bit Compiler mehrere Versionen installiert und kann die bei jedem neuen Projekt auswählen.