Forum: Compiler & IDEs GCC ARM : Wie Lookup-Table an bestimmte Adresse linken?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von lookup (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bräuchte bitte mal etwas Hilfe zu GCC für ARM.

Ich benutze GCC für ARM und möchte die IAP Funktion nutzen. Dazu
muss ich den Flashbereich so aufteilen, dass der Code der zu IAP gehört
in solche Flashsektoren gelinkt wird, die nicht gelöscht werden.

Das habe ich für Funktionen hinbekommen und es klappt.

Jetzt benötige ich aber ein Lookup-Table auch in diesen Bereich der
nicht gelöscht wird.Da setzt es jetzt aber leider bei mir aus.
Entweder
die Tabelle wird ins RAM gelegt, oder in einen Codebereich
der wieder
gelöscht wird.

Kann mir bitte mal jemand sagen was ich tun muss, damit die
Tabelle in einem bestimmten Adressbereich zum liegen kommt?

Danke sehr.

von M.K. B. (mkbit)


Bewertung
0 lesenswert
nicht lesenswert
Ich hatte ein ähnliches Problem, bei dem bestimmte Puffer zum Austausch 
mit der Hardware in einem bestimmten RAM liegen mussten. Im Prinzip 
müsstest du damit auch in der Lage sein, das ganze in einen Flash zu 
legen.

Im Script, dass du dem Linke mitgibst (.ld) musst werden der Speicher 
und die Sections angelegt. Folgender Code ist nur ein Auszug und zeigt 
die Section "Communication_Buffers", die im DSRAM_2 liegen muss.
1
MEMORY
2
{
3
  DSRAM_2_comm(!RX) : ORIGIN = 0x20000000, LENGTH = 0x6000
4
}
5
6
7
SECTIONS
8
{
9
  /* Place communication buffers in correct ram section */ 
10
  Communication_Buffers : 
11
  {
12
  } > DSRAM_2_comm
13
}

Im Code kannst du dann festlegen, dass bestimmte Daten in dieser Section 
liegen.
1
static uint8_t m_aMemory[DMA_MEMORY_SIZE] __attribute__ ((section ("Communication_Buffers")));

von lookup (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Danke mal für die Hilfe.

Das habe ich aber ja schon für die Funktionen so gemacht und da klappt
es auch. D.h. ich habe mehrere Flash Sektoren (bestimmer Adressbereich)
in denen IAP Funktionen stehen.

Mein Problem ist jetzt dass ich die Tabelle nicht in diesen Bereich
bekomme. Das mit dem
1
__attribute__ ....
 funktioniert bei
Funktionen, aber bei der Tabelle nicht. Irgend was mache ich da wohl
noch falsch.

von Carl D. (jcw2)


Bewertung
0 lesenswert
nicht lesenswert
Kann es sein, daß die Tabelle einfach nicht const ist.
Meiner Erfahrung nach legt der Arm-GCC diese dann sofort .rodata und 
damit in den ROM-Bereich legt. Anders als bei AVR muß man sonst keine 
Tricks anwenden.
Also erst mal schauen, daß sie überhaupt im FLASH landen und dann in die 
richtige Section schieben.

BTW, mit Code müßte man weniger spekulieren.

von lookup (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Zur Info für ähnliche Fälle.

Denke ich habe es hinbekommen. Die Lösung war ein weitere Anweisung im
Linker script. (Zeile *(.iapsectio.LT)). Sie hier:
1
   .iapsection :
2
    {
3
      . = ALIGN(4);
4
      __iapsection_start__ = .;
5
    *(.iapsection.LT)
6
    *(.iapsection*)
7
      __iapsection_end__ = .;
8
    } > IAP

Dann klappt das mit dem attribute unter Verwendung von *(.iapsectio.LT)
bei Definition der Tabelle.
1
__attribute__((section(".iapsection.LT"))) const u_char sector_table[] =
2
      {   0,1,2,3,4,5,6,7, ......

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.