coo00l wrote on Monday, December 02, 2019:
Hi,
Can you please help me to handle multiple interrupt routine in the same task.
I’ve a task “Control_task”. I want to handle multiple interrupts such as timer overflow interrupt, pin falling edge interrupt in the same Control_task.
I’ve created like this. I’m facing issue that this approach is not working properly. Can you please help me.
xQueueHandle event_msg_q;
Model::Model() : modelListener(0)
{
event_msg_q = xQueueGenericCreate(10, 3, 0);
}
void Control_task(void *param){
while(1){
vTaskDelay(1);
static uint8_t event_msg;
if(xQueueReceiveFromISR(event_msg_q,&event_msg,0) == pdTRUE){
switch(event_msg){
case falling_edge_int_event:
falling_edge_int_handler();
break;
case timer_ovf_int_event:
timer_ovf_int_handler();
break;
default:
break;
}
}
}
void timer_ovf_int_handler(){
/*Read Button value*/
read_button();
}
void falling_edge_int_handler(){
/*Send SPI data*/
SPI_transmit_data();
}
void INT1_HANDLER(void){
event_msg = falling_edge_int_event;
xQueueSendFromISR(event_msg_q, &event_msg, 0);
}
void INT2_HANDLER(void){
event_msg = timer_ovf_int_event;
xQueueSendFromISR(event_msg_q, &event_msg, 0);
}