Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Speicherreservierung mit malloc, calloc,... Kategorie: Progr. Assembler, TaskingTools, OS (von Dominik - 26.02.2004 15:02)
Als Antwort auf Re: Speicherreservierung mit malloc, calloc,... von Dietmar Weickert - 25.02.2004 16:53
Ich nutze:
C-Control II Unit, CC2-Application-Board, OSOPT_V2
Hallo Dietmar (und alle Anderen)!  
Das Problem scheint tatsächlich nur im Zugriff auf die globalen Variablen zu liegen. Möglicherweise
habe ich irgendetwas Grundlegendes übersehen. Ich habe unten einfach mal einen Quelltext als
Beispiel angehängt. Das eigentliche Programm ist aufwändiger, aber das Problem ist hierbei das
gleiche.

Es handelt sich um den Quelltext aus Kapitel 11.6 "- Ein Speicheroszilloskop -" aus dem Buch
"Messen, Steuern, Regeln mit CC2" von B. Kainka und A. Helbig. Mit dem Unterschied, daÃ? nach
Empfang eines Zeichens von der PC Tastatur mit 'Receive' nur ein einzelnes Zeichen (hier die '9') in
die Character-Variable 'data' gespeichert und dann mit 'Send' 5 mal über die serielle Schnittstelle
ausgegeben werden soll. Das funktioniert auch wunderbar solange 'data' lokal deklariert ist. Sobald
man 'data' global deklariert (wie unten) wird nur noch der sinnlose Inhalt der Speicherzelle
ausgegeben. Verändern lä�t sich die Variable nicht. Es wird wohl auch kein Programm-Code
überschrieben, denn das Programm läuft zuverlässig aber nutzlos weiter. Die (hier auskommentierte)
'extern' Definition ändert nichts. Auch wenn man 'data' mit '_at(0x....)' an andere Stellen speichert
ändert sich nichts. Die Compiler-Einstellungen sind wie in oben genanntem Buch in Kapitel 11
(Also nichts besonderes verändert).

Noch etwas: Wenn man die Zeile 'for(n=0; n<5; n++)' entfernt, kommt beim Compilieren der Fehler:
'W 177: SECSIZE control: section 'C166_US' not found' (?!?!?). Vielleicht ist das ja interessant.

Hier der Quelltext:
-------------------------------------------------------------------------------------
#define REG164CI_NOOTP
#define REG164CI_NOPEC
#define REG164CI_NOCAN
#include "reg164ci.h"

char data;

void Send(char ch);
int Receive(void);
void Oszi(void);


void Send (char ch)
{ ................
}

int Receive ()
{.................
}

void Oszi (void)
{
//  extern char data;
  int n;
  IEN = 0;
  while(1 == 1)
  {
    n = Receive();
    data = '9';
    for(n=0; n<5; n++)
    Send(data);
  }
}
-------------------------------------------------------------------------------------

Bin ich vielleicht einfach nur zu blind um den Fehler zu sehen?

GruÃ?, Dominik


> Hallo Dominik!
>
> Falls alle Stricke rei�en: Was hältst du von 12 Feldern zu je 256 Bytes?
> Dass du in deine globalen Felder nicht schreiben kannst, erstaunt mich einigermaÃ?en. Auch dass die
> lokalen ab einer gewissen Grö�e versagen, lässt nichts Gutes ahnen (falsche Stack-Arithmetik?).
> Bitte lasse uns wissen, was heraus kommt.
>
> Beste Grü�e,
> Dietmar.


    Antwort schreiben


Antworten:

neuer Thread (von Dominik - 26.02.2004 20:58)