mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-10-17 10:17:45 -04:00
* 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
207 lines
7.3 KiB
C
207 lines
7.3 KiB
C
/*
|
|
* FreeRTOS V202112.00
|
|
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
* this software and associated documentation files (the "Software"), to deal in
|
|
* the Software without restriction, including without limitation the rights to
|
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
* the Software, and to permit persons to whom the Software is furnished to do so,
|
|
* subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included in all
|
|
* copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
*
|
|
* https://www.FreeRTOS.org
|
|
* https://github.com/FreeRTOS
|
|
*
|
|
*/
|
|
|
|
#include <atmel_start.h>
|
|
|
|
/* Scheduler include files. */
|
|
#include "FreeRTOS.h"
|
|
#include "task.h"
|
|
|
|
/* Tests. */
|
|
#include "regtest.h"
|
|
#include "integer.h"
|
|
#include "PollQ.h"
|
|
#include "partest.h"
|
|
|
|
/* Priority definitions for most of the tasks in the demo application. */
|
|
#define mainCHECK_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 )
|
|
#define mainQUEUE_POLL_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
|
#define mainLED_BLINK_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
|
|
|
/* The period between executions of the check task. */
|
|
#define mainCHECK_PERIOD ( ( TickType_t ) 1000 )
|
|
|
|
/* The period to toggle LED. */
|
|
#define mainBLINK_LED_OK_HALF_PERIOD ( ( TickType_t ) 100 )
|
|
|
|
/* The task function for the "Check" task. */
|
|
static void vErrorChecks( void *pvParameters );
|
|
|
|
/* The task function for blinking LED at a certain frequency. */
|
|
static void vBlinkOnboardUserLED( void *pvParameters );
|
|
|
|
int main(void)
|
|
{
|
|
/* Initializes MCU, drivers and middleware.
|
|
This is generated from Atmel START project. */
|
|
atmel_start_init();
|
|
|
|
/* Standard register test. */
|
|
vStartRegTestTasks();
|
|
|
|
/* Optionally enable below tests. This port only has 2KB RAM. */
|
|
vStartIntegerMathTasks( tskIDLE_PRIORITY );
|
|
vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );
|
|
xTaskCreate( vBlinkOnboardUserLED, "LED", 50, NULL, mainCHECK_TASK_PRIORITY, NULL );
|
|
|
|
/* Create the tasks defined within this file. */
|
|
xTaskCreate( vErrorChecks, "Check", configMINIMAL_STACK_SIZE, NULL, mainLED_BLINK_PRIORITY, NULL );
|
|
|
|
/* In this port, to use preemptive scheduler define configUSE_PREEMPTION
|
|
as 1 in portmacro.h. To use the cooperative scheduler define
|
|
configUSE_PREEMPTION as 0. */
|
|
vTaskStartScheduler();
|
|
}
|
|
|
|
/*-----------------------------------------------------------*/
|
|
static void vErrorChecks( void *pvParameters )
|
|
{
|
|
static UBaseType_t uxErrorHasOccurred = 0;
|
|
BaseType_t xFirstTimeCheck = pdTRUE;
|
|
|
|
/* The parameters are not used. */
|
|
( void ) pvParameters;
|
|
|
|
/* Cycle for ever, delaying then checking all the other tasks are still
|
|
operating without error. */
|
|
for( ;; )
|
|
{
|
|
if( xAreRegTestTasksStillRunning() != pdTRUE )
|
|
{
|
|
uxErrorHasOccurred |= 0x01U ;
|
|
}
|
|
if( xAreIntegerMathsTaskStillRunning() != pdTRUE )
|
|
{
|
|
uxErrorHasOccurred |= ( 0x01U << 1);
|
|
}
|
|
if( xArePollingQueuesStillRunning() != pdTRUE )
|
|
{
|
|
uxErrorHasOccurred |= ( 0x01U << 2);
|
|
}
|
|
|
|
/* When check task runs before any other tasks, all above checks shall fail.
|
|
To avoid false alarm, clear errors upon first entry. */
|
|
if ( xFirstTimeCheck == pdTRUE )
|
|
{
|
|
uxErrorHasOccurred = 0;
|
|
xFirstTimeCheck = pdFALSE;
|
|
}
|
|
|
|
/* Could set break point at below line to verify uxErrorHasOccurred. */
|
|
vTaskDelay( mainCHECK_PERIOD );
|
|
}
|
|
}
|
|
|
|
/*-----------------------------------------------------------*/
|
|
static void vBlinkOnboardUserLED( void *pvParameters )
|
|
{
|
|
/* The parameters are not used. */
|
|
( void ) pvParameters;
|
|
|
|
/* Cycle forever, blink onboard user LED at a certain frequency. */
|
|
for( ;; )
|
|
{
|
|
vParTestToggleLED( 0 );
|
|
|
|
vTaskDelay( mainBLINK_LED_OK_HALF_PERIOD );
|
|
}
|
|
|
|
}
|
|
|
|
/*-----------------------------------------------------------*/
|
|
|
|
void vApplicationIdleHook( void )
|
|
{
|
|
/* Doesn't do anything yet. */
|
|
}
|
|
|
|
/*-----------------------------------------------------------*/
|
|
|
|
void vApplicationStackOverflowHook( TaskHandle_t xTask, char *pcTaskName )
|
|
{
|
|
/* When stack overflow happens, trap instead of attempting to recover.
|
|
Read input arguments to learn about the offending task. */
|
|
for( ;; )
|
|
{
|
|
/* Doesn't do anything yet. */
|
|
}
|
|
}
|
|
|
|
/*-----------------------------------------------------------*/
|
|
|
|
/* configSUPPORT_STATIC_ALLOCATION is set to 1, so the application must provide an
|
|
implementation of vApplicationGetIdleTaskMemory() to provide the memory that is
|
|
used by the Idle task. */
|
|
void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer,
|
|
StackType_t **ppxIdleTaskStackBuffer,
|
|
uint32_t *pulIdleTaskStackSize )
|
|
{
|
|
/* If the buffers to be provided to the Idle task are declared inside this
|
|
function then they must be declared static -- otherwise they will be allocated on
|
|
the stack and so not exists after this function exits. */
|
|
static StaticTask_t xIdleTaskTCB;
|
|
static StackType_t uxIdleTaskStack[ configMINIMAL_STACK_SIZE ];
|
|
|
|
/* Pass out a pointer to the StaticTask_t structure in which the Idle task's
|
|
state will be stored. */
|
|
*ppxIdleTaskTCBBuffer = &xIdleTaskTCB;
|
|
|
|
/* Pass out the array that will be used as the Idle task's stack. */
|
|
*ppxIdleTaskStackBuffer = uxIdleTaskStack;
|
|
|
|
/* Pass out the size of the array pointed to by *ppxIdleTaskStackBuffer.
|
|
Note that, as the array is necessarily of type StackType_t,
|
|
configMINIMAL_STACK_SIZE is specified in words, not bytes. */
|
|
*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
|
|
}
|
|
/*-----------------------------------------------------------*/
|
|
|
|
/* configSUPPORT_STATIC_ALLOCATION and configUSE_TIMERS are both set to 1, so the
|
|
application must provide an implementation of vApplicationGetTimerTaskMemory()
|
|
to provide the memory that is used by the Timer service task. */
|
|
void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer,
|
|
StackType_t **ppxTimerTaskStackBuffer,
|
|
uint32_t *pulTimerTaskStackSize )
|
|
{
|
|
/* If the buffers to be provided to the Timer task are declared inside this
|
|
function then they must be declared static -- otherwise they will be allocated on
|
|
the stack and so not exists after this function exits. */
|
|
static StaticTask_t xTimerTaskTCB;
|
|
static StackType_t uxTimerTaskStack[ configTIMER_TASK_STACK_DEPTH ];
|
|
|
|
/* Pass out a pointer to the StaticTask_t structure in which the Timer
|
|
task's state will be stored. */
|
|
*ppxTimerTaskTCBBuffer = &xTimerTaskTCB;
|
|
|
|
/* Pass out the array that will be used as the Timer task's stack. */
|
|
*ppxTimerTaskStackBuffer = uxTimerTaskStack;
|
|
|
|
/* Pass out the size of the array pointed to by *ppxTimerTaskStackBuffer.
|
|
Note that, as the array is necessarily of type StackType_t,
|
|
configTIMER_TASK_STACK_DEPTH is specified in words, not bytes. */
|
|
*pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;
|
|
}
|
|
/*-----------------------------------------------------------*/
|