⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 FreeRTOS is a portable, open source, mini Real Time Kernel - a free to download and royalty free RTO
💻 C
📖 第 1 页 / 共 2 页
字号:
	{
		lReturn = pdFAIL;
	}
	
	if( xIsCreateTaskStillRunning() != pdTRUE )
	{
		lReturn = pdFAIL;
	}
	
	if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )
	{
		lReturn = pdFAIL;
	}
	
	if ( xAreGenericQueueTasksStillRunning() != pdTRUE )
	{
		lReturn = pdFAIL;
	}
	
	if ( xAreQueuePeekTasksStillRunning() != pdTRUE )
	{
		lReturn = pdFAIL;
	}

	/* Have the register test tasks found any errors? */
	if( ulRegTestError != pdFALSE )
	{
		lReturn = pdFAIL;
	}

	return lReturn;
}
/*-----------------------------------------------------------*/

static void prvSetupHardware( void )
{
	/* Allow all interrupt levels. */
	__set_il( mainINTERRUPT_LEVELS );

	/* Initialise interrupts. */
	InitIrqLevels();

	/* Initialise the ports used by the LEDs. */
	vParTestInitialise();

	/* If we are going to use the watchdog, then initialise it now. */
	#if WATCHDOG != WTC_NONE	
		InitWatchdog();
	#endif
}
/*-----------------------------------------------------------*/

/* Idle hook function. */
#if configUSE_IDLE_HOOK == 1
	void vApplicationIdleHook( void )
	{
		/* Are we using the idle task to kick the watchdog?  See watchdog.h
		for watchdog kicking options. Note this is for demonstration only
		and is not a suggested method of servicing the watchdog in a real
		application. */
		#if WATCHDOG == WTC_IN_IDLE
			Kick_Watchdog();
		#endif

		vCoRoutineSchedule();
	}
#else
	#if WATCHDOG == WTC_IN_IDLE
		#error configUSE_IDLE_HOOK must be set to 1 in FreeRTOSConfig.h if the watchdog is being cleared in the idle task hook.
	#endif
#endif

/*-----------------------------------------------------------*/

/* Tick hook function. */
#if configUSE_TICK_HOOK == 1
	void vApplicationTickHook( void )
	{
		/* Are we using the tick to kick the watchdog?  See watchdog.h
		for watchdog kicking options.  Note this is for demonstration
		only and is not a suggested method of servicing the watchdog in
		a real application. */
		#if WATCHDOG == WTC_IN_TICK
			Kick_Watchdog();
		#endif
	}
#else
	#if WATCHDOG == WTC_IN_TICK
		#error configUSE_TICK_HOOK must be set to 1 in FreeRTOSConfig.h if the watchdog is being cleared in the tick hook.
	#endif
#endif
/*-----------------------------------------------------------*/

