Assertion failure in rtems_semaphore_delete using lwIP

Isaac Gutekunst isaac.gutekunst at vecna.com
Wed Dec 16 22:44:47 UTC 2015


I've managed to get the board to crash more quickly this time around.

The priority of all interrupts appears to be 0xD0.

> #define BSP_ARMV7M_IRQ_PRIORITY_DEFAULT (13 << 4)


The board will also crash without any interrupts installed as far as I can tell.

The Lauterbach probe indicates all interrupts are disabled, and yet strange things are happening.


Apologies for the apparent non-sequitur comments with regards to testing. Changing one small 
thing appears to result in slightly different timing making a seemingly arbitrary different 
part of code to fail. Also thanks for all the different advice.

-------------------------------
| New suspect		       |
-------------------------------


I'm starting to suspect SysTick.

A while back I said most of the test cases where passing. I don't think this is actually true.

I thought maybe the SysTick priority is wrong, but at least according to the Lauterbach tool 
all the interrupts are 0xD0. However, I'm not sure if the Exceptions/Traps are listed.

Would it be a problem if the SysTick or SVC handler had a priority that was too high? I really 
doubt that's going on, but I'm grasping at straws here.

Isaac

P.S. Here is the earlier thread: https://lists.rtems.org/pipermail/devel/2015-October/012740.html


> No, this doesn't look good. According to the stack trace you are in
> thread context. However, we have executing != heir and
> dispatch_necessary == true. This is a broken state itself. I guess,
> something is wrong with the interrupt level so that a context switch is
> blocked. On ARMv7-M this is done via the system call exception.





On 12/11/2015 04:35 PM, Sebastian Huber wrote:
>
>
> ----- Am 11. Dez 2015 um 16:58 schrieb Isaac Gutekunst isaac.gutekunst at vecna.com:
>
>> Hi Sebastian,
>>
>> Yes it still is.
>>
>> We've put a data watch point on thread dispatch disable level becoming -1.
>
> Ok, this is good.
>
>>
>> Here is one case where it happens:
>> -000|Thread_queue_Unblock_critical
>> -001|Thread_queue_Extract_critical
>> -002|CORE_message_queue_Dequeue_receiver
>> -003|CORE_message_queue_Submit
>> -004|CORE_message_queue_Send
>> -005|rtems_message_queue_send
>> -006|sys_mbox_post
>> -007|tcpip_apimsg
>> -008|netconn_recved
>> -009|lwip_recvfrom
>> -010|lwip_read
>> -011|http_server_serve
>> -012|http_server_socket_thread
>> -013|Thread_Handler
>> -014|Thread_Handler
>> ---|end of frame
>
> Now, you just have to look at the instruction trace and see what happened between entering rtems_message_queue_send() and the watchpoint.  I guess an interrupt happened and did something wrong.
>
> What is the priority of your stm32f_ethernet_isr() interrupt IPR register field value?
>


More information about the users mailing list