Verwirrung um #pragma in XC8

Ich programmiere gerade einen pic16f18323. Ich verwende MPLAB X. Und XC8 als Compiler. Ich möchte nur fragen, ob Pragma-Konfigurationen als angezeigt werden können ('110' ist die binäre Darstellung der 3-Bit-RSTOSC-Konfiguration im Oszillator-Konfigurationsregister. Seite 50 im Datenblatt 'PIC16 (L) F18313/18323'):

#pragma config RSTOSC = 0b110

anstatt

#pragma config RSTOSC = HFINT1

Ich habe versucht, den ersten Ausdruck anstelle des regulären (zweiten) zu verwenden. Es gab mir keinen Compilerfehler, aber es funktionierte auch nicht richtig. Wenn ich das Bild mit einem einfachen Blinkcode programmiere, funktioniert es mit der Konfiguration 'HFINT1' gut. Aber wenn ich die Binärzahl verwende, erhöht sich die Häufigkeit des Blinzelns stark.

Es lässt mich denken, dass es wahrscheinlich um die Syntax geht, aber ich bin mir immer noch nicht ganz sicher. Es wirkt sich nicht direkt auf meine Arbeit aus, ich bin zufällig auf dieses Problem gestoßen und wurde einfach neugierig. Wenn das jemand weiß, würde ich mich freuen.

Hallo! Danke für deine Kommentare. Sieht so aus, als liege ich falsch! Ich werde meine Antwort löschen, bevor sie Fehlinformationen verbreitet :)

Antworten (1)

#pragmaist eine Direktive, die Textinformationen an den Compiler sendet, der sie dann gemäß den Regeln des jeweiligen Pragmas interpretiert. Dieser Text ist kein C-Code und muss nicht mit diesem kompatibel sein.

Die relevanten Definitionen für HFINT1 (gefunden in der Datei '16f18323.cfgdata') sind:-

CWORD:8007:2977:FFFF:CONFIG1
CSETTING:70:RSTOSC:Power-up default value for COSC bits
CVALUE:60:HFINT1:HFINTOSC (1MHz) 

Dies teilt dem Konfigurations-Pragma mit, dass RSTOSC = HFINT1„Speicher an Adresse 0x8007 durch eine Maske von 0x70 auf 0x60 setzen“ bedeutet, wodurch 0b110 in die Bits 6-4 des Konfigurationsregisters 1 gesetzt wird.

Sie sollten nur die definierten Konfigurationsnamen verwenden . Das Ersetzen von C-Stye-Binärzahlen wird das Pragma nur verwirren.

Danke, ich denke, das ist eine passende Antwort. Für diejenigen, die neugierig sind, hat die binäre Syntax #pragma config RSTOSC = 110ohne '0b' am Anfang für mich funktioniert.
110 wird als Dezimalzahl interpretiert, entspricht binär 1101110. In diesem Fall sind die erforderlichen oberen 3 Bits korrekt, aber nur durch reines Glück. Hex-Zahlen (0x..) werden ebenfalls korrekt interpretiert, aber Sie sollten keine 'magischen' Zahlen in Ihren Code einfügen!
Oh, das war damals ein riesiger Zufall, jetzt habe ich es absolut verstanden.