Array beschreiben schlägt fehl

OP #2816176
Lesenswert?
• ▲
▼
Hallo Leute,

ich habe zwei Arrays global definiert.
1
GlobalDefinitions.h
2

3
#ifndef GLOBAL_DEFS_H
4
#define GLOBAL_DEFS_H
5

6
// if EXTERN is not definied, make just declaration of global variables
7
#ifndef EXTERN
8
#define EXTERN extern
9
#endif
10

11
#pragma udata bigdata
12
EXTERN unsigned char LokVsollListe[200];
13
EXTERN unsigned char LokVistListe[20];
14
#pragma udata
15

16

17
#endif

Damit die Arrays in die sections passen habe ich die Linkerdatei 
angepasst (siehe Anhang)
1
Main.c
2

3
#define EXTERN
4
#include "GlobalDefinitions.h"
5

6
#pragma udata bigdata
7
 unsigned char LokVsollListe[200];
8
 unsigned char LokVistListe[20];
9
#pragma udata
10

11
void main() {
12

13

14
}


In der MainFunktion mache ich im Moment nichts anderes, als
1
LokVistListe[0] = 54;
2
LokVistListe[1] = 55;
3
LokVistListe[2] = 56;
4
LokVistListe[3] = 57;
5
LokVistListe[4] = 58;
6
LokVistListe[5] = 59;
7
  
8
// Delay1ms(1);
9
  
10
LokVsollListe[0] = 54;
11
LokVsollListe[1] = 55;
12
LokVsollListe[2] = 56;
13
LokVsollListe[3] = 57;
14
LokVsollListe[4] = 58;
15
LokVsollListe[5] = 59;
16

17
//breakpoint for debugger


Wenn ich das Delay drin lasse und compiliere und danach debugge stehen 
in beiden Arrays die entsprechenden Werte drin. Wenn ich das Delay raus 
nehme und dann nochmal compiliere+debugge stehen nur noch in 
LokVistListe die Werte drin.


Zielhardware ist ein PIC18F4685. Debugger ist der ICD2.
Angehängte Dateien:
#2816229
Lesenswert?
• ▲
▼
Ist dein Optimizer eingeschaltet?


Optimizer dürfen unter anderem
* Zuweisungen an Variablen rauswerfen, wenn die Variable nicht
  lesend benutzt wird
* Anweisungen umgruppieren, solange sich das Ergebnis nicht
  verändert
* Variablen überhaupt entfernen, die nirgends benutzt werden.


D.h. solange nicht klar ist, ob du nicht einem Optimizer-Effekt aufsitzt 
würde ich mir erst mal keine Gedanken machen. Es ist ziemlich 
unwahrscheinlich, dass ein Compiler bei der Zuweisung einer Konstanten 
an ein Array-Element einen Fehler macht.
#2816386
Lesenswert?
• ▲
▼
Stephan Meter schrieb:
> Compiler ist der C18 von microchip in der Lite Version. Diese Version
> hat als einzige Einschränkung, dass man nichts an der Optimierung ändern
> kann.
>
> Wie kann ich mir aber den Unterschied mit zu ohne Delay dazwishen
> erklären?

Dazu müsste man erst mal wissen, ob die OPtimierung da überhaupt mit 
reinspielt.

Wenn du die Arrays im Programmcode dann tatsächlich #verwendest#, stehen 
dann die richtigen Werte drinnen?
OP #2816395
Lesenswert?
• ▲
▼
Karl Heinz Buchegger schrieb:
> Dazu müsste man erst mal wissen, ob die OPtimierung da überhaupt mit
> reinspielt.

Ich habe die Optimierung jetzt mal komplett deaktiviert und jetzt stehen 
am breakpoint die Werte in beiden Arrays drin.


> Wenn du die Arrays im Programmcode dann tatsächlich #verwendest#, stehen
> dann die richtigen Werte drinnen?

Ich hatte die Arrays tatsächlich verdendet, also lesend und schreibend. 
Dabei ist mir der fehler erst aufgefallen. Ich verstehe nur nicht, warum 
nur eines der beiden Arrays davon betroffen ist.
OP #2816484
Lesenswert?
• ▲
▼
Ohne Debugger ist es mir aufgefallen und danach hab ich genau deswegen 
debuggt. Also das Problem besteht mit und ohne debugger.

Die Arrays werden stellen für jede Lok eine Geschwindigkeit dar 0=0% 
200=100% der Höchstgeschwindigkeit. Im normalen Programm werden Soll- 
und Ist-geschwindigkeit als Bargraph für jede Lok angezeigt (im Moment 
nur die ersten 7 Loks in den Arrays).
Das Problem hat sich so geäußert, dass der Bargraph für die 
Soll-geschwindigkeit 0 war. Also 0 Balken. Vertausche ich die 
Zuweisungen am Anfang vertauscht sich auch das Problem auf das jeweilig 
andere Array.
OP #2816503
Lesenswert?
• ▲
▼
Du hast ja nicht nach dem Code gefragt. Ich habe dir mein Problem 
beschrieben. Hier sind die relevanten Module.
Angehängte Dateien:

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.