Libs im ROM CortexM

Gast #2934372
Lesenswert?
• ▲
▼
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.
Gast #2934450
Lesenswert?
• ▲
▼
@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.
Gast #2934512
Lesenswert?
• ▲
▼
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.
Gast #2934903
Lesenswert?
• ▲
▼
@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,

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.