mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik anderen PIC gewählt


Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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[]?

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>;ServiceCount_1 ++)
Also ich würde einfach mal das Leerzeichen zwischen Variable und ++ 
wegmachen

Autor: Siegfried Saueressig (dieleena)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.