2017-05-19 4 views
1

Je suis en train de porter une base de code vers un nouvel environnement de construction et je rencontre ce problème au moment de la liaison.Erreur de lieur ARM: Heap a été utilisé, mais aucune zone de tas n'a été définie

Error: L6915E: Library reports error: Heap was used, but no heap region was defined 

La cible est un Cortex R5 32 bits. Ne pas utiliser malloc ou libre n'importe où dans la base de code. Dans le passé, lors d'un port d'environnement de construction similaire, j'avais rencontré ce problème en utilisant microlib. Pas de chance cette fois-ci.

EDIT: Il s'avère que j'aurais pu résoudre le problème en utilisant simplement microlib à la compilation. Je pensais avoir essayé quand j'avais posé la question, mais je ne l'ai pas fait.

+0

Veuillez fournir un [mcve], au moins V pour ceux qui ont la même chaîne d'outils, compilable pour les autres. – Yunnosch

+0

Il se peut qu'il y ait une possibilité que le 'startup.s' dans la création et l'initialisation d'une mémoire de tas, mais le script de l'éditeur de liens n'a pas de section de tas définie dans elle. – Gaurav

Répondre

0

Résolution du problème en redirigeant le ciblage fputc et en redéfinissant __stdout et __stdin. L'implémentation de la bibliothèque ARM C de fputc() semble avoir utilisé malloc(), donc après avoir reciblé fputc pour utiliser mon pilote UART, il n'y avait pas de fonctions d'accès au tas dans mon code.

struct __FILE { int handle; /* Add whatever you need here */}; 
FILE __stdout; 
FILE __stdin; 


int fputc(int ch, FILE *f) 
{ 
}