Ich muß vorausschicken, daß ich von FreeRTOS nur sehr rudimentäre
Vorstellungen habe.
Dein Problem ist kein gcc-Problem, sondern ein Problem der verwendeten
C-Library (was immer Du da hast, newlib?).
Völlig unabhängig davon: FILE umdefinieren zu wollen, ist
höchstwahrscheinlich alles mögliche, bloß keine gute Idee (zumindest,
wenn das I/O-Subsystem so funktioniert, wie ich mir das vorstelle).
Die Entwickler haben sich alle Mühe gegeben, FILE als opaque Struktur zu
definieren, so daß sie "dahinter" treiben können, was sie wollen.
Sprich: wie's da drin aussieht, geht dich nix an. Daran fummeln zu
wollen, führt nur zu Problemen.
Wenn Du deiner C-Library einen neuen Gerätetyp unterjubeln willst (so
habe ich deine Frage zumindest verstanden), solltest Du das eine Ebene
"unter" stdio tun. Newlib beispielsweise stellt dazu als einheitliche
Schnittstelle den devoptab_t Strukturtyp zur Verfügung, mit dem man der
Library "I/O-Treiber" zur Verfügung stellen kann. Welche der Strukturen
dann stdin, stdout und stderr bedient, wird dann der Library in einer
struct __reent-Variable mitgeteilt, damit können unterschiedliche Tasks
dann sogar unterschiedliche I/O-Treiber für die Standardkanäle benutzen.