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

📄 main.c

📁 FreeRTOS is a portable, open source, mini Real Time Kernel - a free to download and royalty free RTO
💻 C
📖 第 1 页 / 共 2 页
字号:
		if( prvCheckOtherTasksAreStillRunning() != pdPASS )
		{
			/* An error occurred in one of the tasks so shorten the delay 
			period - which has the effect of increasing the frequency of the
			LED toggle. */
			xDelayPeriod = mainERROR_CHECK_DELAY;
		}

		/* Flash! */
		vParTestToggleLED( mainCHECK_TEST_LED );
	}
}
/*-----------------------------------------------------------*/

static void prvSetupHardware( void )
{
	XCache_EnableICache( 0x80000000 );
	XCache_EnableDCache( 0x80000000 );

	/* Setup the IO port for use with the LED outputs. */
	vParTestInitialise();
}
/*-----------------------------------------------------------*/

void prvRegTest1Pass( void )
{
	/* Called from the inline assembler - this cannot be static
	otherwise it can get optimised away. */
	ulRegTest1Counter++;
}
/*-----------------------------------------------------------*/

void prvRegTest2Pass( void )
{
	/* Called from the inline assembler - this cannot be static
	otherwise it can get optimised away. */
	ulRegTest2Counter++;
}
/*-----------------------------------------------------------*/

void prvRegTestFail( void )
{
	/* Called from the inline assembler - this cannot be static
	otherwise it can get optimised away. */
	xRegTestStatus = pdFAIL;
}
/*-----------------------------------------------------------*/

static void prvRegTestTask1( void *pvParameters )
{
	/* Just to remove compiler warning. */
	( void ) pvParameters;

	/* The first register test task as described at the top of this file.  The
	values used in the registers are different to those use in the second 
	register test task.  Also, unlike the second register test task, this task
	yields between setting the register values and subsequently checking the
	register values. */
	asm volatile
	(
		"RegTest1Start:					\n\t" \
		"								\n\t" \
		"	li		0, 301				\n\t" \
		"	mtspr	256, 0	#USPRG0		\n\t" \
		"	li		0, 501				\n\t" \
		"	mtspr	8, 0	#LR			\n\t" \
		"	li		0, 4				\n\t" \
		"	mtspr	1, 0	#XER		\n\t" \
		"								\n\t" \
		"	li		0, 1				\n\t" \
		"	li		2, 2				\n\t" \
		"	li		3, 3				\n\t" \
		"	li		4,	4				\n\t" \
		"	li		5,	5				\n\t" \
		"	li		6,	6				\n\t" \
		"	li		7,	7				\n\t" \
		"	li		8,	8				\n\t" \
		"	li		9,	9				\n\t" \
		"	li		10,	10				\n\t" \
		"	li		11,	11				\n\t" \
		"	li		12,	12				\n\t" \
		"	li		13,	13				\n\t" \
		"	li		14,	14				\n\t" \
		"	li		15,	15				\n\t" \
		"	li		16,	16				\n\t" \
		"	li		17,	17				\n\t" \
		"	li		18,	18				\n\t" \
		"	li		19,	19				\n\t" \
		"	li		20,	20				\n\t" \
		"	li		21,	21				\n\t" \
		"	li		22,	22				\n\t" \
		"	li		23,	23				\n\t" \
		"	li		24,	24				\n\t" \
		"	li		25,	25				\n\t" \
		"	li		26,	26				\n\t" \
		"	li		27,	27				\n\t" \
		"	li		28,	28				\n\t" \
		"	li		29,	29				\n\t" \
		"	li		30,	30				\n\t" \
		"	li		31,	31				\n\t" \
		"								\n\t" \
		"	sc							\n\t" \
		"	nop							\n\t" \
		"								\n\t" \
		"	cmpwi	0, 1				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	2, 2				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	3, 3				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	4, 4				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	5, 5				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	6, 6				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	7, 7				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	8, 8				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	9, 9				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	10, 10				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	11, 11				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	12, 12				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	13, 13				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	14, 14				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	15, 15				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	16, 16				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	17, 17				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	18, 18				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	19, 19				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	20, 20				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	21, 21				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	22, 22				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	23, 23				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	24, 24				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	25, 25				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	26, 26				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	27, 27				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	28, 28				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	29, 29				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	30, 30				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	cmpwi	31, 31				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"								\n\t" \
		"	mfspr	0, 256	#USPRG0		\n\t" \
		"	cmpwi	0, 301				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	mfspr	0, 8	#LR			\n\t" \
		"	cmpwi	0, 501				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"	mfspr	0, 1	#XER		\n\t" \
		"	cmpwi	0, 4				\n\t" \
		"	bne	RegTest1Fail			\n\t" \
		"								\n\t" \
		"	bl prvRegTest1Pass			\n\t" \
		"	b RegTest1Start				\n\t" \
		"								\n\t" \
		"RegTest1Fail:					\n\t" \
		"								\n\t" \
		"								\n\t" \
		"	bl prvRegTestFail			\n\t" \
		"	b RegTest1Start				\n\t" \
	);
}
/*-----------------------------------------------------------*/

