sezioni jolly union nel linker

1

Sto cercando di unire molte funzioni in modo che vengano eseguite tutte nella stessa piccola sezione di ram, ma vengano caricate da altrove.

Ho fatto questo per diverse sezioni esplicitamente con un comando sezioni simile al seguente:

UNION run = RAM
{
    .text:testFunc:testSHA256_Final: {} load = TESTFUNCTIONS
    .text:testFunc:testSHA256_Final2: {} load = TESTFUNCTIONS
}

Ma ciò richiede la modifica del file di comando del linker per includere tutte le funzioni che voglio unire insieme. Mi piacerebbe essere in grado di fare qualcosa di simile:

UNION run = RAM
{
    .text:testFunc: {} load = TESTFUNCTIONS
}

Questo ovviamente posiziona tutte le sezioni di input in una sezione di output in modo che non avvenga alcuna unione.

Ho anche provato

UNION run = RAM
{
    .text:testFunc:*: {} load = TESTFUNCTIONS
}

Ma quello cercò solo la stella letterale e finì per non trovare alcuna sezione. C'è un modo per specificare molte sezioni all'interno di un unione in modo tale che le sezioni finiranno per sovrapporsi nello spazio di esecuzione senza identificarle esplicitamente?

Uso Code Composer Studio per il collegamento a un MSP430, ma tutto sarebbe di aiuto.

    
posta Rick 27.02.2017 - 21:58
fonte

1 risposta

2

Anche se non ho familiarità con la catena di strumenti che stai usando, in passato ho visto un meccanismo che potrebbe essere d'aiuto. Ciò significa identificare il candidato per qualsiasi trattamento speciale con qualsiasi uno di:

  • Una convenzione di denominazione molto specifica
  • Un'annotazione pragma
  • Un'annotazione di commento molto specifica

Ognuno di questi ti consente di generare automaticamente un elenco di candidati per un determinato trattamento speciale, nel tuo caso UNION , utilizzando strumenti come grep e genera le istruzioni del linker da un modello come un passo di pre-collegamento. Molti linguaggi di scripting possono essere usati per produrre questo, ma personalmente userò Python e la maggior parte delle catene di strumenti ti permettono di inserire ulteriori passi di costruzione.

Le cose che vorrei incoraggiare a chiunque di fare durante la personalizzazione del processo di costruzione:

  • Documentalo dove non può essere perso.
  • Cancella errori e amp; interrompere se mancano parti della catena di strumenti.
  • Considera l'utilizzo di un sistema di compilazione come make, cmake, scons, ant, ecc. che può essere invocato dal tuo IDE piuttosto che dai sistemi IDE integrati in quanto sono molto più propensi a sopravvivere agli aggiornamenti dello strumento.
  • Controllo versione corretta.
risposta data 28.02.2017 - 09:23
fonte

Leggi altre domande sui tag