Hallo zusammen,

ich glaube, dass sich da noch ein Fehler eingeschlichen hat. Die SerWrite()-Funktion benötigt einen Pointer auf Daten. Aber hier werden 'Netto'-Bytes, also ohne Pointer, (z.B. das '-') an die Funktion übergeben.
Ersetzt mit UartPutc() und dann geht es bei mir perfekt.

Übrig bleiben ganze 56 Byte bei Optimizereinstellung -Os (size)

Code:
#include <asuro.h>

void PrintChar (int x)
{
   int b = 0;

   if (x < 0)
   {
      UartPutc ('-');
      x = -x;
   }
   if (x >= 10)
   {
      while (x >= 10)
      {
         b++;
         x -= 10;
      }
      PrintChar (b);
   }
   UartPutc (x + '0');
}
   
   
int main (void)
{   
   Init ();

   while (1)
   { 
      PrintInt (-9854);
      PrintChar (-26978);
   }   
   return 0;
}
Gruß Sternthaler.
P.S.: Na izaseba, jetzt kommt der Sport