mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem Flash...


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe folgendes Problem...
Hab meine Hardware mit einem c167 controller und einem externen flash.
als compiler verwende ich u3vision von keil.
Nun kann ich mein Programm problemlos mit dem u3v ins ram laden und 
debuggen.... funktioniert einwandfrei, soweit bin ich noch glücklich

lade ich das programm aber mit dem tool flashit ins Flash (AM29F010B),so 
das es von diesem starten sollte, läuft sogut wie gar nix mehr.
Lade ich nun ein Testprogrämmchen ins flash, welches nur über einen 
digitalen  IO eine LED zum blinken bringt, funktioniert dies ebenfalls 
einwandfrei. (heisst für mich, hardware ist i.O., die zumindest die 
register, welche für die kommunikantion zwischen c167 und flash 
zuständig sind sind richtig gesetzt...)

Hab nun festgestellt, das (so scheint es zumindest) der c167 an gewissen 
stellen im programmm abstürzt... (wenn ich gwisse programmteile 
ausklammere läuf der rest zumindest :-)...), weiter hab ich 
festgestellt, das in einem interrupt (hab nur einen) mindestens eine 
variable beim ersten durchlauf nicht auf dem wert steht, auf den sie 
eigentlich hätte initialisiert werden müssen... (hab dies rausgefunden, 
indem ich an gewissen orten im im interrupt einen ausgang setzte und 
damit eine led ansteuerte, die entsprechende varriable muss einen wert 
haben, den sie bei normalem programmablauf, unmöglich bekommen kann...)

So ganz schön kompliziert, :-) hat dennnoch jemand eine idee woran es 
liegen könnte/was ich ausprobieren könnte..???...???...???

danke für die mühe
Daniel

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
niemand ne idee? :-(

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmmm angenommen varriablen haben werte, die sie aufgrund der applikation 
nicht haben können, was gibts alles für gründe dafür?
da ich in C programmiere könnte es z.b. sein das ich einen wert in einen 
array schreibe, mit einem index der grösser ist als der höchste des 
arrays... gibts sonst noch möglichkeiten?????

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hst ne Schaltung und einen Quellcode vor dir und bist nicht in der 
Lage den Fehler zu finden ...

Wir haben nichts dergleichen von dir bekommen also raten wir für dich ?? 
ist es das was du willst ??

Du sprichst von einem Interrupt. Wird da deine Variable versemmelt, ist 
die oder mehrere Variablen an der ISR beteiligt? volatile deklariert?

Keine lust mehr zu raten...

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für deine antwort... naja würde der quellcode so einfach auf ne a4 
seite passen hätt ich ihn sicher angehängt...

sind verschiedene varrialblen am interrupt beteiligt, auch globale..., 
der interrupt wird durch einen Input ausgelösst...

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
volatile deklariert?

Ne Datei reicht, brauchst kein Blatt anhängen ;-))

Autor: Daniel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
volantile... ne hab ich nicht, aber hab ich nach deinem ersten statement 
mal gemacht, konnte leider keinen unterschied feststellen...

ok, hab mla das *.c file mit dem interrupt angehängt... hat einige 
variablen drin die ich zum debuggen brauche, also von diesem punkt nicht 
zu kritisch anschauen gg

also in zeile 270 ist eine if anweisung. beim ersten mal wo der 
interrupt durchlaufen wird, ist die varriable uwstate > 5 bei dieser if 
anweisung , was eigentlich unmöglich ist, da sie erstens mit 0 
initialisiert wurde, zuvor mit sicherheit nicht verändert wird, und 
sowiso in zeile 250 (beim ersten interrupt!) nochmal auf 0 gesetzt 
wird... dies ist übrigens eine globale variable, welche aber 
ausschliesslich in diesem interrupt geschrieben wird...

hmmm ja so schauts leider immer noch aus...

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder wie ist das mit den volantile genau, finde nix genaues darüber...

Autor: uu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in C muss man eine variable , die von einem Interrupt veraendert, oder 
abgefragt wird als "volatile" deklarieren. Dies verhindert, dass der 
compiler sie wegoptimiert, wenn er meint, sie bringe nichts.

In einem C manual muesste das beschrieben sein.

rene

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah ja habs gefunden... leider war das nicht das problem...

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab nun rausgefunden, dass wenn ich vom Flash aus boote, mein externes 
Ram überhaupt nicht angeprochen wird... (kein cs nix...)
nur ist mir nicht klar wiso... das naheliegenste wäre, wenn die 
entsprechendne Register (Buscon1, ADDRSEL1) nicht richtig gesetzt 
sind...
diese kann ich ja im start167.A66 konfigurieren, und da bin ich der 
meinung stimmt. (Dies, da ich beim debuggen mit u3v die entsprechenden 
registerwerte von Buscon1 und addsel1 angeschaut habe, diese stimmmen 
mit den werten überein die ich im start167.A66 file habe...)

sehe keine möglichkeit die tatsächlichen werte dieser beiden register zu 
überprüfen, wenn ich vom flash boote... (habe versucht mir diese über 
die serielle schnittstelle zu schicken, aber zu wenig ram, damit dies 
funktioniert...)...

gibts da ne möglichkeit dies nachzuprüfen?
wenn das ganze im debuggingmodus mit u3v funktioniert, kann ich davon 
ausgehen dass die hardware ok ist?
sonst ein vorschlag?

mfg Daniel

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.