serv
serv copied to clipboard
`wfi` instruction unsupported / broken
Zephyr 3.6.0 introduces the use of wfi when waiting for interrupts (5fb6e267f629dedb8382da6bcad8018b1bb8930a). Executing this instructions breaks things for us.
How to reproduce?
Run the following example program (based on hello_world) on Zephyr >= 3.6.0:
#include <stdio.h>
#include <zephyr/kernel.h>
int main(void)
{
int i=0;
while (1) {
printf("Hello World! %s %d\n", CONFIG_BOARD_TARGET, i++);
k_msleep(1000);
}
return 0;
}
Observed behavior
Hello World is printed once, then the application locks up. Not even the interrupt handler in the timer driver is ever called again.
Expected behavior
Hello Word is printed every 1 second.
Ok, that's not good. It's a bit surprising that they didn't make WFI support optional in Zephyr. Either way, I think that we should short-term fix SERV to treat WFI as a nop and long term add proper support since it's a highly useful instruction for the kind of deeply embedded use cases that SERV intends to serve.