Hallo zusammen, Ziel ist es große getestete Codebestandteile in "geschützte" Flash- und Rambereiche zu legen. Beim IAR gibt es dazu das Tool ISymExport. Das erzeugt aus aus einer elf-Datei eine Datei mit Symbolen die dann zu einem anderen Projekt dazu gelinkt werden kann. Als Beispiel lwip und freertos belegen ja schon mal ein ganzes Teil im Flash. Wenn man diese Teile, in denen man sowieso in der Regel nichts debuggen muss, an feste Positionen in Flash und Ram legt, würde man sich das ständige Neuflashen sparen. Das spart Zeit und man könnte dann auch eventuell mit den auf 32k beschränkten Eval-Versionen von Keil und co. noch größere Projekte realisieren. Kennt jemand da eine Möglichkeit wie das mit dem gcc machbar ist? Auf die Tippel-Tappel-Tour mit Sprungtabellen wollte ich aber nicht zurückgreifen. Da ist der Aufwand größer als der Nutzen. Schönen Tag noch.
@pegel Das trifft es nicht ganz, da kommt am Ende ja auch nur ein einzelnes elf-File bei raus. Am Beispiel LPC1769. Im Linkerscript stehen da normalerweise z.b.: MEMORY { rom (rx) : ORIGIN = 0x00000000, LENGTH = 0x00080000 ram (rwx) : ORIGIN = 0x10000000, LENGTH = 0x00008000 } Ich möchte nun meine fixen Sachen an fixe Stellen Packen und erzeuge das erste hex-File (meine lib) z.b. mit MEMORY { rom (rx) : ORIGIN = 0x00070000, LENGTH = 0x00010000 ram (rwx) : ORIGIN = 0x10007000, LENGTH = 0x00001000 } das 2. mit MEMORY { rom (rx) : ORIGIN = 0x00000000, LENGTH = 0x00070000 ram (rwx) : ORIGIN = 0x10000000, LENGTH = 0x00007000 } Die Lib kriegt eine init-Methode die fast den selben Startup-Code enthält wie normale Programme. Stack und Vektoren werden dabei nicht initialisiert, aber bss u.s.w schon und auch die Construktoren für c++. Das kriege ich sicher gebacken. Ich brauche jetzt eigentlich nur eine Symboltabelle der Funktionen und Variablen aus meiner Lib in einer Form, dass ld das beim Linken des eigentlichen Programms versteht. So ähnlich wie bei Bootloadern. Erschwerend ist sicher, dass Funktionen aus der newlib die an meine "lib" gelinkt sind eventuell nochmal beim Programm auftauchen. Damit koennte man sicher leben zumal der Flash bei den Cortex M3 bei mir immer reicht. Besser wäre es natürlich das auch nur einmal zu haben.
Beim ARM ist es eigentlich üblich, Code und Bibliothek komplett zu trennen (und nicht zu linken). Die Bibliothek ist ein eigenständiges Projekt mit einer höheren Startadresse im Flash. Beim LPC1769 z.B. ab 256k = 0x40000. Die Bibliothek hat am Anfang die Liste der Einsprungadressen. Damit die Bibliothek nicht versehentlich überschrieben wird, kann sie per MPU protected werden. Der Aufruf der Bibliotheksfunktionen aus dem Code sollte über SWI (Software-Interrupt) erfolgen. Insbesondere wenn die Bibliothek protected ist, kann man ja auch nicht einfach reinspringen.
Mit der ganzen Problematik habe ich mich auch schon etwas befasst und bin zu dem Schluss gekommen das man es dann auch gleich richtig machen kann, bzw. das Prinzip "ausleihen" von: http://www.stm32circle.com/
@pegel Ich will ja kein Betriebssystem bauen. Aber ich weiß jetzt einen Weg. Beschrieben ist es hier: http://netstorage.iar.com/SuppDB/Public/SUPPORT/006578/Protected%20library%20Cortex%20M3_isym.pdf Das dort verwiesene Tool isymexport habe ich mal aus der Eval-Version probiert. Es erzeugt aus einer elf-Datei ein Datei mit den fixen Symbolen. Die kann man dann einfach zur Applikation dazu linken. Danke nochmal für eure Mühen,
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.