mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-10-18 02:37:47 -04:00
Improve vAssertCalled function to include filename / line number info.
This commit is contained in:
parent
84ad9250da
commit
c6325a02ff
2 changed files with 44 additions and 31 deletions
|
@ -39,13 +39,25 @@
|
||||||
* See https://www.freertos.org/a00110.html
|
* See https://www.freertos.org/a00110.html
|
||||||
*----------------------------------------------------------*/
|
*----------------------------------------------------------*/
|
||||||
|
|
||||||
#define configASSERT_DEFINED 1
|
#define configASSERT_DEFINED 1
|
||||||
extern void vAssertCalled( void );
|
|
||||||
#define configASSERT( x ) if( ( x ) == 0 ) vAssertCalled()
|
extern void vAssertCalled( const char * pcFileName,
|
||||||
|
int line );
|
||||||
|
|
||||||
|
#define __NAME_ARG__ ( __builtin_strrchr( __BASE_FILE__, '/' ) ? __builtin_strrchr( __BASE_FILE__, '/' ) + 1 : __BASE_FILE__ )
|
||||||
|
|
||||||
|
#define configASSERT( x ) \
|
||||||
|
do { \
|
||||||
|
if( ( x ) == 0 ) { \
|
||||||
|
vAssertCalled( __NAME_ARG__, __LINE__ ); \
|
||||||
|
} \
|
||||||
|
} while( 0 )
|
||||||
|
|
||||||
|
|
||||||
#define configQUEUE_REGISTRY_SIZE 20
|
#define configQUEUE_REGISTRY_SIZE 20
|
||||||
|
|
||||||
#ifdef PICOLIBC_TLS
|
#ifdef PICOLIBC_TLS
|
||||||
#define configUSE_PICOLIBC_TLS 1
|
#define configUSE_PICOLIBC_TLS 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define configUSE_PREEMPTION 1
|
#define configUSE_PREEMPTION 1
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
void vApplicationStackOverflowHook( TaskHandle_t pxTask,
|
void vApplicationStackOverflowHook( TaskHandle_t pxTask,
|
||||||
char * pcTaskName );
|
char * pcTaskName );
|
||||||
|
@ -56,17 +57,17 @@ StackType_t uxTimerTaskStack[ configTIMER_TASK_STACK_DEPTH ];
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
#if ( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1 )
|
#if ( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1 )
|
||||||
{
|
{
|
||||||
main_blinky();
|
main_blinky();
|
||||||
}
|
}
|
||||||
#elif ( mainCREATE_FULL_DEMO_ONLY == 1 )
|
#elif ( mainCREATE_FULL_DEMO_ONLY == 1 )
|
||||||
{
|
{
|
||||||
main_full();
|
main_full();
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
#error "Invalid Selection...\nPlease Select a Demo application from the main command"
|
#error "Invalid Selection...\nPlease Select a Demo application from the main command"
|
||||||
}
|
}
|
||||||
#endif /* if ( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1 ) */
|
#endif /* if ( mainCREATE_SIMPLE_BLINKY_DEMO_ONLY == 1 ) */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -108,11 +109,11 @@ void vApplicationStackOverflowHook( TaskHandle_t pxTask,
|
||||||
void vApplicationIdleHook( void )
|
void vApplicationIdleHook( void )
|
||||||
{
|
{
|
||||||
#if ( mainCREATE_FULL_DEMO_ONLY == 1 )
|
#if ( mainCREATE_FULL_DEMO_ONLY == 1 )
|
||||||
{
|
{
|
||||||
/* Call the idle task processing used by the full demo. The simple
|
/* Call the idle task processing used by the full demo. The simple
|
||||||
* blinky demo does not use the idle task hook. */
|
* blinky demo does not use the idle task hook. */
|
||||||
vFullDemoIdleFunction();
|
vFullDemoIdleFunction();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
@ -120,28 +121,28 @@ void vApplicationIdleHook( void )
|
||||||
void vApplicationTickHook( void )
|
void vApplicationTickHook( void )
|
||||||
{
|
{
|
||||||
#if ( mainCREATE_FULL_DEMO_ONLY == 1 )
|
#if ( mainCREATE_FULL_DEMO_ONLY == 1 )
|
||||||
{
|
{
|
||||||
vFullDemoTickHookFunction();
|
vFullDemoTickHookFunction();
|
||||||
}
|
}
|
||||||
#endif /* mainSELECTED_APPLICATION */
|
#endif /* mainSELECTED_APPLICATION */
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
|
|
||||||
void vAssertCalled( void )
|
void vAssertCalled( const char * pcFileName,
|
||||||
|
int line )
|
||||||
{
|
{
|
||||||
volatile unsigned long looping = 0;
|
printf( "Assertion failed at %s: %d\n", pcFileName, line );
|
||||||
|
fflush( NULL );
|
||||||
|
|
||||||
taskENTER_CRITICAL();
|
while( 1 )
|
||||||
{
|
{
|
||||||
/* Use the debugger to set ul to a non-zero value in order to step out
|
asm ( "nop" );
|
||||||
* of this function to determine why it was called. */
|
|
||||||
while( looping == 0LU )
|
|
||||||
{
|
|
||||||
portNOP();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
taskEXIT_CRITICAL();
|
|
||||||
|
exit( 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*-----------------------------------------------------------*/
|
/*-----------------------------------------------------------*/
|
||||||
void vLoggingPrintf( const char * pcFormat,
|
void vLoggingPrintf( const char * pcFormat,
|
||||||
... )
|
... )
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue