Dein usart_put_int erwartet ein 16bit Integer... Versuch mal, das a vorher in diesen zu casten. Das Problem könnte daran liegen, dass der Compiler optimiert und das a++ gleich in die Klammer packt. Vielleicht denkt er, a sei eine 16bit Variable, weil dort ja eine 16bit Variable erwartet wird und behandelt sie auch so.
Ein Cast sollte das Problem beheben. Wenn nicht, schalte mal den Optimizer aus und guck, ob es dann geht.
Und wenn das alles nicht geht, dann schreib eine Funktion usart_put_int8, die ein int8_t erwartet.

Wenn das alles nicht funktioniert, kannst du erstmal dein Compiler updaten.

Und wenn das alles nicht ging, dann hilft nur noch ein ordentlicher Schluck Bier...
Und dann gucken wir weiter =)

Gruß, Yaro