Forum: Mikrocontroller und Digitale Elektronik Mehrere Programme im internen Flash


von Michael G. (michaelg)


Lesenswert?

Hallo Forum,
ich suche nach einer Möglichkeit, mindestens 2 eigenständige Programme
(keine Tasks oder Anwendungen) im internen Flash eines LPC2294
unterzubringen. Der Sinn ist, daß ein Notprogramm gestartet wird, wenn
das Hauptprogramm versagt. Die Not-Funktionen darf ich aus TÜV-Gründen
nicht in das Hauptprogramm einbauen.

Wäre super, wenn damit schon jemand Erfahrung hat auch in Bezug auf die
Boot-Routinen, etc.

Ein externes Flash für das 2. Programm möchte ich mir gerne sparen.

Vielen Dank schon mal.
Michael

von Joe (Gast)


Lesenswert?

Im Prinzip kannst du beliebig Viele Programme im MC unterbringen,
einfach CSEG der einzelnen Teile an die jeweilig gewünschte
Startadresse.

Nun brauchts noch den Notauslöser, dein Hauptprogramm steuert im ersten
Teil ein Stück externer Hardware (retriggerbares Monoflop). Kann dieses
nicht mehr vom Main bedient werden so wird durch das MF ein Transistor
geschaltet der den RESET veranlasst und bei einem Neustart des MC
gleich noch einen I/O nach Masse zieht. Das wiederum veranlasst deine
Startroutine zum Notprogramm zu Springen.

Wenn du aber schon mit dem TÜV gesprochen hast dann kanns auch nen 2ter
MC werden. Ist hier "Einfehlersicherheit" verlangt ?? Medizintechnik
?? Dann wirds schon etwas mehr Aufwand.

von Thomas O. (Gast)


Lesenswert?

Hast du diese Info von TÜV oder vom KBA? Würde mich mal interessieren
worums da genau geht(evtl. Einspritzanlage?)

Was heißt eigentlich Hauptprogramm. Ich würde es so machen nach einem
Reset wird ein bestimmtes Byte im EEPROM abgefragt wenn es z.b. auf 255
steht , wird mit dem Notprogramm weitergemacht, wenn nicht im
Hauptprogram. Wenn also das Hauptprogramm einen Fehler endeckt muss es
nur diese eine stelle im EEPROM ändern und evtl. ins Notprogramm
verzweigen.

Wie will den überhaupt jemand unterscheiden ob das Haupt- und das
Notprogramm getrennt sind. Irgendwo muss es ja im Flash sein und da
spielt es doch keine Rolle wo. Aber bei der Info die du bekommen hast
muss es soch ja um ein sicherheitsrelevantes Teil handeln was du
bauen/beeinflussen willst.

von Michael G. (michaelg)


Lesenswert?

Die Vermutung mit der Sicherheitsrelevanz ist schon Richtig. Es geht um
die synchrone Steuerung von mehreren Maschinen-Achsen mit SIL3
Anforderung ( -> 2 Prozessoren sind pro Achse vorhanden). Da die
Synchronisation dieser Achsen sehr komplex ist und auch von diversen
Programmierern unabhängig voneinander realisiert werden muss
(Programm-Diversität) kommt ein Notprogramm zum Einsatz, welches auf
einem ganz niedrigen Level den Betrieb nach SIL2 sicherstellt (Erhöhung
der Verfügbarkeit), falls ein Programmfehler vorliegt.
Die beiden Programme dürfen nichts miteinander zu tun haben, also keine
Sprünge,etc. sonst wird die Whrscheinlichkeitsberechnung für die
SIL3-Abnahme beliebig kompliziert.


Aber beim LPC2294 habe ich ja die Möglichkeit von verschiedenen Orten
zu booten (internes oder externes Flash).

von Stephan H. (stephan-)


Lesenswert?

also die Idee mit dem EEPROM halte ich nicht für so gut.
Wer soll den beschreiben wenn das Proggi gassi geht ??
Besser ist da schon das Monoflop. Ich würde es wie einen Watchdog
bauen.
Die Main gibt Impulse aus um das Flop entsprechend zu halten.
Bleiben diese aus, könnte die MCU neu starten und ein oder mehrere
Ports abfragen welches Programm gestartet werden soll.

Oder das Flop lößt einen Int aus ( nicht so gut), da ja niemand weis ob
dieser noch bearbeitet werden kann.

von Peter D. (peda)


Lesenswert?

Also wenn man 2 Prozesse laufen lassen will, die sich gegenseitig
überwachen, braucht man entweder ein Multitasking-OS oder 2 getrennte
CPUs.

Nur die 2 Programme in den Flash pusten, nützt überhaupt nichts.

Ich bin mir auch nicht sicher, ob schon alle Bugs bei den LPCs gefunden
wurden.
Ich würde daher lieber noch ne 2. CPU nehmen, die schon länger am Markt
ist und weniger Bugs hat und vielleicht auch nicht so kompliziert ist.

Zuverlässigkeit heißt ja, daß man echte Alternativen hat, wenn etwas
ausfällt und das ist auf einer einzigen CPU eigentlich unmöglich.


