Forum: Mikrocontroller und Digitale Elektronik slit10: constant out of range


von Christopher (Gast)


Lesenswert?

Hallo liebe Forenmitglieder.

Ich bin relativ neu im Bereich der uC Programmierung und habe seit 
einigen Tagen eine lästige Fehlermeldung beim compilieren meines Codes.

System:
uC PIC24FJ256GA108
Programmierumgebung: MPLAB Microchips v8.46
Compilier: Hi-Tech C compilier

Nun zu meinem Problem:

Ich habe einen compilier fähigen Code der schon eine bestimmte Anzahl 
von float/double Variablen enthält. Definiere ich nun eine neue 
float/double Variable (sosHP) wird folgender Fehler ausgeworfen:
1
X:\'projectname'\mess.c: 835: (1172) slit10 constant out of range

(zwischen der Zeilenangabe 835 und der Definition der neuen Variable 
gibt es keine Verbindung)

Die neu definierte Variable wird noch nicht im Code verwendet. 
Komentiere ich nun eine bestehende float/double Variable aus und lasse 
die neu hinzugefügte float/double Variable unverändert, lässt sich der 
Code problemlos compilieren.
1
1- double sosHP[2][6]={{1.0,-2.0,1.0,1.0,-1.9681033113,0.9690749309},{1.0,-1.0,0.0,1.0,-0.9690674172,0.0}};
2
//double sosHP[2][6]={0};  //= gleiche Fehlermeldung wie in Zeile 1 (nur Zeilenangabe anders)
3
2- float gainHP[3]={0.0008413441,1.0,1151.8131864772};
4
3- double accDataHP[3]={0};
5
4- double accDataHP1[3]={0};

Ich persönlich vermute ein Speicherproblem:
Das Software Tool MPLAB wirft nach jedem Compiliervorgang ein Summary 
aus. Aus diesem kann ich den benötigten Datenspeicher ablesen. Dieser 
liegt bei mir, bei 7.1% des verfügbaren. Das würde meine Theorie wieder 
über den Haufen werfen.
1
Summary:
2
    Program space        used  1C99h (  7321) of 155FCh words   (  8.4%)
3
    Data space           used   48Dh (  1165) of  4000h bytes   (  7.1%)
4
    Mapped data          used   560h (  1376) of  8000h bytes   (  4.2%)
5
    Interrupt Vectors    used    2Eh (    46) of    7Dh words   ( 36.8%)
6
    Alternative Vectors  used    2Eh (    46) of    80h words   ( 35.9%)
7
    Config bits          used     0h (     0) of     4h words   (  0.0%)

Hat jemand eine Idee? Hat jemand diesen Fehler schon einmal gehabt? Bin 
über jedes Feedback erfreut.

Mit besten Grüßen
Christopher

von Dieter W. (dds5)


Lesenswert?

Das beanstandete "slit10" kommt nur in diesen beiden (Assembler) 
Befehlen vor.

MOV [Ws+Slit10],Wnd    Move [Ws + signed 10-bit offset] to Wnd
MOV Wns,[Wd+Slit10]    Move Wns to [Wd + signed 10-bit offset]

Der Compiler benutzt also ganz offensichtlich Adressierung mit Offset 
und dieser (Offset) reicht bei größerem RAM Speicherbereich nicht mehr 
weit genug.

Ich habe keine Erfahrung mit Hi-Tech aber vielleicht hilft die Änderung 
des RAM-Speichermodells.

von Christopher (Gast)


Lesenswert?

Hallo.
Vielen Dank für deine Anwort. Ich habe diese beiden Befehle auch schon 
im Datasheet von microchips gefunden konnte aber die Bedeutung nicht 
verstehen.

Hab mich jetzt ein bischen in die Themaik bezüglich physischer und 
physikalischer Adresse eingelesen. Aber heißt das, dass ich "in meinem 
Code" die Zuweisung des RAM Speichers ändern muss oder bei den 
"Systemeinstellung" meines Softwareprogramms MPLAB oder meiner VM ?

Vielen Dank für deine Hilfe.

Mfg
Christopher

von Dieter W. (dds5)


Lesenswert?

Je nach Größe des auf dem Ziel-System verfügbaren Speichers gibt es bei 
vielen Compilern verschiedene Speichermodelle: small, medium, large und 
huge.

Diese Auswahl ist getrennt für code und data memory möglich.

Der Compiler bwnutzt dann die effizienteste Adressierungsart um den 
Maschinencode zu erstellen.

von Christopher (Gast)


Lesenswert?

Aha. Habe das Speichermodell von MPLAB gefunden und auf Large (24bit 
Wortbreite und maximal 4Mbyte Speicher) umgestellt. Leider hat sich an 
der Fehlermeldung nichts geändert. Trotzdem Vielen Dank für die Hilfe.

Mit besten Grüßen

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.