Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem


Loading

Pending Interrupt Causes Crash

Posted by mkrug on August 24, 2007
Hello,

I did a small port to the HC12 (that has only minor differences to the existing HCS12 Port).
My application communicates on the CAN Bus. As long as the CAN load can be handled everything works fine. If I increase the CAN load so that I got an overrun interrupt pending while I am still processing the receive interrupt the application crashes. If I just disable the overrun interrupt everything is fine again. However I like to get notice if an overrun occurs by increasing an counter within the overrun ISR. I copied fragments of the two ISR to make it more clear what I programmed.
Does anyone has an idea what I did wrong ?

Best Regards
Markus

/* receive ISR */
ISR(CAN0_recv_ISR)
{
static unsigned char xYieldRequired = pdFALSE;
C0RFLG = C0RFLG | 0x01; /* Reset receive flags */
switch (IDHIT)
{
case 0x00:
{
/* CAN ID 0x100 was received */
xYieldRequired = xTaskResumeFromISR(CAN_ID100_TASK_handle);
break;
}
default:
break;
}
if( xYieldRequired == pdTRUE )
portTASK_SWITCH_FROM_ISR();
}

/* overrun ISR */
ISR(CAN0_error_ISR)
{
static int counter = 0;
C0RFLG = C0RFLG | 0x02; /* reset overun flags*/
counter ++
}


RE: Pending Interrupt Causes Crash

Posted by Dave on August 26, 2007
Don't know about the HC12, but you CAN0_recv_ISR could probably benefit from using a binary semaphore in place of the xTaskResumeFromISR() call. Here is an extract from the xTaskResumeFromISR() documentation.

"vTaskResumeFromISR() should not be used to synchronise a task with an interrupt if there is a chance that the interrupt could arrive prior to the task being suspended - as this can lead to interrupts being missed. Use of a semaphore as a synchronisation mechanism would avoid this eventuality"

Look at the example on http://www.freertos.org/a00124.html and notice that the semaphore is only taken in the task and only given in the interrupt. This is the recommended method.

RE: Pending Interrupt Causes Crash

Posted by mkrug on August 27, 2007
I changed the mechanism to semaphore (as you described). My proplem disappeared !!! Does anyone know what will happen if a running task gets interrupted by an interrupt service routine that starts exactly this task again. Do I then have two instances of the same task ? Or is the interrupted task just canceled and thrown away ?
Best Regards
Markus


[ Back to the top ]    [ About FreeRTOS ]    [ Privacy ]    [ Sitemap ]    [ ]


Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.

Latest News

NXP tweet showing LPC5500 (ARMv8-M Cortex-M33) running FreeRTOS.

Meet Richard Barry and learn about running FreeRTOS on RISC-V at FOSDEM 2019

Version 10.1.1 of the FreeRTOS kernel is available for immediate download. MIT licensed.

View a recording of the "OTA Update Security and Reliability" webinar, presented by TI and AWS.


Careers

FreeRTOS and other embedded software careers at AWS.



FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

Espressif ESP32

IAR Partner

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

Renesas

STMicro RTOS partner supporting ARM7, ARM Cortex-M3, ARM Cortex-M4 and ARM Cortex-M0

Texas Instruments MCU Developer Network RTOS partner for ARM and MSP430 microcontrollers

OpenRTOS and SafeRTOS

Xilinx Microblaze and Zynq partner