Peter

von Michael G. (michaelg)


Lesenswert?

Hallo Peter,

es werden nicht 2 Prozesse parallel laufen. Es soll so sein, daß, wenn
das High-Level Programm aussteigt oder Fehler hat, der Benutzer
umschalten kann auf ein Notprogramm, welches dann gebootet wird. Bisher
haben unsere Steuerrechner 3 Prozessoren (2 für den SIL3-Betrieb und
einer für den Notbetrieb), ab demnächst wird einer gespart, da die
Hardware-Ausfälle im Feld sehr gering sind.
Aber es werden nicht beide Betriebsarten zur gleichen Zeit laufen, der
Benutzer entscheidet (noch!), welches Programm geladen werden soll.

Bin jetzt so weit, das im internen Flash nur ein Boot-Programm liegt
und in einem externen seriellen Flash die jeweiligen Programme, die
dann geladen werden können. Da kann man dann auch Blockweise einen CRC
drüberlegen, wenn man diese dann ins SRAM läd (Danke Jürgen). Weiss nur
nicht, wie das dann mit dem debuggen klappt.

Auch wäre aine Möglichkeit, dem Compiler zu sagen, wo er mit dem
jeweiligen Programm im internen Flash anzufangen hat. Vorrausgesetzt
der Flasher kann nur bestimmte Bereiche bespielen und bügelt nicht
alles über.

von Peter D. (peda)


Lesenswert?

Es geht also nicht um Zuverlässigkeit, sondern darum, daß man
weiterarbeiten kann, wenn ein Fehler bemerkt wurde.

Ich würde dann einfach beide Programme hintereinander in den Flash
bruzzeln und das erste Programm fragt nen Pin ab und springt dann das
2. an, wenn ein Schalter geschlossen wurde.

Der LPC kann ja die Interruptvektortabelle in den SRAM legen, und dann
kann jedes Programm dort seine Vektoren eintragen, wenn es gestartet
wird.

Wie das genau geht, da mußt Du Dich mal durch die Doku wühlen.


Externen Speicher würde ich nur im Notfall dranpappen, da der immer
unzuverlässiger ist, als interner (kalte Lötstelle, Spikes).


Peter

von inoffizieller WM-Rahul (Gast)


Lesenswert?

Müsste es nicht eigentlich so sein, dass man quasi 2 Programme im Flash
hat, wobei das Programm, das als Notfallprogramm läuft, anspringt,
sobald ein Reset eingetreten ist?

Das Notfallprogramm läuft nach dem Einschalten los und überprüft den
letzten Zustand anhand irgendeiner Speicherzelle (z.B.EEPROM, AVR haben
dafür ein Register in dem die Reset-Quelle angezeigt wird.)
Wenn es ein Power-On-Reset war, springt das Notfall-Programm zu
eigentlichen Hauptprogramm, das wiederum einen (externen) Watchdog
regelmässig triggert. Sobald dieser Watchdog "zubeisst", wird der
Chip wieder resetet, wobei diesmal die Reset-Quelle eine andere ist,
und das Notfall-Programm entsprechend reagiert.

Kann aber auch sein, dass ich das komplett falsch verstanden habe.

von Stephan H. (stephan-)


Lesenswert?

@Rahul,
"inoffiziell" ist ja o.k. ABER..WM ?? lange vorbei :-)

Gruß

von inoffizieller WM-Rahul (Gast)


Lesenswert?

Wie schon in einem anderen Thread:
WM gibt es viele, nicht nur die der Rundballtreter...

von Läubi (Gast)


Lesenswert?

Delta Radio Trettboot WM :D

von Joe (Gast)


Lesenswert?

Das Prinzip hat Peter und ich ja schon erläutert, bei deiner
Aufgabenstellung empfiehlt sich allerdings nen 2ter MC.

von Dietmar (Gast)


Lesenswert?

@Michael:

Habe zur Zeit ebenfalls die Aufgabe, 2 separate Programme im internen
Flash eines LPC21xx unterzubringen. Das erste Programm soll dauerhaft
im Flash verbleiben und stellt einen IAP Loader dar, der das zweite
Programm, das eigentliche Anwendungsprogramm, z.B. über RS-485 oder CAN
per IAP Programmierung fernupdaten kann. Es kann immer nur eines der
beiden Programme aktiv sein.

Da es nur einen Satz Exception-Vektoren im Flash gibt, müssen sich die
beiden Programme wohl oder übel die Vektoren teilen, d.h., muß ein
Handler konstruiert werden, der die Vektoren je nach Betriebsart (z.B.
Zustand einer RAM-Zelle) in eines der beiden Programme verzweigt. Da
entsteht zwar etwas Latenzzeit, aber das läßt sich nicht vermeiden, und
stört auch nicht wirklich.

Mit dem Philips Flash Utility dürfte es kein Problem sein, 2 separate
Programme in 2 verschiedene Bereiche im Flash zu laden.

Wahrscheinlich werde ich zu Debug-Zwecken beide Programme erst mal so
aufbauen, daß sie einzeln laufen.

Gruß

Dietmar

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
Noch kein Account? Hier anmelden.