static void vFirstRegisterTestTask( void *pvParameters )
{
extern volatile unsigned portLONG ulCriticalNesting;

	/* Fills the registers with known values (different to the values
	used in vSecondRegisterTestTask()), then checks that the registers still
	all contain the expected value.  This is done to test the context save
	and restore mechanism as this task is swapped onto and off of the CPU. */

	for( ;; )
	{
		#pragma asm
			;Load known values into each register.
			LDI	#0x11111111, R0
			LDI	#0x22222222, R1
			LDI	#0x33333333, R2
			LDI #0x44444444, R3
			LDI	#0x55555555, R4
			LDI	#0x66666666, R5
			LDI	#0x77777777, R6
			LDI	#0x88888888, R7
			LDI	#0x99999999, R8
			LDI	#0xaaaaaaaa, R9
			LDI	#0xbbbbbbbb, R10
			LDI	#0xcccccccc, R11
			LDI	#0xdddddddd, R12
			
			;Check each register still contains the expected value.
			LDI #0x11111111, R13
			CMP R13, R0
			BNE First_Set_Error

			LDI #0x22222222, R13
			CMP R13, R1
			BNE First_Set_Error

			LDI #0x33333333, R13
			CMP R13, R2
			BNE First_Set_Error

			LDI #0x44444444, R13
			CMP R13, R3
			BNE First_Set_Error

			LDI #0x55555555, R13
			CMP R13, R4
			BNE First_Set_Error

			LDI #0x66666666, R13
			CMP R13, R5
			BNE First_Set_Error

			LDI #0x77777777, R13
			CMP R13, R6
			BNE First_Set_Error

			LDI #0x88888888, R13
			CMP R13, R7
			BNE First_Set_Error

			LDI #0x99999999, R13
			CMP R13, R8
			BNE First_Set_Error

			LDI #0xaaaaaaaa, R13
			CMP R13, R9
			BNE First_Set_Error

			LDI #0xbbbbbbbb, R13
			CMP R13, R10
			BNE First_Set_Error

			LDI #0xcccccccc, R13
			CMP R13, R11
			BNE First_Set_Error

			LDI #0xdddddddd, R13
			CMP R13, R12
			BNE First_Set_Error

			BRA First_Start_Next_Loop

		First_Set_Error:

			; Latch that an error has occurred.
			LDI #_ulRegTestError, R0			
			LDI #0x00000001, R1
			ST R1, @R0


		First_Start_Next_Loop:


		#pragma endasm
	}
}
/*-----------------------------------------------------------*/

static void vSecondRegisterTestTask( void *pvParameters )
{
extern volatile unsigned portLONG ulCriticalNesting;

	/* Fills the registers with known values (different to the values
	used in vFirstRegisterTestTask()), then checks that the registers still
	all contain the expected value.  This is done to test the context save
	and restore mechanism as this task is swapped onto and off of the CPU. */

	for( ;; )
	{
		#pragma asm
			;Load known values into each register.
			LDI	#0x11111111, R1
			LDI	#0x22222222, R2
			INT #40H
			LDI	#0x33333333, R3
			LDI #0x44444444, R4
			LDI	#0x55555555, R5
			LDI	#0x66666666, R6
			LDI	#0x77777777, R7
			LDI	#0x88888888, R8
			LDI	#0x99999999, R9
			INT #40H
			LDI	#0xaaaaaaaa, R10
			LDI	#0xbbbbbbbb, R11
			LDI	#0xcccccccc, R12
			LDI	#0xdddddddd, R0
			
			;Check each register still contains the expected value.
			LDI #0x11111111, R13
			CMP R13, R1
			BNE Second_Set_Error

			LDI #0x22222222, R13
			CMP R13, R2
			BNE Second_Set_Error

			LDI #0x33333333, R13
			CMP R13, R3
			BNE Second_Set_Error

			LDI #0x44444444, R13
			CMP R13, R4
			BNE Second_Set_Error

			LDI #0x55555555, R13
			CMP R13, R5
			BNE Second_Set_Error

			INT #40H

			LDI #0x66666666, R13
			CMP R13, R6
			BNE Second_Set_Error

			LDI #0x77777777, R13
			CMP R13, R7
			BNE Second_Set_Error

			LDI #0x88888888, R13
			CMP R13, R8
			BNE Second_Set_Error

			LDI #0x99999999, R13
			CMP R13, R9
			BNE Second_Set_Error

			INT #40H

			LDI #0xaaaaaaaa, R13
			CMP R13, R10
			BNE Second_Set_Error

			LDI #0xbbbbbbbb, R13
			CMP R13, R11
			BNE Second_Set_Error

			LDI #0xcccccccc, R13
			CMP R13, R12
			BNE Second_Set_Error

			LDI #0xdddddddd, R13
			CMP R13, R0
			BNE Second_Set_Error

			BRA Second_Start_Next_Loop

		Second_Set_Error:

			; Latch that an error has occurred.
			LDI #_ulRegTestError, R0			
			LDI #0x00000001, R1
			ST R1, @R0


		Second_Start_Next_Loop:


		#pragma endasm
	}
}
/*-----------------------------------------------------------*/


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -