Controller

      Printf() für ARM - Anfänger


Home ARM-Projekt Startupcode Bootloader myprintf() JTAG debugging Funksteck- dosen


  Printf() - debugging


Wenn man es geschafft hat, den GCC-Compiler zu installieren, das Makefile anzupassen, und ein Downloadtool (z.B. den Stm32Prog ) zu aktivieren, dann ist gleich das nächste Problem: Wie binde ich printf() ein? Leider ist das printf() der aktuellen GCC-newlib gar nicht so leicht einzubinden. Außerdem ist das aktuelle GCC printf() mittlerweile schon 30kByte groß!
Wenn man den umfangreichen Sample-Code von STM herunterläd, dann verkompliziert er das Thema zunächst mehr als er hilft.
Lediglich ein Header file stm32f10x.h aus der STM-Standardlibrary wird für das folgende File wirklich benötigt.
Diese Variante ohne Buffer ist für's Debuggen am besten geeignet.

  Small Printf_()

  • unterstützt fast alle üblichen Optionen von printf()
  • unterstützt: %s, %c, %d, %ld %ul %02d %i %x  %lud  und %%
  • teilweise unterstützt: long long, float (%ll, %f, %F, %2.2f)
  • nicht unterstützt: double und exponent (%e %g %p %o %h \t)
  • verbraucht nur ~1kbyte FLASH   (mit floating point: 3kbyte Flash )
  • leicht lassen sich neue printf-Derivate erzeugen (z.B. für das LCD)
  • leicht auf andere Controller (auch 8-Bitter) portierbar

  Download:
  • ohne Buffer, ohne Interrupt:   printf.c Printf.zip
  • mit Buffer und Interrupt:   bitte fragen

  Links:
Um doch lieber das GCC-printf() lauffähig zu machen, benötigt man eine Datei syscalls.c. Sachdienliche Hinweise gibt es hier:

[1] Michael Fischer: syscalls.c