static void prvRegTestTask2( void *pvParameters )
{
	/* Just to remove compiler warning. */
	( void ) pvParameters;

	/* The second register test task as described at the top of this file.  
	Note that this task fills the registers with different values to the
	first register test task. */
	asm volatile
	(
		"RegTest2Start:					\n\t" \
		"								\n\t" \
		"	li		0, 300				\n\t" \
		"	mtspr	256, 0	#USPRG0		\n\t" \
		"	li		0, 500				\n\t" \
		"	mtspr	8, 0	#LR			\n\t" \
		"	li		0, 4				\n\t" \
		"	mtspr	1, 0	#XER		\n\t" \
		"								\n\t" \
		"	li		0, 11				\n\t" \
		"	li		2, 12				\n\t" \
		"	li		3, 13				\n\t" \
		"	li		4,	14				\n\t" \
		"	li		5,	15				\n\t" \
		"	li		6,	16				\n\t" \
		"	li		7,	17				\n\t" \
		"	li		8,	18				\n\t" \
		"	li		9,	19				\n\t" \
		"	li		10,	110				\n\t" \
		"	li		11,	111				\n\t" \
		"	li		12,	112				\n\t" \
		"	li		13,	113				\n\t" \
		"	li		14,	114				\n\t" \
		"	li		15,	115				\n\t" \
		"	li		16,	116				\n\t" \
		"	li		17,	117				\n\t" \
		"	li		18,	118				\n\t" \
		"	li		19,	119				\n\t" \
		"	li		20,	120				\n\t" \
		"	li		21,	121				\n\t" \
		"	li		22,	122				\n\t" \
		"	li		23,	123				\n\t" \
		"	li		24,	124				\n\t" \
		"	li		25,	125				\n\t" \
		"	li		26,	126				\n\t" \
		"	li		27,	127				\n\t" \
		"	li		28,	128				\n\t" \
		"	li		29,	129				\n\t" \
		"	li		30,	130				\n\t" \
		"	li		31,	131				\n\t" \
		"								\n\t" \
		"	cmpwi	0, 11				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	2, 12				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	3, 13				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	4, 14				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	5, 15				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	6, 16				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	7, 17				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	8, 18				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	9, 19				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	10, 110				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	11, 111				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	12, 112				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	13, 113				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	14, 114				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	15, 115				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	16, 116				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	17, 117				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	18, 118				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	19, 119				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	20, 120				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	21, 121				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	22, 122				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	23, 123				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	24, 124				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	25, 125				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	26, 126				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	27, 127				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	28, 128				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	29, 129				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	30, 130				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	cmpwi	31, 131				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"								\n\t" \
		"	mfspr	0, 256	#USPRG0		\n\t" \
		"	cmpwi	0, 300				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	mfspr	0, 8	#LR			\n\t" \
		"	cmpwi	0, 500				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"	mfspr	0, 1	#XER		\n\t" \
		"	cmpwi	0, 4				\n\t" \
		"	bne	RegTest2Fail			\n\t" \
		"								\n\t" \
		"	bl prvRegTest2Pass			\n\t" \
		"	b RegTest2Start				\n\t" \
		"								\n\t" \
		"RegTest2Fail:					\n\t" \
		"								\n\t" \
		"								\n\t" \
		"	bl prvRegTestFail			\n\t" \
		"	b RegTest2Start				\n\t" \
	);
}
/*-----------------------------------------------------------*/

/* This hook function will get called if there is a suspected stack overflow.
An overflow can cause the task name to be corrupted, in which case the task
handle needs to be used to determine the offending task. */
void vApplicationStackOverflowHook( xTaskHandle xTask, signed portCHAR *pcTaskName );
void vApplicationStackOverflowHook( xTaskHandle xTask, signed portCHAR *pcTaskName )
{
/* To prevent the optimiser removing the variables. */
volatile xTaskHandle xTaskIn = xTask;
volatile signed portCHAR *pcTaskNameIn = pcTaskName;

	/* Remove compiler warnings. */
	( void ) xTaskIn;
	( void ) pcTaskNameIn;

	/* The following three calls are simply to stop compiler warnings about the
	functions not being used - they are called from the inline assembly. */
	prvRegTest1Pass();
	prvRegTest2Pass();
	prvRegTestFail();

	for( ;; );
}



⌨️ 快捷键说明

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