anderen PIC gewählt

OP #1022438
Lesenswert?

Hallo,
Habe mein Projekt ursprünglich mit einem 18F4550 angelegt.
Die USB Zeilen wurden noch nicht geschrieben.
Da jetzt eine Erweiterung erfolgt soll das Projekt mit einem 18F4680 
erfolgen.
Die Umstellung ist auch erfolgreich erledigt.
Habe aber ein Problem.

In der *.c habe ich eine Variable deklariert
unsigned int ServiceCount_1;

dies ist meine Zeilen

void InitSpiService(void)
{
for (ServiceCount_1 = 0; ServiceCount_1 < 100);ServiceCount_1 ++)
{
SpiServiceIn[ServiceCount_1] = 0x00;
}

ServiceCount_1 ist als "Restricted Memory" an Adresse 0DAC angelegt

Das Programm hängt sich in der for Schleife auf!!

Was muß ich noch ändern?

Gruß Siegfried
OP #1022514
Lesenswert?

Hallo,
"ServiceCount_1 < 100);" Klammer hier im Forum ist ein Schreibfehler.
"Array SpiServiceIn[]?" ist entsprechend groß.
Der Fehler taucht über das gesamte Projekt auf. Hat nichts mit einem 
Array zu tun.
Was soll dieses ""Restricted Memory"" sein ?
in den File Register wird ein interger, wenn er in einer *.h steht so 
wieder gegeben.
Adress Hex   Dezimal Symbol
200    0x01  1       xyz

wenn der interger im Kopf einer *.c steht
Adress Hex   Dezimal Symbol
220    --    --      bvf

Gruß Siegfried
#1022933
Lesenswert?

Siegfried Saueressig wrote:
> Was soll dieses ""Restricted Memory"" sein ?

Wenn Du nicht weißt, was das bedeutet, warum verwendest Du es dann.
Ein standard C-Statement ist das jedenfalls nicht.

Wenn man Variablen an feste Adressen bindet, dann nur, wenn es wirklich 
nicht anders geht und wenn man auch ganz genau weiß, was man tut.

Es ist nämlich ein schwerer Eingriff in die Hoheit des Compilers, der 
möchte lieber alles selber verwalten (und kann das auch viel besser).


Peter
OP #1023017
Lesenswert?

Hallo schönen Abend,
Ber Begriff "Restricted Memory" kannte ich nicht. Auch nichts im Buch 
K&R zu finden, oder ich habe es übersehen. "Restricted Memory" würde ich 
als reservierter Speicher bezeichnen.

In den Bereichen
"Wenn man Variablen an feste Adressen bindet, dann nur, wenn es wirklich
nicht anders geht und wenn man auch ganz genau weiß, was man tut.

Es ist nämlich ein schwerer Eingriff in die Hoheit des Compilers, der
möchte lieber alles selber verwalten (und kann das auch viel besser).
"
möchte ich es zu Zeit lieber dem Compilers überlassen.

Das ganze hat mich aufs Eis gezogen.

Diese Zeilen beziehen sich auf einen 18F4680
Es findet nur statt, wenn die Variable in der *.c sich befindet.
Verlagere ich sie in eine *.h mit einschließlich mit include der *.h in 
der *.c , funktioniert es.
Beim 18F4550 funktioniert es so wie ursprünglich angelegt wurde. 
"Variable in der *.c"

Werde aber trotzdem dem Problem nachgehen.

Kann doch nicht sein, das der Compiler mit einem gleichem Quellcode für 
ein 18F4550 anderst verhält als bei einem 18F4680

Gruß Siegfried

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren