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
> for (ServiceCount_1 = 0; ServiceCount_1 < 100);ServiceCount_1 ++)
Mal abgesehen von der Klammer hier ----------^
sieht das eigentlich ok aus.
Aaaaaber: fehlt in dem Code nicht noch was?
Wie groß ist das Array SpiServiceIn[]?
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
Die Adresse 0DAC ist im Bereich der CAN-SFR reserviert, enthält aber keine Speicherzelle (Datenblatt, RAM-Belegung). Jetzt wäre es wohl nötig, herauszufinden wer dem Compiler ausgerechnet diese Adresse vorschreibt.
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
>;ServiceCount_1 ++)
Also ich würde einfach mal das Leerzeichen zwischen Variable und ++
wegmachen
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.