Hallo, Ich habe Problem beim schreiben in Relocatable Vectors Table. Ich habe schon verschiedene Methoden ausprobiert: 1) INTB register auslesen, dann habe ich FlashWrite function aus Samples benutz um dieser Speicherbereich zu zugreifen -> ohne erfolg 2) ab INTB addresse die ganze tabelle auslesen, nötige änderung eintragen und ab 0x0F000 speichern. Aber sobald FMR01 bit auf 0 gesetzt wird, sieht flash ab 0xF000 nicht mehr richtig aus. 3) die gleiche Schritte wie im 2) aber ab adresse 0xF000. und dann INTB änderen. In dem Fall funktioniert alles am besten, aber auch nicht korrekt: die Interrupt vectoren, die mit #pragma vector definiert worden sind, klappt alles, aber die, die ich selbe eingetragen habe (function pointer), die funktionieren nicht. Eigentlich möchte ich INTB register nicht ummappen und die Werte in tabelle eintragen. Wieso funktioniert bei mir FlashWrite nicht richtig????
Hallo Peter, mit welchem M16C arbeitest Du? Flash bei 0x0F000 sieht für mich nach R8C aus? Ich probiere etwas mit dem M16C/62P herum und nutze für die Int.-Vektoren die sect30.inc. In das RAM mappen klappt auch ganz gut (ohne sect30.inc). Die FlashWrite Funktion habe ich noch nicht benutzt, daher kann ich Dir leider nicht helfen. Hast Du mal normale Daten mit der FlashWrite Funktion geschrieben und kontrolliert. Was kommt den raus, wenn Du Int.-Vektoren mit FlashWrite schreibst, sind vieleicht nur die bytes verdreht (high-byte, low-byte)? Oder steht da dann nur Müll drinn? Grüße Quark
Ich habe mich noch nicht allzusehr mit dem M16C beschäftigt, aber bei mir hat der C-Compiler sich komplett um alles gekümmert - d.h. er hat die Interrupt-Vektoren entsprechend definiert. Auch für Assembler gab es beim Entwicklungspaket entsprechende Include-Files. Nachträglich im Flash herumschreiben ist dabei nicht notwendig. Bastelst Du an einem bestehenden System herum? Oder möchtest Du Interrupt-Vektoren während des laufenden Betriebs umswitchen?
Vielleicht noch der Tip das man sich bei verwendung von sect30.inc sehr leicht vertun kann indem man seine Interruptvektoren in den falschen Bereich schreibt. Das Teil mit seinen ellenlangen defines ist nicht gerade das was man als guter Programmierstil bezeichnen koennte. Olaf
Bei mir kommt M16C29 im einsatz + IAR compiler. Beir diesem Prozeccor gibt es 128K Flash ROM. Block A,B und von 0 bis 5. Compiler mach alles richtig, wenn ich einen interrupt vector definiere. Aber es muss dynamisch sein! Das heisst dass ich je nach board konfiguration entweder eine Funktion für die bzw TimerA2 interrupt benutze oder andere. In anderen Wörten die Interrupt Table muss geändert werden. Ich habe früher für PIC was geschrieben und beim PIC in Flash zu schreiben klappt wunderbar! hier aber - eine Drama. Ich habe E8 debuger und wenn ich Int. table auf 0xF0000 kopiere, dann sehe ich nichts im Memory Windows (keine Änderungen), aber die alle Vectoren auser deren, die von mir definiert worden sind, funktionieren richtig. mit der adresse 0x0F000 sehe ich meine Änderungen bis FMR01 bit zurück aus 0 gesetzt wird.
Gibts vielleicht ein Problem mit der Umsetzung der Pointer? Könnte sein, dass es da eine Verwurschtelung der Typen gibt. Der M16C245, mit dem ich arbeite, nutzt z.B. long-Pointer - manchmal aber auch nur 24Bit (auf dem Stack). Wie sieht denn der Functionpointer aus, wenn Du ihn testweise ins RAM schreibst?
Wenn man sich mit dem E8 den Flashinhalt anschauen will dann muss eingestellt sein das er sich den bei Breaks auch zurueckliesst. Sonst bekommt er aenderungen die der Prozessor am Flash vornimmt nicht mit. Probleme mit der Pointerlaenge sind mir bei der gleichzeitigen Nutzung zwischen M16C und R8C auch schon aufgefallen. Der eine nimmt naemlich defaultmaessig FAR und der andere NEAR. Olaf
Ich denke nicht, dass das ein Problem mit der Umsetzung der Pointer ist. Statt einfach die Adresse in Table zu schreiben, lese ich die ganze tabelle aus, fülle mit Function addressen und erst dann schreibe in andere Flash Bereich. Vor dem Schreiben habe ich den Buffer überpruft...i.O Aber was mich eingentlich wundert. wieso kann ich in 0xF0000 Schreiben und in 0xFBD90 nicht! aber sogar Schreiben in 0xF0000 funktioniert 2, 3 Mal und dann nicht mehr!!!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.