ticker hangs on bf537Stamp

Sebastian Huber sebastian.huber at embedded-brains.de
Tue Oct 15 13:01:49 UTC 2013

On 2013-10-15 14:44, Kolja Waschk wrote:
>> You can set a break point to _Thread_Delay_ended().
> Ok, thanks, that's a good starting point.
> After the first hit, it runs into _Scheduler_priority_Unblock which sets
> "_Thread_Dispatch_necessary" = true.

This is fine.

> The code following label doDispatch in cpu_asm.S shortly afterwards zeros the
> flag (revealed by a HW watch on the DISPATCH_NEEDED location).

Is this the following code (from cpu_asm.S):

	/* do thread dispatch if necessary */
	r0 = B[p0] (Z);
	cc = r0 == 0;
	if cc jump noDispatch
	r0 = 0;
	B[p0] = r0; <-- here _Thread_Dispatch_necessary is set to zero?
	raise 15;

This code was introduced with:

2008-08-13     Allan Hessenflow <allanh at kallisti.com>

        * cpu.c, cpu_asm.S, irq.c, rtems/score/cpu.h,
        rtems/score/cpu_asm.h: reworked interrupt handling to fix
        context switching.

I really wonder if this ever worked.  The exception epilogue must not write to 

For a start you can remove the lines "r0 = 0;" and "B[p0] = r0;".

There is a comment in this file:

/* the approach here is for the main interrupt handler, when a dispatch is
    wanted, to do a "raise 15".  when the main interrupt handler does its
    "rti", the "raise 15" takes effect and we end up here.  we can now
    safely call _Thread_Dispatch, and do an "rti" to get back to the
    original interrupted function.  this does require self-nesting to be
    enabled; the maximum nest depth is the number of tasks. */
	.global SYM(_ISR15_Handler)

A maximum nest depth limited by the number of tasks is questionable.

Sebastian Huber, embedded brains GmbH

Address : Dornierstr. 4, D-82178 Puchheim, Germany
Phone   : +49 89 189 47 41-16
Fax     : +49 89 189 47 41-09
E-Mail  : sebastian.huber at embedded-brains.de
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.

More information about the users mailing list