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
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.
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.
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).
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.
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
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.
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
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.
@Rahul, "inoffiziell" ist ja o.k. ABER..WM ?? lange vorbei :-) Gruß
Wie schon in einem anderen Thread: WM gibt es viele, nicht nur die der Rundballtreter...
Das Prinzip hat Peter und ich ja schon erläutert, bei deiner Aufgabenstellung empfiehlt sich allerdings nen 2ter MC.
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.