Thanks for your response, I appreciate it. I'll post the entirety of the interrupt handling code as an attachment to this message.
I've also done further debugging and found some potentially useful information: I can force this issue by calling
xTaskGetTickCountFromISR() from the ISR! Strangely, the non-FromISR version doesn't cause this issue usually...? (Note: This isn't the only thing that causes this strange issue. It's just a way that I can reliably recreate it)
I've demonstrated this in my code with the following line:
PRINTF("Ticks: %d\r\n", xTaskGetTickCountFromISR()); // This BREAKS it!
I'll experiment with clearing the interrupt flag immediately after the interrupt routine begins, and post my results accordingly.
Attached to first post (since I don't see an option to attach here)
full_interrupt_code.zip, contains:
GPIO.c -> Handles setting up interrupts. When an interrupt occurs, it calls a handler function found in switch_controller.c
switch_controller.c -> Detects which button is pressed/released and prints it out.
Thanks for your help!