hi, this is the sample code from freertos website
, how do i use portYIEED_FROM_ISR with atmega32, i cant find this macro in the portable code,
or can i just use taskYIELD() macro inside an ISR ?
/* Timer ISR */
void vTimerISR( void * pvParameters )
{
static unsigned portCHAR ucLocalTickCount = 0;
static signed portBASE_TYPE xHigherPriorityTaskWoken;
/* A timer tick has occurred. */
… Do other time functions.
/* Is it time for vATask() to run? */
xHigherPriorityTaskWoken = pdFALSE;
ucLocalTickCount++;
if( ucLocalTickCount >= TICKS_TO_WAIT )
{
/* Unblock the task by releasing the semaphore. */
xSemaphoreGiveFromISR( xSemaphore, &xHigherPriorityTaskWoken );
/* Reset the count so we release the semaphore again in 10 ticks time. */
ucLocalTickCount = 0;
}
/* If xHigherPriorityTaskWoken was set to true you
we should yield. The actual macro used here is
port specific. */
portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
}
portYIELD_FROM_ISR + atmega32
portYIELD_FROM_ISR + atmega32
portYIELD_FROM_ISR() does not exist for the 8 bit AVR – hence you cannot find it. You can use taskYIELD() directly, but only as the last instruction in an interrupt handler.
Take a look at the SIGNAL( SIG_UART_RECV ) function in FreeRTOS/Demo/AVR_ATMega323_WinAVR/serial/serial.c for a GCC example. Alternatively take a look at __interrupt void SIG_UART_RECV( void ) in FreeRTOS/Demo/AVR_ATMega323_IAR/serial/serial.c for an IAR example.
Regards.