Hello,
I wonder if the following two problems are bugs.
1. In u_semaphore.cpp, function wakeup_locked, (around line 189):
w->state_change_dirty(~Thread_ipc_mask, Thread_ready);
If thread w is running on a different core than thread c, assertion in
function state_change_dirty will fail.
I think it should be
w->state_change_dirty(~Thread_ipc_mask, Thread_ready, false);
2. In u_semaphore.cpp, function block_locked, (around line 146):
c->state_del_dirty(~Thread_ipc_mask)
should be
c->state_del_dirty(Thread_ipc_mask).
Otherwise, wrong bits will be cleared, which cause the assertion in
assert_irq_entry() to fail.
Best,
Chen