Zugriff auf globale Variablen unter C Kategorie: Progr. Assembler, TaskingTools, OS (von Dominik - 26.02.2004 20:55) | ||
| ||
Hallo Dietmar (und alle Anderen)! Nachdem der letzte Thread ursprünglich mit einem anderen Problem (malloc, calloc,...) begonnen hat und deshalb etwas irreführend sein könnte fange ich nochmal einen neuen an. Ich möchte auf der CC2 unter C (Tasking EDE) auf globale Variablen zugreifen. Allerdings lassen sich diese offensichtlich nicht beschreiben sondern nur lesen. 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 | ||
Antwort schreiben Antworten: Re: Zugriff auf globale Variablen unter C (von Patrick - 23.09.2004 9:11) |