mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2026-01-22 01:30:31 -05:00
Fix formatting in kernel demo application files (#1148)
* Fix formatting in kernel demo application files * Fix header check fail in the demo files * Add ignored patterns in core header check file * Fix formatting * Update vApplicationStackOverflowHook for AVR_ATMega4809_MPLAB.X/main.c Co-authored-by: Soren Ptak <ptaksoren@gmail.com> * Update vApplicationStackOverflowHook for AVR_ATMega4809_MPLAB.X/main.c Co-authored-by: Soren Ptak <ptaksoren@gmail.com> * Update vApplicationStackOverflowHook for AVR_Dx_IAR/main.c Co-authored-by: Soren Ptak <ptaksoren@gmail.com> * Update vApplicationStackOverflowHook for AVR_Dx_IAR/main.c Co-authored-by: Soren Ptak <ptaksoren@gmail.com> * Update vApplicationStackOverflowHook for AVR_Dx_MPLAB.X/main.c Co-authored-by: Soren Ptak <ptaksoren@gmail.com> * Update vApplicationMallocFailedHook for AVR_Dx_MPLAB.X/main.c Co-authored-by: Soren Ptak <ptaksoren@gmail.com> * Fix formatting AVR32_UC3 --------- Co-authored-by: Soren Ptak <ptaksoren@gmail.com>
This commit is contained in:
parent
85ed21bcfb
commit
121fbe295b
169 changed files with 22211 additions and 21557 deletions
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* FreeRTOS V202212.00
|
||||
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* 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
|
||||
|
|
@ -55,25 +55,25 @@
|
|||
#include <string.h>
|
||||
|
||||
/* This project provides two demo applications. A simple blinky style demo
|
||||
application, and a more comprehensive test and demo application. The
|
||||
mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting is used to select between the two.
|
||||
|
||||
If mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is 1 then the blinky demo will be built.
|
||||
The blinky demo is implemented and described in main_blinky.c.
|
||||
|
||||
If mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is not 1 then the comprehensive test and
|
||||
demo application will be built. The comprehensive test and demo application is
|
||||
implemented and described in main_full.c. */
|
||||
#define mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 1
|
||||
* application, and a more comprehensive test and demo application. The
|
||||
* mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting is used to select between the two.
|
||||
*
|
||||
* If mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is 1 then the blinky demo will be built.
|
||||
* The blinky demo is implemented and described in main_blinky.c.
|
||||
*
|
||||
* If mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is not 1 then the comprehensive test and
|
||||
* demo application will be built. The comprehensive test and demo application is
|
||||
* implemented and described in main_full.c. */
|
||||
#define mainCREATE_SIMPLE_BLINKY_DEMO_ONLY 1
|
||||
|
||||
/* printf() output uses the UART. These constants define the addresses of the
|
||||
required UART registers. */
|
||||
#define UART0_ADDRESS ( 0x40004000UL )
|
||||
#define UART0_DATA ( * ( ( ( volatile uint32_t * )( UART0_ADDRESS + 0UL ) ) ) )
|
||||
#define UART0_STATE ( * ( ( ( volatile uint32_t * )( UART0_ADDRESS + 4UL ) ) ) )
|
||||
#define UART0_CTRL ( * ( ( ( volatile uint32_t * )( UART0_ADDRESS + 8UL ) ) ) )
|
||||
#define UART0_BAUDDIV ( * ( ( ( volatile uint32_t * )( UART0_ADDRESS + 16UL ) ) ) )
|
||||
#define TX_BUFFER_MASK ( 1UL )
|
||||
* required UART registers. */
|
||||
#define UART0_ADDRESS ( 0x40004000UL )
|
||||
#define UART0_DATA ( *( ( ( volatile uint32_t * ) ( UART0_ADDRESS + 0UL ) ) ) )
|
||||
#define UART0_STATE ( *( ( ( volatile uint32_t * ) ( UART0_ADDRESS + 4UL ) ) ) )
|
||||
#define UART0_CTRL ( *( ( ( volatile uint32_t * ) ( UART0_ADDRESS + 8UL ) ) ) )
|
||||
#define UART0_BAUDDIV ( *( ( ( volatile uint32_t * ) ( UART0_ADDRESS + 16UL ) ) ) )
|
||||
#define TX_BUFFER_MASK ( 1UL )
|
||||
|
||||
/*
|
||||
* main_blinky() is used when mainCREATE_SIMPLE_BLINKY_DEMO_ONLY is set to 1.
|
||||
|
|
@ -98,212 +98,230 @@ static void prvUARTInit( void );
|
|||
|
||||
void main( void )
|
||||
{
|
||||
/* See https://www.freertos.org/freertos-on-qemu-mps2-an385-model.html for
|
||||
instructions. */
|
||||
/* See https://www.freertos.org/freertos-on-qemu-mps2-an385-model.html for
|
||||
* instructions. */
|
||||
|
||||
/* Hardware initialisation. printf() output uses the UART for IO. */
|
||||
prvUARTInit();
|
||||
/* Hardware initialisation. printf() output uses the UART for IO. */
|
||||
prvUARTInit();
|
||||
|
||||
/* The mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting is described at the top
|
||||
of this file. */
|
||||
#if ( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1 )
|
||||
{
|
||||
main_blinky();
|
||||
}
|
||||
#else
|
||||
{
|
||||
main_full();
|
||||
}
|
||||
#endif
|
||||
/* The mainCREATE_SIMPLE_BLINKY_DEMO_ONLY setting is described at the top
|
||||
* of this file. */
|
||||
#if ( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1 )
|
||||
{
|
||||
main_blinky();
|
||||
}
|
||||
#else
|
||||
{
|
||||
main_full();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vApplicationMallocFailedHook( void )
|
||||
{
|
||||
/* vApplicationMallocFailedHook() will only be called if
|
||||
configUSE_MALLOC_FAILED_HOOK is set to 1 in FreeRTOSConfig.h. It is a hook
|
||||
function that will get called if a call to pvPortMalloc() fails.
|
||||
pvPortMalloc() is called internally by the kernel whenever a task, queue,
|
||||
timer or semaphore is created using the dynamic allocation (as opposed to
|
||||
static allocation) option. It is also called by various parts of the
|
||||
demo application. If heap_1.c, heap_2.c or heap_4.c is being used, then the
|
||||
size of the heap available to pvPortMalloc() is defined by
|
||||
configTOTAL_HEAP_SIZE in FreeRTOSConfig.h, and the xPortGetFreeHeapSize()
|
||||
API function can be used to query the size of free heap space that remains
|
||||
(although it does not provide information on how the remaining heap might be
|
||||
fragmented). See http://www.freertos.org/a00111.html for more
|
||||
information. */
|
||||
printf( "\r\n\r\nMalloc failed\r\n" );
|
||||
portDISABLE_INTERRUPTS();
|
||||
for( ;; );
|
||||
/* vApplicationMallocFailedHook() will only be called if
|
||||
* configUSE_MALLOC_FAILED_HOOK is set to 1 in FreeRTOSConfig.h. It is a hook
|
||||
* function that will get called if a call to pvPortMalloc() fails.
|
||||
* pvPortMalloc() is called internally by the kernel whenever a task, queue,
|
||||
* timer or semaphore is created using the dynamic allocation (as opposed to
|
||||
* static allocation) option. It is also called by various parts of the
|
||||
* demo application. If heap_1.c, heap_2.c or heap_4.c is being used, then the
|
||||
* size of the heap available to pvPortMalloc() is defined by
|
||||
* configTOTAL_HEAP_SIZE in FreeRTOSConfig.h, and the xPortGetFreeHeapSize()
|
||||
* API function can be used to query the size of free heap space that remains
|
||||
* (although it does not provide information on how the remaining heap might be
|
||||
* fragmented). See http://www.freertos.org/a00111.html for more
|
||||
* information. */
|
||||
printf( "\r\n\r\nMalloc failed\r\n" );
|
||||
portDISABLE_INTERRUPTS();
|
||||
|
||||
for( ; ; )
|
||||
{
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vApplicationIdleHook( void )
|
||||
{
|
||||
/* vApplicationIdleHook() will only be called if configUSE_IDLE_HOOK is set
|
||||
to 1 in FreeRTOSConfig.h. It will be called on each iteration of the idle
|
||||
task. It is essential that code added to this hook function never attempts
|
||||
to block in any way (for example, call xQueueReceive() with a block time
|
||||
specified, or call vTaskDelay()). If application tasks make use of the
|
||||
vTaskDelete() API function to delete themselves then it is also important
|
||||
that vApplicationIdleHook() is permitted to return to its calling function,
|
||||
because it is the responsibility of the idle task to clean up memory
|
||||
allocated by the kernel to any task that has since deleted itself. */
|
||||
/* vApplicationIdleHook() will only be called if configUSE_IDLE_HOOK is set
|
||||
* to 1 in FreeRTOSConfig.h. It will be called on each iteration of the idle
|
||||
* task. It is essential that code added to this hook function never attempts
|
||||
* to block in any way (for example, call xQueueReceive() with a block time
|
||||
* specified, or call vTaskDelay()). If application tasks make use of the
|
||||
* vTaskDelete() API function to delete themselves then it is also important
|
||||
* that vApplicationIdleHook() is permitted to return to its calling function,
|
||||
* because it is the responsibility of the idle task to clean up memory
|
||||
* allocated by the kernel to any task that has since deleted itself. */
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName )
|
||||
void vApplicationStackOverflowHook( TaskHandle_t pxTask,
|
||||
char * pcTaskName )
|
||||
{
|
||||
( void ) pcTaskName;
|
||||
( void ) pxTask;
|
||||
( void ) pcTaskName;
|
||||
( void ) pxTask;
|
||||
|
||||
/* Run time stack overflow checking is performed if
|
||||
configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook
|
||||
function is called if a stack overflow is detected. */
|
||||
printf( "\r\n\r\nStack overflow in %s\r\n", pcTaskName );
|
||||
portDISABLE_INTERRUPTS();
|
||||
for( ;; );
|
||||
/* Run time stack overflow checking is performed if
|
||||
* configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook
|
||||
* function is called if a stack overflow is detected. */
|
||||
printf( "\r\n\r\nStack overflow in %s\r\n", pcTaskName );
|
||||
portDISABLE_INTERRUPTS();
|
||||
|
||||
for( ; ; )
|
||||
{
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vApplicationTickHook( void )
|
||||
{
|
||||
/* This function will be called by each tick interrupt if
|
||||
configUSE_TICK_HOOK is set to 1 in FreeRTOSConfig.h. User code can be
|
||||
added here, but the tick hook is called from an interrupt context, so
|
||||
code must not attempt to block, and only the interrupt safe FreeRTOS API
|
||||
functions can be used (those that end in FromISR()). */
|
||||
/* This function will be called by each tick interrupt if
|
||||
* configUSE_TICK_HOOK is set to 1 in FreeRTOSConfig.h. User code can be
|
||||
* added here, but the tick hook is called from an interrupt context, so
|
||||
* code must not attempt to block, and only the interrupt safe FreeRTOS API
|
||||
* functions can be used (those that end in FromISR()). */
|
||||
|
||||
#if ( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY != 1 )
|
||||
{
|
||||
extern void vFullDemoTickHookFunction( void );
|
||||
#if ( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY != 1 )
|
||||
{
|
||||
extern void vFullDemoTickHookFunction( void );
|
||||
|
||||
vFullDemoTickHookFunction();
|
||||
}
|
||||
#endif /* mainCREATE_SIMPLE_BLINKY_DEMO_ONLY */
|
||||
vFullDemoTickHookFunction();
|
||||
}
|
||||
#endif /* mainCREATE_SIMPLE_BLINKY_DEMO_ONLY */
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vApplicationDaemonTaskStartupHook( void )
|
||||
{
|
||||
/* This function will be called once only, when the daemon task starts to
|
||||
execute (sometimes called the timer task). This is useful if the
|
||||
application includes initialisation code that would benefit from executing
|
||||
after the scheduler has been started. */
|
||||
/* This function will be called once only, when the daemon task starts to
|
||||
* execute (sometimes called the timer task). This is useful if the
|
||||
* application includes initialisation code that would benefit from executing
|
||||
* after the scheduler has been started. */
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vAssertCalled( const char *pcFileName, uint32_t ulLine )
|
||||
void vAssertCalled( const char * pcFileName,
|
||||
uint32_t ulLine )
|
||||
{
|
||||
volatile uint32_t ulSetToNonZeroInDebuggerToContinue = 0;
|
||||
volatile uint32_t ulSetToNonZeroInDebuggerToContinue = 0;
|
||||
|
||||
/* Called if an assertion passed to configASSERT() fails. See
|
||||
http://www.freertos.org/a00110.html#configASSERT for more information. */
|
||||
/* Called if an assertion passed to configASSERT() fails. See
|
||||
* http://www.freertos.org/a00110.html#configASSERT for more information. */
|
||||
|
||||
printf( "ASSERT! Line %d, file %s\r\n", ( int ) ulLine, pcFileName );
|
||||
printf( "ASSERT! Line %d, file %s\r\n", ( int ) ulLine, pcFileName );
|
||||
|
||||
taskENTER_CRITICAL();
|
||||
{
|
||||
/* You can step out of this function to debug the assertion by using
|
||||
the debugger to set ulSetToNonZeroInDebuggerToContinue to a non-zero
|
||||
value. */
|
||||
while( ulSetToNonZeroInDebuggerToContinue == 0 )
|
||||
{
|
||||
__asm volatile( "NOP" );
|
||||
__asm volatile( "NOP" );
|
||||
}
|
||||
}
|
||||
taskEXIT_CRITICAL();
|
||||
taskENTER_CRITICAL();
|
||||
{
|
||||
/* You can step out of this function to debug the assertion by using
|
||||
* the debugger to set ulSetToNonZeroInDebuggerToContinue to a non-zero
|
||||
* value. */
|
||||
while( ulSetToNonZeroInDebuggerToContinue == 0 )
|
||||
{
|
||||
__asm volatile ( "NOP" );
|
||||
__asm volatile ( "NOP" );
|
||||
}
|
||||
}
|
||||
taskEXIT_CRITICAL();
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* configUSE_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 )
|
||||
* 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 ];
|
||||
* 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 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 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;
|
||||
/* 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;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* configUSE_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 )
|
||||
* 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 ];
|
||||
* 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 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 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,
|
||||
configMINIMAL_STACK_SIZE is specified in words, not bytes. */
|
||||
*pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;
|
||||
/* Pass out the size of the array pointed to by *ppxTimerTaskStackBuffer.
|
||||
* Note that, as the array is necessarily of type StackType_t,
|
||||
* configMINIMAL_STACK_SIZE is specified in words, not bytes. */
|
||||
*pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvUARTInit( void )
|
||||
{
|
||||
UART0_BAUDDIV = 16;
|
||||
UART0_CTRL = 1;
|
||||
UART0_BAUDDIV = 16;
|
||||
UART0_CTRL = 1;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
int __write( int iFile, char *pcString, int iStringLength )
|
||||
int __write( int iFile,
|
||||
char * pcString,
|
||||
int iStringLength )
|
||||
{
|
||||
int iNextChar;
|
||||
int iNextChar;
|
||||
|
||||
/* Avoid compiler warnings about unused parameters. */
|
||||
( void ) iFile;
|
||||
/* Avoid compiler warnings about unused parameters. */
|
||||
( void ) iFile;
|
||||
|
||||
/* Output the formatted string to the UART. */
|
||||
for( iNextChar = 0; iNextChar < iStringLength; iNextChar++ )
|
||||
{
|
||||
while( ( UART0_STATE & TX_BUFFER_MASK ) != 0 );
|
||||
UART0_DATA = *pcString;
|
||||
pcString++;
|
||||
}
|
||||
/* Output the formatted string to the UART. */
|
||||
for( iNextChar = 0; iNextChar < iStringLength; iNextChar++ )
|
||||
{
|
||||
while( ( UART0_STATE & TX_BUFFER_MASK ) != 0 )
|
||||
{
|
||||
}
|
||||
|
||||
return iStringLength;
|
||||
UART0_DATA = *pcString;
|
||||
pcString++;
|
||||
}
|
||||
|
||||
return iStringLength;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void *malloc( size_t size )
|
||||
void * malloc( size_t size )
|
||||
{
|
||||
( void ) size;
|
||||
( void ) size;
|
||||
|
||||
/* This project uses heap_4 so doesn't set up a heap for use by the C
|
||||
library - but something is calling the C library malloc(). See
|
||||
https://freertos.org/a00111.html for more information. */
|
||||
printf( "\r\n\r\nUnexpected call to malloc() - should be usine pvPortMalloc()\r\n" );
|
||||
portDISABLE_INTERRUPTS();
|
||||
for( ;; );
|
||||
/* This project uses heap_4 so doesn't set up a heap for use by the C
|
||||
* library - but something is calling the C library malloc(). See
|
||||
* https://freertos.org/a00111.html for more information. */
|
||||
printf( "\r\n\r\nUnexpected call to malloc() - should be usine pvPortMalloc()\r\n" );
|
||||
portDISABLE_INTERRUPTS();
|
||||
|
||||
for( ; ; )
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* FreeRTOS V202212.00
|
||||
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* 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
|
||||
|
|
@ -66,29 +66,29 @@
|
|||
#include "queue.h"
|
||||
|
||||
/* Priorities at which the tasks are created. */
|
||||
#define mainQUEUE_RECEIVE_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||
#define mainQUEUE_SEND_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
|
||||
#define mainQUEUE_RECEIVE_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||
#define mainQUEUE_SEND_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
|
||||
|
||||
/* The rate at which data is sent to the queue. The times are converted from
|
||||
milliseconds to ticks using the pdMS_TO_TICKS() macro. */
|
||||
#define mainTASK_SEND_FREQUENCY_MS pdMS_TO_TICKS( 200UL )
|
||||
#define mainTIMER_SEND_FREQUENCY_MS pdMS_TO_TICKS( 2000UL )
|
||||
* milliseconds to ticks using the pdMS_TO_TICKS() macro. */
|
||||
#define mainTASK_SEND_FREQUENCY_MS pdMS_TO_TICKS( 200UL )
|
||||
#define mainTIMER_SEND_FREQUENCY_MS pdMS_TO_TICKS( 2000UL )
|
||||
|
||||
/* The number of items the queue can hold at once. */
|
||||
#define mainQUEUE_LENGTH ( 2 )
|
||||
#define mainQUEUE_LENGTH ( 2 )
|
||||
|
||||
/* The values sent to the queue receive task from the queue send task and the
|
||||
queue send software timer respectively. */
|
||||
#define mainVALUE_SENT_FROM_TASK ( 100UL )
|
||||
#define mainVALUE_SENT_FROM_TIMER ( 200UL )
|
||||
* queue send software timer respectively. */
|
||||
#define mainVALUE_SENT_FROM_TASK ( 100UL )
|
||||
#define mainVALUE_SENT_FROM_TIMER ( 200UL )
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/*
|
||||
* The tasks as described in the comments at the top of this file.
|
||||
*/
|
||||
static void prvQueueReceiveTask( void *pvParameters );
|
||||
static void prvQueueSendTask( void *pvParameters );
|
||||
static void prvQueueReceiveTask( void * pvParameters );
|
||||
static void prvQueueSendTask( void * pvParameters );
|
||||
|
||||
/*
|
||||
* The callback function executed when the software timer expires.
|
||||
|
|
@ -108,128 +108,128 @@ static TimerHandle_t xTimer = NULL;
|
|||
/*** SEE THE COMMENTS AT THE TOP OF THIS FILE ***/
|
||||
void main_blinky( void )
|
||||
{
|
||||
const TickType_t xTimerPeriod = mainTIMER_SEND_FREQUENCY_MS;
|
||||
const TickType_t xTimerPeriod = mainTIMER_SEND_FREQUENCY_MS;
|
||||
|
||||
/* Create the queue. */
|
||||
xQueue = xQueueCreate( mainQUEUE_LENGTH, sizeof( uint32_t ) );
|
||||
/* Create the queue. */
|
||||
xQueue = xQueueCreate( mainQUEUE_LENGTH, sizeof( uint32_t ) );
|
||||
|
||||
if( xQueue != NULL )
|
||||
{
|
||||
/* Start the two tasks as described in the comments at the top of this
|
||||
file. */
|
||||
xTaskCreate( prvQueueReceiveTask, /* The function that implements the task. */
|
||||
"Rx", /* The text name assigned to the task - for debug only as it is not used by the kernel. */
|
||||
configMINIMAL_STACK_SIZE, /* The size of the stack to allocate to the task. */
|
||||
NULL, /* The parameter passed to the task - not used in this simple case. */
|
||||
mainQUEUE_RECEIVE_TASK_PRIORITY,/* The priority assigned to the task. */
|
||||
NULL ); /* The task handle is not required, so NULL is passed. */
|
||||
if( xQueue != NULL )
|
||||
{
|
||||
/* Start the two tasks as described in the comments at the top of this
|
||||
* file. */
|
||||
xTaskCreate( prvQueueReceiveTask, /* The function that implements the task. */
|
||||
"Rx", /* The text name assigned to the task - for debug only as it is not used by the kernel. */
|
||||
configMINIMAL_STACK_SIZE, /* The size of the stack to allocate to the task. */
|
||||
NULL, /* The parameter passed to the task - not used in this simple case. */
|
||||
mainQUEUE_RECEIVE_TASK_PRIORITY, /* The priority assigned to the task. */
|
||||
NULL ); /* The task handle is not required, so NULL is passed. */
|
||||
|
||||
xTaskCreate( prvQueueSendTask, "TX", configMINIMAL_STACK_SIZE, NULL, mainQUEUE_SEND_TASK_PRIORITY, NULL );
|
||||
xTaskCreate( prvQueueSendTask, "TX", configMINIMAL_STACK_SIZE, NULL, mainQUEUE_SEND_TASK_PRIORITY, NULL );
|
||||
|
||||
/* Create the software timer, but don't start it yet. */
|
||||
xTimer = xTimerCreate( "Timer", /* The text name assigned to the software timer - for debug only as it is not used by the kernel. */
|
||||
xTimerPeriod, /* The period of the software timer in ticks. */
|
||||
pdTRUE, /* xAutoReload is set to pdTRUE, so this is an auto-reload timer. */
|
||||
NULL, /* The timer's ID is not used. */
|
||||
prvQueueSendTimerCallback );/* The function executed when the timer expires. */
|
||||
/* Create the software timer, but don't start it yet. */
|
||||
xTimer = xTimerCreate( "Timer", /* The text name assigned to the software timer - for debug only as it is not used by the kernel. */
|
||||
xTimerPeriod, /* The period of the software timer in ticks. */
|
||||
pdTRUE, /* xAutoReload is set to pdTRUE, so this is an auto-reload timer. */
|
||||
NULL, /* The timer's ID is not used. */
|
||||
prvQueueSendTimerCallback ); /* The function executed when the timer expires. */
|
||||
|
||||
xTimerStart( xTimer, 0 ); /* The scheduler has not started so use a block time of 0. */
|
||||
xTimerStart( xTimer, 0 ); /* The scheduler has not started so use a block time of 0. */
|
||||
|
||||
/* Start the tasks and timer running. */
|
||||
vTaskStartScheduler();
|
||||
}
|
||||
/* Start the tasks and timer running. */
|
||||
vTaskStartScheduler();
|
||||
}
|
||||
|
||||
/* If all is well, the scheduler will now be running, and the following
|
||||
line will never be reached. If the following line does execute, then
|
||||
there was insufficient FreeRTOS heap memory available for the idle and/or
|
||||
timer tasks to be created. See the memory management section on the
|
||||
FreeRTOS web site for more details. NOTE: This demo uses static allocation
|
||||
for the idle and timer tasks so this line should never execute. */
|
||||
for( ;; );
|
||||
/* If all is well, the scheduler will now be running, and the following
|
||||
* line will never be reached. If the following line does execute, then
|
||||
* there was insufficient FreeRTOS heap memory available for the idle and/or
|
||||
* timer tasks to be created. See the memory management section on the
|
||||
* FreeRTOS web site for more details. NOTE: This demo uses static allocation
|
||||
* for the idle and timer tasks so this line should never execute. */
|
||||
for( ; ; )
|
||||
{
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvQueueSendTask( void *pvParameters )
|
||||
static void prvQueueSendTask( void * pvParameters )
|
||||
{
|
||||
TickType_t xNextWakeTime;
|
||||
const TickType_t xBlockTime = mainTASK_SEND_FREQUENCY_MS;
|
||||
const uint32_t ulValueToSend = mainVALUE_SENT_FROM_TASK;
|
||||
TickType_t xNextWakeTime;
|
||||
const TickType_t xBlockTime = mainTASK_SEND_FREQUENCY_MS;
|
||||
const uint32_t ulValueToSend = mainVALUE_SENT_FROM_TASK;
|
||||
|
||||
/* Prevent the compiler warning about the unused parameter. */
|
||||
( void ) pvParameters;
|
||||
/* Prevent the compiler warning about the unused parameter. */
|
||||
( void ) pvParameters;
|
||||
|
||||
/* Initialise xNextWakeTime - this only needs to be done once. */
|
||||
xNextWakeTime = xTaskGetTickCount();
|
||||
/* Initialise xNextWakeTime - this only needs to be done once. */
|
||||
xNextWakeTime = xTaskGetTickCount();
|
||||
|
||||
for( ;; )
|
||||
{
|
||||
/* Place this task in the blocked state until it is time to run again.
|
||||
The block time is specified in ticks, pdMS_TO_TICKS() was used to
|
||||
convert a time specified in milliseconds into a time specified in ticks.
|
||||
While in the Blocked state this task will not consume any CPU time. */
|
||||
vTaskDelayUntil( &xNextWakeTime, xBlockTime );
|
||||
for( ; ; )
|
||||
{
|
||||
/* Place this task in the blocked state until it is time to run again.
|
||||
* The block time is specified in ticks, pdMS_TO_TICKS() was used to
|
||||
* convert a time specified in milliseconds into a time specified in ticks.
|
||||
* While in the Blocked state this task will not consume any CPU time. */
|
||||
vTaskDelayUntil( &xNextWakeTime, xBlockTime );
|
||||
|
||||
/* Send to the queue - causing the queue receive task to unblock and
|
||||
write to the console. 0 is used as the block time so the send operation
|
||||
will not block - it shouldn't need to block as the queue should always
|
||||
have at least one space at this point in the code. */
|
||||
xQueueSend( xQueue, &ulValueToSend, 0U );
|
||||
}
|
||||
/* Send to the queue - causing the queue receive task to unblock and
|
||||
* write to the console. 0 is used as the block time so the send operation
|
||||
* will not block - it shouldn't need to block as the queue should always
|
||||
* have at least one space at this point in the code. */
|
||||
xQueueSend( xQueue, &ulValueToSend, 0U );
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvQueueSendTimerCallback( TimerHandle_t xTimerHandle )
|
||||
{
|
||||
const uint32_t ulValueToSend = mainVALUE_SENT_FROM_TIMER;
|
||||
const uint32_t ulValueToSend = mainVALUE_SENT_FROM_TIMER;
|
||||
|
||||
/* This is the software timer callback function. The software timer has a
|
||||
period of two seconds and is reset each time a key is pressed. This
|
||||
callback function will execute if the timer expires, which will only happen
|
||||
if a key is not pressed for two seconds. */
|
||||
/* This is the software timer callback function. The software timer has a
|
||||
* period of two seconds and is reset each time a key is pressed. This
|
||||
* callback function will execute if the timer expires, which will only happen
|
||||
* if a key is not pressed for two seconds. */
|
||||
|
||||
/* Avoid compiler warnings resulting from the unused parameter. */
|
||||
( void ) xTimerHandle;
|
||||
/* Avoid compiler warnings resulting from the unused parameter. */
|
||||
( void ) xTimerHandle;
|
||||
|
||||
/* Send to the queue - causing the queue receive task to unblock and
|
||||
write out a message. This function is called from the timer/daemon task, so
|
||||
must not block. Hence the block time is set to 0. */
|
||||
xQueueSend( xQueue, &ulValueToSend, 0U );
|
||||
/* Send to the queue - causing the queue receive task to unblock and
|
||||
* write out a message. This function is called from the timer/daemon task, so
|
||||
* must not block. Hence the block time is set to 0. */
|
||||
xQueueSend( xQueue, &ulValueToSend, 0U );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
static void prvQueueReceiveTask( void *pvParameters )
|
||||
static void prvQueueReceiveTask( void * pvParameters )
|
||||
{
|
||||
uint32_t ulReceivedValue;
|
||||
uint32_t ulReceivedValue;
|
||||
|
||||
/* Prevent the compiler warning about the unused parameter. */
|
||||
( void ) pvParameters;
|
||||
/* Prevent the compiler warning about the unused parameter. */
|
||||
( void ) pvParameters;
|
||||
|
||||
for( ;; )
|
||||
{
|
||||
/* Wait until something arrives in the queue - this task will block
|
||||
indefinitely provided INCLUDE_vTaskSuspend is set to 1 in
|
||||
FreeRTOSConfig.h. It will not use any CPU time while it is in the
|
||||
Blocked state. */
|
||||
xQueueReceive( xQueue, &ulReceivedValue, portMAX_DELAY );
|
||||
for( ; ; )
|
||||
{
|
||||
/* Wait until something arrives in the queue - this task will block
|
||||
* indefinitely provided INCLUDE_vTaskSuspend is set to 1 in
|
||||
* FreeRTOSConfig.h. It will not use any CPU time while it is in the
|
||||
* Blocked state. */
|
||||
xQueueReceive( xQueue, &ulReceivedValue, portMAX_DELAY );
|
||||
|
||||
/* To get here something must have been received from the queue, but
|
||||
is it an expected value? */
|
||||
if( ulReceivedValue == mainVALUE_SENT_FROM_TASK )
|
||||
{
|
||||
/* It is normally not good to call printf() from an embedded system,
|
||||
although it is ok in this simulated case. */
|
||||
printf( "Message received from task\r\n" );
|
||||
}
|
||||
else if( ulReceivedValue == mainVALUE_SENT_FROM_TIMER )
|
||||
{
|
||||
printf( "Message received from software timer\r\n" );
|
||||
}
|
||||
else
|
||||
{
|
||||
printf( "Unexpected message\r\n" );
|
||||
}
|
||||
}
|
||||
/* To get here something must have been received from the queue, but
|
||||
* is it an expected value? */
|
||||
if( ulReceivedValue == mainVALUE_SENT_FROM_TASK )
|
||||
{
|
||||
/* It is normally not good to call printf() from an embedded system,
|
||||
* although it is ok in this simulated case. */
|
||||
printf( "Message received from task\r\n" );
|
||||
}
|
||||
else if( ulReceivedValue == mainVALUE_SENT_FROM_TIMER )
|
||||
{
|
||||
printf( "Message received from software timer\r\n" );
|
||||
}
|
||||
else
|
||||
{
|
||||
printf( "Unexpected message\r\n" );
|
||||
}
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* FreeRTOS V202212.00
|
||||
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||
* 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
|
||||
|
|
@ -98,222 +98,224 @@
|
|||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* Task priorities. */
|
||||
#define mainQUEUE_POLL_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||
#define mainCHECK_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 )
|
||||
#define mainSEM_TEST_PRIORITY ( tskIDLE_PRIORITY + 1 )
|
||||
#define mainCREATOR_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 )
|
||||
#define mainGEN_QUEUE_TASK_PRIORITY ( tskIDLE_PRIORITY )
|
||||
#define mainQUEUE_POLL_PRIORITY ( tskIDLE_PRIORITY + 2 )
|
||||
#define mainCHECK_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 )
|
||||
#define mainSEM_TEST_PRIORITY ( tskIDLE_PRIORITY + 1 )
|
||||
#define mainCREATOR_TASK_PRIORITY ( tskIDLE_PRIORITY + 3 )
|
||||
#define mainGEN_QUEUE_TASK_PRIORITY ( tskIDLE_PRIORITY )
|
||||
|
||||
/* Stack sizes are defined relative to configMINIMAL_STACK_SIZE so they scale
|
||||
across projects that have that constant set differently - in this case the
|
||||
constant is different depending on the compiler in use. */
|
||||
#define mainMESSAGE_BUFFER_STACK_SIZE ( configMINIMAL_STACK_SIZE + ( configMINIMAL_STACK_SIZE >> 1 ) )
|
||||
#define mainCHECK_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE + ( configMINIMAL_STACK_SIZE >> 1 ) )
|
||||
* across projects that have that constant set differently - in this case the
|
||||
* constant is different depending on the compiler in use. */
|
||||
#define mainMESSAGE_BUFFER_STACK_SIZE ( configMINIMAL_STACK_SIZE + ( configMINIMAL_STACK_SIZE >> 1 ) )
|
||||
#define mainCHECK_TASK_STACK_SIZE ( configMINIMAL_STACK_SIZE + ( configMINIMAL_STACK_SIZE >> 1 ) )
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* The task that checks the operation of all the other standard demo tasks, as
|
||||
* described at the top of this file. */
|
||||
static void prvCheckTask( void *pvParameters );
|
||||
static void prvCheckTask( void * pvParameters );
|
||||
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void main_full( void )
|
||||
{
|
||||
/* Start the standard demo tasks. */
|
||||
vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );
|
||||
vStartInterruptQueueTasks();
|
||||
vStartRecursiveMutexTasks();
|
||||
vCreateBlockTimeTasks();
|
||||
vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );
|
||||
vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );
|
||||
vStartQueuePeekTasks();
|
||||
vStartQueueSetTasks();
|
||||
vStartEventGroupTasks();
|
||||
vStartMessageBufferTasks( mainMESSAGE_BUFFER_STACK_SIZE );
|
||||
vStartStreamBufferTasks();
|
||||
vCreateAbortDelayTasks();
|
||||
vStartCountingSemaphoreTasks();
|
||||
vStartDynamicPriorityTasks();
|
||||
vStartMessageBufferAMPTasks( configMINIMAL_STACK_SIZE );
|
||||
vStartQueueOverwriteTask( tskIDLE_PRIORITY );
|
||||
vStartQueueSetPollingTask();
|
||||
vStartStaticallyAllocatedTasks();
|
||||
vStartTaskNotifyTask();
|
||||
vStartTaskNotifyArrayTask();
|
||||
vStartTimerDemoTask( 50 );
|
||||
vStartStreamBufferInterruptDemo();
|
||||
vStartInterruptSemaphoreTasks();
|
||||
/* Start the standard demo tasks. */
|
||||
vStartGenericQueueTasks( mainGEN_QUEUE_TASK_PRIORITY );
|
||||
vStartInterruptQueueTasks();
|
||||
vStartRecursiveMutexTasks();
|
||||
vCreateBlockTimeTasks();
|
||||
vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );
|
||||
vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );
|
||||
vStartQueuePeekTasks();
|
||||
vStartQueueSetTasks();
|
||||
vStartEventGroupTasks();
|
||||
vStartMessageBufferTasks( mainMESSAGE_BUFFER_STACK_SIZE );
|
||||
vStartStreamBufferTasks();
|
||||
vCreateAbortDelayTasks();
|
||||
vStartCountingSemaphoreTasks();
|
||||
vStartDynamicPriorityTasks();
|
||||
vStartMessageBufferAMPTasks( configMINIMAL_STACK_SIZE );
|
||||
vStartQueueOverwriteTask( tskIDLE_PRIORITY );
|
||||
vStartQueueSetPollingTask();
|
||||
vStartStaticallyAllocatedTasks();
|
||||
vStartTaskNotifyTask();
|
||||
vStartTaskNotifyArrayTask();
|
||||
vStartTimerDemoTask( 50 );
|
||||
vStartStreamBufferInterruptDemo();
|
||||
vStartInterruptSemaphoreTasks();
|
||||
|
||||
/* The suicide tasks must be created last as they need to know how many
|
||||
tasks were running prior to their creation in order to ascertain whether
|
||||
or not the correct/expected number of tasks are running at any given time. */
|
||||
vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );
|
||||
/* The suicide tasks must be created last as they need to know how many
|
||||
* tasks were running prior to their creation in order to ascertain whether
|
||||
* or not the correct/expected number of tasks are running at any given time. */
|
||||
vCreateSuicidalTasks( mainCREATOR_TASK_PRIORITY );
|
||||
|
||||
xTaskCreate( prvCheckTask, "Check", mainCHECK_TASK_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
|
||||
xTaskCreate( prvCheckTask, "Check", mainCHECK_TASK_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
|
||||
|
||||
/* Start the scheduler. */
|
||||
vTaskStartScheduler();
|
||||
/* Start the scheduler. */
|
||||
vTaskStartScheduler();
|
||||
|
||||
/* If configSUPPORT_STATIC_ALLOCATION was false then execution would only
|
||||
get here if there was insufficient heap memory to create either the idle or
|
||||
timer tasks. As static allocation is used execution should never be able
|
||||
to reach here. */
|
||||
for( ;; );
|
||||
/* If configSUPPORT_STATIC_ALLOCATION was false then execution would only
|
||||
* get here if there was insufficient heap memory to create either the idle or
|
||||
* timer tasks. As static allocation is used execution should never be able
|
||||
* to reach here. */
|
||||
for( ; ; )
|
||||
{
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
/* See the comments at the top of this file. */
|
||||
static void prvCheckTask( void *pvParameters )
|
||||
static void prvCheckTask( void * pvParameters )
|
||||
{
|
||||
static const char * pcMessage = "PASS";
|
||||
const TickType_t xTaskPeriod = pdMS_TO_TICKS( 5000UL );
|
||||
TickType_t xPreviousWakeTime;
|
||||
extern uint32_t ulNestCount;
|
||||
static const char * pcMessage = "PASS";
|
||||
const TickType_t xTaskPeriod = pdMS_TO_TICKS( 5000UL );
|
||||
TickType_t xPreviousWakeTime;
|
||||
extern uint32_t ulNestCount;
|
||||
|
||||
/* Avoid warning about unused parameter. */
|
||||
( void ) pvParameters;
|
||||
|
||||
xPreviousWakeTime = xTaskGetTickCount();
|
||||
xPreviousWakeTime = xTaskGetTickCount();
|
||||
|
||||
for( ;; )
|
||||
{
|
||||
vTaskDelayUntil( &xPreviousWakeTime, xTaskPeriod );
|
||||
for( ; ; )
|
||||
{
|
||||
vTaskDelayUntil( &xPreviousWakeTime, xTaskPeriod );
|
||||
|
||||
/* Has an error been found in any task? */
|
||||
if( xAreStreamBufferTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreStreamBufferTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreMessageBufferTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreMessageBufferTasksStillRunning() returned false";
|
||||
}
|
||||
if( xAreGenericQueueTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreGenericQueueTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xIsCreateTaskStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xIsCreateTaskStillRunning() returned false";
|
||||
}
|
||||
else if( xAreIntQueueTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreIntQueueTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreBlockTimeTestTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreSemaphoreTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreSemaphoreTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xArePollingQueuesStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xArePollingQueuesStillRunning() returned false";
|
||||
}
|
||||
else if( xAreQueuePeekTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreQueuePeekTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreRecursiveMutexTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreRecursiveMutexTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreQueueSetTasksStillRunning() != pdPASS )
|
||||
{
|
||||
pcMessage = "xAreQueueSetTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreEventGroupTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreEventGroupTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreAbortDelayTestTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreAbortDelayTestTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreCountingSemaphoreTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreCountingSemaphoreTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreDynamicPriorityTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreDynamicPriorityTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreMessageBufferAMPTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreMessageBufferAMPTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xIsQueueOverwriteTaskStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xIsQueueOverwriteTaskStillRunning() returned false";
|
||||
}
|
||||
else if( xAreQueueSetPollTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreQueueSetPollTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreStaticAllocationTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreStaticAllocationTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreTaskNotificationTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreTaskNotificationTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreTaskNotificationArrayTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreTaskNotificationArrayTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreTimerDemoTasksStillRunning( xTaskPeriod ) != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreTimerDemoTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xIsInterruptStreamBufferDemoStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xIsInterruptStreamBufferDemoStillRunning() returned false";
|
||||
}
|
||||
else if( xAreInterruptSemaphoreTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreInterruptSemaphoreTasksStillRunning() returned false";
|
||||
}
|
||||
/* Has an error been found in any task? */
|
||||
if( xAreStreamBufferTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreStreamBufferTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreMessageBufferTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreMessageBufferTasksStillRunning() returned false";
|
||||
}
|
||||
|
||||
/* It is normally not good to call printf() from an embedded system,
|
||||
although it is ok in this simulated case. */
|
||||
printf( "%s : %d (%d)\r\n", pcMessage, (int) xTaskGetTickCount(), ( int ) ulNestCount );
|
||||
}
|
||||
if( xAreGenericQueueTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreGenericQueueTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xIsCreateTaskStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xIsCreateTaskStillRunning() returned false";
|
||||
}
|
||||
else if( xAreIntQueueTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreIntQueueTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreBlockTimeTestTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreSemaphoreTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreSemaphoreTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xArePollingQueuesStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xArePollingQueuesStillRunning() returned false";
|
||||
}
|
||||
else if( xAreQueuePeekTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreQueuePeekTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreRecursiveMutexTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreRecursiveMutexTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreQueueSetTasksStillRunning() != pdPASS )
|
||||
{
|
||||
pcMessage = "xAreQueueSetTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreEventGroupTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreEventGroupTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreAbortDelayTestTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreAbortDelayTestTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreCountingSemaphoreTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreCountingSemaphoreTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreDynamicPriorityTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreDynamicPriorityTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreMessageBufferAMPTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreMessageBufferAMPTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xIsQueueOverwriteTaskStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xIsQueueOverwriteTaskStillRunning() returned false";
|
||||
}
|
||||
else if( xAreQueueSetPollTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreQueueSetPollTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreStaticAllocationTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreStaticAllocationTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreTaskNotificationTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreTaskNotificationTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreTaskNotificationArrayTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreTaskNotificationArrayTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xAreTimerDemoTasksStillRunning( xTaskPeriod ) != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreTimerDemoTasksStillRunning() returned false";
|
||||
}
|
||||
else if( xIsInterruptStreamBufferDemoStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xIsInterruptStreamBufferDemoStillRunning() returned false";
|
||||
}
|
||||
else if( xAreInterruptSemaphoreTasksStillRunning() != pdTRUE )
|
||||
{
|
||||
pcMessage = "xAreInterruptSemaphoreTasksStillRunning() returned false";
|
||||
}
|
||||
|
||||
/* It is normally not good to call printf() from an embedded system,
|
||||
* although it is ok in this simulated case. */
|
||||
printf( "%s : %d (%d)\r\n", pcMessage, ( int ) xTaskGetTickCount(), ( int ) ulNestCount );
|
||||
}
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
void vFullDemoTickHookFunction( void )
|
||||
{
|
||||
/* Write to a queue that is in use as part of the queue set demo to
|
||||
demonstrate using queue sets from an ISR. */
|
||||
vQueueSetAccessQueueSetFromISR();
|
||||
/* Write to a queue that is in use as part of the queue set demo to
|
||||
* demonstrate using queue sets from an ISR. */
|
||||
vQueueSetAccessQueueSetFromISR();
|
||||
|
||||
/* Call the event group ISR tests. */
|
||||
vPeriodicEventGroupsProcessing();
|
||||
/* Call the event group ISR tests. */
|
||||
vPeriodicEventGroupsProcessing();
|
||||
|
||||
/* Exercise stream buffers from interrupts. */
|
||||
vPeriodicStreamBufferProcessing();
|
||||
/* Exercise stream buffers from interrupts. */
|
||||
vPeriodicStreamBufferProcessing();
|
||||
|
||||
/* Exercise using queue overwrites from interrupts. */
|
||||
vQueueOverwritePeriodicISRDemo();
|
||||
/* Exercise using queue overwrites from interrupts. */
|
||||
vQueueOverwritePeriodicISRDemo();
|
||||
|
||||
/* Exercise using Queue Sets from interrupts. */
|
||||
vQueueSetPollingInterruptAccess();
|
||||
/* Exercise using Queue Sets from interrupts. */
|
||||
vQueueSetPollingInterruptAccess();
|
||||
|
||||
/* Exercise using task notifications from interrupts. */
|
||||
xNotifyTaskFromISR();
|
||||
xNotifyArrayTaskFromISR();
|
||||
/* Exercise using task notifications from interrupts. */
|
||||
xNotifyTaskFromISR();
|
||||
xNotifyArrayTaskFromISR();
|
||||
|
||||
/* Exercise software timers from interrupts. */
|
||||
vTimerPeriodicISRTests();
|
||||
/* Exercise software timers from interrupts. */
|
||||
vTimerPeriodicISRTests();
|
||||
|
||||
/* Exercise stream buffers from interrupts. */
|
||||
vBasicStreamBufferSendFromISR();
|
||||
/* Exercise stream buffers from interrupts. */
|
||||
vBasicStreamBufferSendFromISR();
|
||||
|
||||
/* Exercise semaphores from interrupts. */
|
||||
vInterruptSemaphorePeriodicTest();
|
||||
/* Exercise semaphores from interrupts. */
|
||||
vInterruptSemaphorePeriodicTest();
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue