Skrypt linkera: wstaw adres bezwzględny funkcji do wygenerowanego kodu

Mam pytanie związane z linkerem gcc.

Pracuję z wbudowanymi elementami (PIC32), ale kompilator i linker PIC32 są oparte na gcc, więc główne rzeczy powinny być wspólne dla „zwykłego” linkera gcc i linkera PIC32.

Aby zaoszczędzić miejsce w pamięci flash (co często jest niewystarczające na mikrokontrolerach), muszę umieścić kilka dużych funkcji w bootloaderze, a aplikacja powinna wywoływać te funkcje tylko za pomocą wskaźników.

Muszę więc utworzyć tabelę wektorów w wygenerowanym kodzie.

Próbuję uzyskać adres bezwzględny funkcji i zapisać go w wygenerowanym kodzie, ale nadal otrzymuję błędy.

W poniższym przykładzie próbuję uzyskać adres funkcji_formatted_write.

Kod:

.user_addr_table _USER_ADDR_TABLE_ADDR :
{
   KEEP(*(.user_addr_table))
   LONG((ABSOLUTE(_formatted_write))); /* _formatted_write is a name of my function */
} > user_addr_table

Linker zwraca błąd: „unresolvable symbol '_formatted_write' referenced in expression

Zauważyłem, że jeśli piszę śmieci zamiast_formatted_write, następnie zwraca błąd ”undefined symbol .....", więc,_formatted_write jest znany przez linker.

To sprawia, że ​​myślę, że powinienem wykonać kilka dodatkowych kroków, aby uczynić go „rozwiązywalnym”. Ale nadal nie mam pojęcia, jak to zrobić.

questionAnswers(2)

yourAnswerToTheQuestion