mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-12-09 21:25:15 -05:00
Remove coroutines (#874)
* Remove co-routine centric CORTEX_LM3S102_Rowley demos. Remove CORTEX_LM3S102_Rowley Demo2 and Demo3. Update Demo1 to no longer use coroutines. * Remove co-routines from MB91460_Softune demo * FreeRTOS_96348hs_SK16FX100PMC: Remove co-routine usage. Remove co-routine usage from FreeRTOS_96348hs_SK16FX100PMC demo. * MB96350_Softune_Dice_Kit: Remove co-routine usage Remove co-routines usage from MB96350_Softune_Dice_Kit demo * AVR_Dx_IAR: Remove co-routine usage * AVR_Dx_Atmel_Studio: Remove co-routine usage * PIC24_MPLAB: Remove autogenerated files and add to .gitignore * PIC24_MPLAB: Remove co-routine usage from demo * AVR_ATMega323_IAR: Remove co-routine usage * ColdFire_MCF52221_CodeWarrior: Remove coroutine usage * AVR_ATMega4809_MPLAB.X: Remove co-routine usage * AVR_ATMega4809_IAR: Remove co-routine usage * AVR_ATMega4809_Atmel_Studio: Remove coroutine usage * AVR_ATMega323_WinAVR: Remove coroutine usage * AVR_Dx_MPLAB.X: Remove coroutine usage * dsPIC_MPLAB: Remove coroutine usage * CORTEX_LM3S102_GCC: Remove coroutines and coroutine centric demos * CORTEX_LM3S102_GCC: Update makefile to discard unused symbols Allows fitting in the limited ram/flash for this part. * CORTEX_LM3S316_IAR: Remove coroutines * Demos: Remove references to crflash.c, crhook.c, crflash.h, crhook.h * Remove coroutine options from FreeRTOSConfig.h files * Xilinx: Remove backup file generated by revup utility * Demos: Remove Coroutine related config items and references * Format CBMC FreeRTOSConfig.h * Update URL from aws.amazon.com/freertos to github.com/FreeRTOS * Fix copyright year and license text * Fix license text in demo files * Update header check excluded path list * Add configBENCHMARK to lexicon
This commit is contained in:
parent
eb7fd55a49
commit
569c78fd8c
1153 changed files with 4875 additions and 12450 deletions
|
|
@ -20,7 +20,7 @@
|
|||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* https://www.FreeRTOS.org
|
||||
* https://aws.amazon.com/freertos
|
||||
* https://github.com/FreeRTOS
|
||||
*
|
||||
*/
|
||||
|
||||
|
|
@ -75,9 +75,6 @@
|
|||
#define configMINIMAL_STACK_SIZE ( ( unsigned short ) 120 )
|
||||
#endif
|
||||
|
||||
/* Co-routine definitions. */
|
||||
#define configUSE_CO_ROUTINES 0
|
||||
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
|
||||
|
||||
/* Software timer definitions. */
|
||||
#define configUSE_TIMERS 1
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* https://www.FreeRTOS.org
|
||||
* https://aws.amazon.com/freertos
|
||||
* https://github.com/FreeRTOS
|
||||
*
|
||||
*/
|
||||
|
||||
|
|
@ -56,10 +56,10 @@ void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )
|
|||
{
|
||||
case 0: LED_PORT_OUT |= LED_1;
|
||||
break;
|
||||
|
||||
|
||||
case 1: LED_PORT_OUT |= LED_2;
|
||||
break;
|
||||
|
||||
|
||||
default: /* Nothing to do here, there are only two LEDs. */
|
||||
break;
|
||||
}
|
||||
|
|
@ -70,7 +70,7 @@ void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )
|
|||
{
|
||||
case 0: LED_PORT_OUT &= ~LED_1;
|
||||
break;
|
||||
|
||||
|
||||
case 1: LED_PORT_OUT &= ~LED_2;
|
||||
break;
|
||||
default: /* Nothing to do here, there are only two LEDs. */
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
; * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
; *
|
||||
; * https://www.FreeRTOS.org
|
||||
; * https://aws.amazon.com/freertos
|
||||
; * https://github.com/FreeRTOS
|
||||
; *
|
||||
; * 1 tab == 4 spaces!
|
||||
; */
|
||||
|
|
@ -43,12 +43,12 @@
|
|||
.global usRegTest1Counter
|
||||
.global usRegTest2Counter
|
||||
.global vPortYield
|
||||
|
||||
|
||||
.def vRegTest1Task
|
||||
.def vRegTest2Task
|
||||
|
||||
.text
|
||||
|
||||
|
||||
.align 2
|
||||
vRegTest1Task: .asmfunc
|
||||
|
||||
|
|
@ -65,7 +65,7 @@ vRegTest1Task: .asmfunc
|
|||
mov_x #0xdddd, r13
|
||||
mov_x #0xeeee, r14
|
||||
mov_x #0xffff, r15
|
||||
|
||||
|
||||
prvRegTest1Loop:
|
||||
|
||||
; Test each general purpose register to check that it still contains the
|
||||
|
|
@ -95,19 +95,19 @@ prvRegTest1Loop:
|
|||
jne vRegTest1Error
|
||||
cmp_x #0xffff, r15
|
||||
jne vRegTest1Error
|
||||
|
||||
|
||||
; This task is still running without jumping to vRegTest1Error, so increment
|
||||
; the loop counter so the check task knows the task is running error free.
|
||||
inc_x &usRegTest1Counter
|
||||
|
||||
|
||||
; Loop again, performing the same tests.
|
||||
jmp prvRegTest1Loop
|
||||
nop
|
||||
|
||||
|
||||
vRegTest1Error:
|
||||
jmp vRegTest1Error
|
||||
nop
|
||||
.endasmfunc
|
||||
.endasmfunc
|
||||
; -----------------------------------------------------------
|
||||
|
||||
; See the comments in vRegTest1Task. This task is the same, it just uses
|
||||
|
|
@ -127,7 +127,7 @@ vRegTest2Task: .asmfunc
|
|||
mov_x #0xddd1, r13
|
||||
mov_x #0xeee1, r14
|
||||
mov_x #0xfff1, r15
|
||||
|
||||
|
||||
prvRegTest2Loop:
|
||||
|
||||
cmp_x #0x4441, r4
|
||||
|
|
@ -154,21 +154,21 @@ prvRegTest2Loop:
|
|||
jne vRegTest2Error
|
||||
cmp_x #0xfff1, r15
|
||||
jne vRegTest2Error
|
||||
|
||||
|
||||
; Also perform a manual yield, just to increase the scope of the test.
|
||||
call_x #vPortYield
|
||||
|
||||
|
||||
inc_x &usRegTest2Counter
|
||||
jmp prvRegTest2Loop
|
||||
nop
|
||||
|
||||
|
||||
|
||||
vRegTest2Error:
|
||||
jmp vRegTest2Error
|
||||
nop
|
||||
.endasmfunc
|
||||
; /*-----------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
.end
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* https://www.FreeRTOS.org
|
||||
* https://aws.amazon.com/freertos
|
||||
* https://github.com/FreeRTOS
|
||||
*
|
||||
*/
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* https://www.FreeRTOS.org
|
||||
* https://aws.amazon.com/freertos
|
||||
* https://github.com/FreeRTOS
|
||||
*
|
||||
*/
|
||||
|
||||
|
|
@ -58,9 +58,9 @@
|
|||
* the poll rate to ensure debouncing is not necessary and that the task does
|
||||
* not use all the available CPU processing time.
|
||||
*
|
||||
* Button Interrupt - The select button on the joystick input device is
|
||||
* configured to generate an external interrupt. The handler for this interrupt
|
||||
* sends a message to LCD task, which then prints out a string to say the
|
||||
* Button Interrupt - The select button on the joystick input device is
|
||||
* configured to generate an external interrupt. The handler for this interrupt
|
||||
* sends a message to LCD task, which then prints out a string to say the
|
||||
* joystick select button was pressed.
|
||||
*
|
||||
* Idle Hook - The idle hook is a function that is called on each iteration of
|
||||
|
|
@ -71,10 +71,10 @@
|
|||
* driven tasks, and slowing the tick interrupt frequency, etc.
|
||||
*
|
||||
* "Check" callback function - Called each time the 'check' timer expires. The
|
||||
* check timer executes every five seconds. Its main function is to check that
|
||||
* all the standard demo tasks are still operational. Each time it executes it
|
||||
* sends a status code to the LCD task. The LCD task interprets the code and
|
||||
* displays an appropriate message - which will be PASS if no tasks have
|
||||
* check timer executes every five seconds. Its main function is to check that
|
||||
* all the standard demo tasks are still operational. Each time it executes it
|
||||
* sends a status code to the LCD task. The LCD task interprets the code and
|
||||
* displays an appropriate message - which will be PASS if no tasks have
|
||||
* reported any errors, or a message stating which task has reported an error.
|
||||
*
|
||||
* "Reg test" tasks - These fill the registers with known values, then check
|
||||
|
|
@ -84,11 +84,11 @@
|
|||
* test loop. A register containing an unexpected value is indicative of an
|
||||
* error in the context switching mechanism and will result in a branch to a
|
||||
* null loop - which in turn will prevent the check variable from incrementing
|
||||
* any further and allow the check timer callback (described a above) to
|
||||
* determine that an error has occurred. The nature of the reg test tasks
|
||||
* any further and allow the check timer callback (described a above) to
|
||||
* determine that an error has occurred. The nature of the reg test tasks
|
||||
* necessitates that they are written in assembly code.
|
||||
*
|
||||
* Tick hook function - called inside the RTOS tick function, this simple
|
||||
* Tick hook function - called inside the RTOS tick function, this simple
|
||||
* example does nothing but toggle an LED.
|
||||
*
|
||||
* *NOTE 1* vApplicationSetupTimerInterrupt() is called by the kernel to let
|
||||
|
|
@ -246,7 +246,7 @@ void main( void )
|
|||
vStartDynamicPriorityTasks();
|
||||
vStartGenericQueueTasks( mainGENERIC_QUEUE_TEST_PRIORITY );
|
||||
vStartCountingSemaphoreTasks();
|
||||
|
||||
|
||||
/* Note that creating the timer test/demo tasks will fill the timer
|
||||
command queue. This is intentional, and forms part of the test the tasks
|
||||
perform. It does mean however that, after this function is called, no
|
||||
|
|
@ -254,7 +254,7 @@ void main( void )
|
|||
started (at which point the timer daemon will drained the timer command
|
||||
queue, freeing up space for more commands to be received). */
|
||||
vStartTimerDemoTask( mainTIMER_TEST_PERIOD );
|
||||
|
||||
|
||||
/* Create the LCD, button poll and register test tasks, as described at
|
||||
the top of this file. */
|
||||
xTaskCreate( prvLCDTask, "LCD", configMINIMAL_STACK_SIZE * 2, mainTASK_PARAMETER_CHECK_VALUE, mainLCD_TASK_PRIORITY, NULL );
|
||||
|
|
@ -264,10 +264,10 @@ void main( void )
|
|||
|
||||
/* Create the 'check' timer - the timer that periodically calls the
|
||||
check function as described at the top of this file. Note that, for
|
||||
the reasons stated in the comments above the call to
|
||||
vStartTimerDemoTask(), that the check timer is not actually started
|
||||
the reasons stated in the comments above the call to
|
||||
vStartTimerDemoTask(), that the check timer is not actually started
|
||||
until after the scheduler has been started. */
|
||||
xCheckTimer = xTimerCreate( "Check timer", mainCHECK_TIMER_PERIOD, pdTRUE, ( void * ) 0, vCheckTimerCallback );
|
||||
xCheckTimer = xTimerCreate( "Check timer", mainCHECK_TIMER_PERIOD, pdTRUE, ( void * ) 0, vCheckTimerCallback );
|
||||
|
||||
/* Start the scheduler. */
|
||||
vTaskStartScheduler();
|
||||
|
|
@ -276,7 +276,7 @@ void main( void )
|
|||
/* If all is well then this line will never be reached. If it is reached
|
||||
then it is likely that there was insufficient (FreeRTOS) heap memory space
|
||||
to create the idle task. This may have been trapped by the malloc() failed
|
||||
hook function, if one is configured. */
|
||||
hook function, if one is configured. */
|
||||
for( ;; );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
|
@ -301,7 +301,7 @@ unsigned char ucLine = 1;
|
|||
}
|
||||
|
||||
/* This is the only function that is permitted to access the LCD.
|
||||
|
||||
|
||||
First print out the number of bytes that remain in the FreeRTOS heap. This
|
||||
is done after a short delay to ensure all the demo tasks have created all
|
||||
the objects they are going to use. */
|
||||
|
|
@ -309,13 +309,13 @@ unsigned char ucLine = 1;
|
|||
sprintf( cBuffer, "%d heap free", ( int ) xPortGetFreeHeapSize() );
|
||||
halLcdPrintLine( cBuffer, ucLine, OVERWRITE_TEXT );
|
||||
ucLine++;
|
||||
|
||||
|
||||
/* Just as a test of the port, and for no functional reason, check the task
|
||||
parameter contains its expected value. */
|
||||
if( pvParameters != mainTASK_PARAMETER_CHECK_VALUE )
|
||||
{
|
||||
halLcdPrintLine( "Invalid parameter", ucLine, OVERWRITE_TEXT );
|
||||
ucLine++;
|
||||
ucLine++;
|
||||
}
|
||||
|
||||
for( ;; )
|
||||
|
|
@ -333,7 +333,7 @@ unsigned char ucLine = 1;
|
|||
halLcdClearScreen();
|
||||
ucLine = 0;
|
||||
}
|
||||
|
||||
|
||||
/* What is this message? What does it contain? */
|
||||
switch( xReceivedMessage.cMessageID )
|
||||
{
|
||||
|
|
@ -347,15 +347,15 @@ unsigned char ucLine = 1;
|
|||
case mainMESSAGE_BUTTON_SEL : /* The select button interrupt
|
||||
just informed this task that the
|
||||
select button has been pressed.
|
||||
In this case the pointer to the
|
||||
string to print is sent directly
|
||||
in the ulMessageValue member of
|
||||
the message. This just
|
||||
demonstrates a different
|
||||
In this case the pointer to the
|
||||
string to print is sent directly
|
||||
in the ulMessageValue member of
|
||||
the message. This just
|
||||
demonstrates a different
|
||||
communication technique. */
|
||||
sprintf( cBuffer, "%s", ( char * ) xReceivedMessage.ulMessageValue );
|
||||
break;
|
||||
|
||||
|
||||
case mainMESSAGE_STATUS : /* The tick interrupt hook
|
||||
function has just informed this
|
||||
task of the system status.
|
||||
|
|
@ -363,11 +363,11 @@ unsigned char ucLine = 1;
|
|||
with the status value. */
|
||||
prvGenerateStatusMessage( cBuffer, xReceivedMessage.ulMessageValue );
|
||||
break;
|
||||
|
||||
|
||||
default : sprintf( cBuffer, "Unknown message" );
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/* Output the message that was placed into the cBuffer array within the
|
||||
switch statement above, then move onto the next line ready for the next
|
||||
message to arrive on the queue. */
|
||||
|
|
@ -414,13 +414,13 @@ xQueueMessage xMessage;
|
|||
{
|
||||
/* Check the button state. */
|
||||
ucState = ( halButtonsPressed() & BUTTON_UP );
|
||||
|
||||
|
||||
if( ucState != 0 )
|
||||
{
|
||||
/* The button was pressed. */
|
||||
ucState = pdTRUE;
|
||||
}
|
||||
|
||||
|
||||
if( ucState != ucLastState )
|
||||
{
|
||||
/* The state has changed, send a message to the LCD task. */
|
||||
|
|
@ -429,7 +429,7 @@ xQueueMessage xMessage;
|
|||
ucLastState = ucState;
|
||||
xQueueSend( xLCDQueue, &xMessage, portMAX_DELAY );
|
||||
}
|
||||
|
||||
|
||||
/* Block for 10 milliseconds so this task does not utilise all the CPU
|
||||
time and debouncing of the button is not necessary. */
|
||||
vTaskDelay( 10 / portTICK_PERIOD_MS );
|
||||
|
|
@ -450,7 +450,7 @@ static xQueueMessage xStatusMessage = { mainMESSAGE_STATUS, pdPASS };
|
|||
|
||||
/* The parameter is not used. */
|
||||
( void ) xTimer;
|
||||
|
||||
|
||||
/* See if the standard demo tasks are executing as expected, changing
|
||||
the message that is sent to the LCD task from PASS to an error code if
|
||||
any tasks set reports an error. */
|
||||
|
|
@ -463,17 +463,17 @@ static xQueueMessage xStatusMessage = { mainMESSAGE_STATUS, pdPASS };
|
|||
{
|
||||
xStatusMessage.ulMessageValue = mainERROR_DYNAMIC_TASKS;
|
||||
}
|
||||
|
||||
|
||||
if( xAreGenericQueueTasksStillRunning() != pdPASS )
|
||||
{
|
||||
xStatusMessage.ulMessageValue = mainERROR_GEN_QUEUE_TEST;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if( xAreCountingSemaphoreTasksStillRunning() != pdPASS )
|
||||
{
|
||||
xStatusMessage.ulMessageValue = mainERROR_COUNT_SEM_TEST;
|
||||
}
|
||||
|
||||
|
||||
if( xAreTimerDemoTasksStillRunning( ( TickType_t ) mainCHECK_TIMER_PERIOD ) != pdPASS )
|
||||
{
|
||||
xStatusMessage.ulMessageValue = mainERROR_TIMER_TEST;
|
||||
|
|
@ -493,7 +493,7 @@ static xQueueMessage xStatusMessage = { mainMESSAGE_STATUS, pdPASS };
|
|||
|
||||
usLastRegTest1Counter = usRegTest1Counter;
|
||||
usLastRegTest2Counter = usRegTest2Counter;
|
||||
|
||||
|
||||
/* This is called from a timer callback so must not block! */
|
||||
xQueueSendToBack( xLCDQueue, &xStatusMessage, mainDONT_BLOCK );
|
||||
}
|
||||
|
|
@ -502,10 +502,10 @@ static xQueueMessage xStatusMessage = { mainMESSAGE_STATUS, pdPASS };
|
|||
static void prvSetupHardware( void )
|
||||
{
|
||||
taskDISABLE_INTERRUPTS();
|
||||
|
||||
|
||||
/* Disable the watchdog. */
|
||||
WDTCTL = WDTPW + WDTHOLD;
|
||||
|
||||
|
||||
halBoardInit();
|
||||
|
||||
LFXT_Start( XT1DRIVE_0 );
|
||||
|
|
@ -523,7 +523,7 @@ static void prvSetupHardware( void )
|
|||
halLcdInit();
|
||||
halLcdSetContrast( 100 );
|
||||
halLcdClearScreen();
|
||||
|
||||
|
||||
halLcdPrintLine( " www.FreeRTOS.org", 0, OVERWRITE_TEXT );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
|
@ -565,7 +565,7 @@ portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
|
|||
xQueueSendFromISR( xLCDQueue, &xMessage, &xHigherPriorityTaskWoken );
|
||||
|
||||
P2IFG = 0;
|
||||
|
||||
|
||||
/* If writing to xLCDQueue caused a task to unblock, and the unblocked task
|
||||
has a priority equal to or above the task that this interrupt interrupted,
|
||||
then lHigherPriorityTaskWoken will have been set to pdTRUE internally within
|
||||
|
|
@ -631,7 +631,7 @@ void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName )
|
|||
{
|
||||
( void ) pxTask;
|
||||
( void ) pcTaskName;
|
||||
|
||||
|
||||
/* Run time stack overflow checking is performed if
|
||||
configconfigCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook
|
||||
function is called if a stack overflow is detected. */
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@
|
|||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* https://www.FreeRTOS.org
|
||||
* https://aws.amazon.com/freertos
|
||||
* https://github.com/FreeRTOS
|
||||
*
|
||||
*/
|
||||
|
||||
|
|
@ -28,7 +28,7 @@
|
|||
/* BASIC INTERRUPT DRIVEN SERIAL PORT DRIVER.
|
||||
*
|
||||
* This is not a proper UART driver. It only supports one port, uses loopback
|
||||
* mode, and is used to test interrupts that use the FreeRTOS API as part of
|
||||
* mode, and is used to test interrupts that use the FreeRTOS API as part of
|
||||
* a wider test suite. Nor is it intended to show an efficient implementation
|
||||
* of a UART interrupt service routine as queues are used to pass individual
|
||||
* characters one at a time!
|
||||
|
|
@ -76,7 +76,7 @@ unsigned long ulBaudRateCount;
|
|||
|
||||
/* Use SMCLK. */
|
||||
UCA1CTL1 = UCSSEL0 | UCSSEL1;
|
||||
|
||||
|
||||
/* Setup baud rate low byte. */
|
||||
UCA1BR0 = ( unsigned char ) ( ulBaudRateCount & ( unsigned long ) 0xff );
|
||||
|
||||
|
|
@ -89,12 +89,12 @@ unsigned long ulBaudRateCount;
|
|||
|
||||
/* Enable interrupts. */
|
||||
UCA1IE |= UCRXIE;
|
||||
|
||||
|
||||
/* Take out of reset. */
|
||||
UCA1CTL1 &= ~UCSWRST;
|
||||
}
|
||||
portEXIT_CRITICAL();
|
||||
|
||||
|
||||
/* Note the comments at the top of this file about this not being a generic
|
||||
UART driver. */
|
||||
return NULL;
|
||||
|
|
@ -125,7 +125,7 @@ signed portBASE_TYPE xReturn;
|
|||
completed and switched itself off. */
|
||||
xReturn = xQueueSend( xCharsForTx, &cOutChar, xBlockTime );
|
||||
UCA1IE |= UCTXIE;
|
||||
|
||||
|
||||
return xReturn;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
|
@ -148,7 +148,7 @@ portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
|
|||
characters. */
|
||||
cChar = UCA1RXBUF;
|
||||
xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );
|
||||
}
|
||||
}
|
||||
else if( ( UCA1IFG & UCTXIFG ) != 0 )
|
||||
{
|
||||
/* The previous character has been transmitted. See if there are any
|
||||
|
|
@ -165,16 +165,16 @@ portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
|
|||
UCA1IE &= ~UCTXIE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
__bic_SR_register_on_exit( SCG1 + SCG0 + OSCOFF + CPUOFF );
|
||||
|
||||
|
||||
/* If writing to a queue caused a task to unblock, and the unblocked task
|
||||
has a priority equal to or above the task that this interrupt interrupted,
|
||||
then lHigherPriorityTaskWoken will have been set to pdTRUE internally within
|
||||
xQueuesendFromISR(), and portEND_SWITCHING_ISR() will ensure that this
|
||||
interrupt returns directly to the higher priority unblocked task.
|
||||
|
||||
THIS MUST BE THE LAST THING DONE IN THE ISR. */
|
||||
interrupt returns directly to the higher priority unblocked task.
|
||||
|
||||
THIS MUST BE THE LAST THING DONE IN THE ISR. */
|
||||
portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue