printf in interrupt handlers

Jiri Gaisler jiri at gaisler.com
Thu Jan 20 11:09:42 UTC 2005


Simple question: is printf in interrupt handlers allowed?

It is not that I really want to do a printf in an interrupt
handler, but when I tried it, RTEMS halts with
Internal_error_Occurred(). This behaviour started on rtems-4.6,
the earlier rtmes-4.5 could do a printf from an interrupt
handler without problems. I am trying this on the SPARC
(ERC32/LEON) target. The back trace after the error is:

     %pc          %sp
#0   0x40002d7c   0x403ff350   _Internal_error_Occurred + 0x40
#1   0x40007120   0x403ff3b8   rtems_semaphore_obtain + 0x11c
#2   0x400083b4   0x403ff428   rtems_termios_write + 0x18
#3   0x400032a8   0x403ff490   rtems_io_write + 0x4c
#4   0x400113d8   0x403ff4f8   device_write + 0x30
#5   0x4001ba34   0x403ff578   write + 0x90
#6   0x40012d74   0x403ff5e0   fflush + 0x8c
#7   0x40018068   0x403ff648   __sfvwrite + 0x350
#8   0x40014ba0   0x403ff6b0   _vfiprintf_r + 0xe7c
#9   0x400163c8   0x403ff718   _vfprintf_r + 0x16f8
#10  0x40013354   0x403ff9a0   printf + 0x2c
#11  0x4000285c   0x403ffa08   _ISR_Handler + 0x130
#12  0x40001228   0x403f8818   Init + 0x2c
#13  0x400129f0   0x403f8938   _Thread_Handler + 0x110
#14  0x400128d8   0x403f89a0   memfile_check_rmnod + 0x70

A bit debugging shows that rtems_semaphore_obtain() fails for
some reason and Internal_error_Occurred is called. It does not
seem to be a stack problem - I have increased the interrupt stack
to 256 kbyte as a test.

Jiri Gaisler.

-- 
--------------------------------------------------------------------------
Gaisler Research, 1:a Långgatan 19, 413 27 Goteborg, Sweden, +46-317758650
fax: +46-31421407 email: info at gaisler.com, home page: www.gaisler.com
--------------------------------------------------------------------------





More information about the users mailing list