亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.c

?? MCS-51的一個Free小型操作系統,在KeilC中下編譯工作
?? C
字號:
/*
	FreeRTOS.org V4.1.3 - Copyright (C) 2003-2006 Richard Barry.

	This file is part of the FreeRTOS.org distribution.

	FreeRTOS.org is free software; you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation; either version 2 of the License, or
	(at your option) any later version.

	FreeRTOS.org is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with FreeRTOS.org; if not, write to the Free Software
	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

	A special exception to the GPL can be applied should you wish to distribute
	a combined work that includes FreeRTOS.org, without being obliged to provide
	the source code for any proprietary components.  See the licensing section 
	of http://www.FreeRTOS.org for full details of how and when the exception
	can be applied.

	***************************************************************************
	See http://www.FreeRTOS.org for documentation, latest information, license 
	and contact details.  Please ensure to read the configuration and relevant 
	port sections of the online documentation.
	***************************************************************************
*/

/*
 * Creates all the demo application tasks, then starts the scheduler.  The WEB
 * documentation provides more details of the demo application tasks.
 * 
 * Main.c also creates a task called "Check".  This only executes every three 
 * seconds but has the highest priority so is guaranteed to get processor time.  
 * Its main function is to check that all the other tasks are still operational.
 * Each task (other than the "flash" tasks) maintains a unique count that is 
 * incremented each time the task successfully completes its function.  Should 
 * any error occur within such a task the count is permanently halted.  The 
 * check task inspects the count of each task to ensure it has changed since
 * the last time the check task executed.  If all the count variables have 
 * changed all the tasks are still executing error free, and the check task
 * toggles the onboard LED.  Should any task contain an error at any time 
 * the LED toggle rate will change from 3 seconds to 500ms.
 *
 * To check the operation of the memory allocator the check task also 
 * dynamically creates a task before delaying, and deletes it again when it 
 * wakes.  If memory cannot be allocated for the new task the call to xTaskCreate
 * will fail and an error is signalled.  The dynamically created task itself
 * allocates and frees memory just to give the allocator a bit more exercise.
 *
 */

/* Standard includes. */
#include <stdlib.h>
#include <string.h>

/* Scheduler include files. */
#include "FreeRTOS.h"
#include "task.h"

/* Demo application file headers. */
#include "flash.h"
#include "integer.h"
#include "PollQ.h"
#include "comtest2.h"
#include "semtest.h"
#include "flop.h"
#include "dynamic.h"
#include "BlockQ.h"
#include "serial.h"
#include "partest.h"

/* Priority definitions for most of the tasks in the demo application.  Some
tasks just use the idle priority. */
#define mainLED_TASK_PRIORITY			( tskIDLE_PRIORITY + 1 )
#define mainCOM_TEST_PRIORITY			( tskIDLE_PRIORITY + 2 )
#define mainQUEUE_POLL_PRIORITY			( tskIDLE_PRIORITY + 2 )
#define mainCHECK_TASK_PRIORITY			( tskIDLE_PRIORITY + 3 )
#define mainSEM_TEST_PRIORITY			( tskIDLE_PRIORITY + 1 )
#define mainBLOCK_Q_PRIORITY			( tskIDLE_PRIORITY + 2 )

/* Baud rate used by the serial port tasks (ComTest tasks). */
#define mainCOM_TEST_BAUD_RATE			( ( unsigned portLONG ) 115200 )

/* LED used by the serial port tasks.  This is toggled on each character Tx,
and mainCOM_TEST_LED + 1 is toggles on each character Rx. */
#define mainCOM_TEST_LED				( 3 )

/* LED that is toggled by the check task.  The check task periodically checks
that all the other tasks are operating without error.  If no errors are found
the LED is toggled with mainCHECK_PERIOD frequency.  If an error is found 
the the toggle rate increases to mainERROR_CHECK_PERIOD. */
#define mainCHECK_TASK_LED				( 5 )
#define mainCHECK_PERIOD				( ( portTickType ) 3000 / portTICK_RATE_MS  )
#define mainERROR_CHECK_PERIOD			( ( portTickType ) 500 / portTICK_RATE_MS )

/* Constants used by the vMemCheckTask() task. */
#define mainCOUNT_INITIAL_VALUE		( ( unsigned portLONG ) 0 )
#define mainNO_TASK					( 0 )

/* The size of the memory blocks allocated by the vMemCheckTask() task. */
#define mainMEM_CHECK_SIZE_1		( ( size_t ) 51 )
#define mainMEM_CHECK_SIZE_2		( ( size_t ) 52 )
#define mainMEM_CHECK_SIZE_3		( ( size_t ) 151 )

/*
 * The 'Check' task.
 */
static void vErrorChecks( void *pvParameters );

/*
 * Checks the unique counts of other tasks to ensure they are still operational.
 */
static portLONG prvCheckOtherTasksAreStillRunning( unsigned portLONG ulMemCheckTaskCount );

/*
 * Dynamically created and deleted during each cycle of the vErrorChecks()
 * task.  This is done to check the operation of the memory allocator.
 * See the top of vErrorChecks for more details.
 */
static void vMemCheckTask( void *pvParameters );

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

/*
 * Start all the tasks then start the scheduler.
 */
int main( void )
{
	/* Setup the LED's for output. */
	vParTestInitialise();

	/* Start the various standard demo application tasks. */
	vStartIntegerMathTasks( tskIDLE_PRIORITY );
	vAltStartComTestTasks( mainCOM_TEST_PRIORITY, mainCOM_TEST_BAUD_RATE, mainCOM_TEST_LED );
	vStartLEDFlashTasks( mainLED_TASK_PRIORITY );
	vStartPolledQueueTasks( mainQUEUE_POLL_PRIORITY );
	vStartMathTasks( tskIDLE_PRIORITY );
	vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );
	vStartDynamicPriorityTasks();
	vStartBlockingQueueTasks( mainBLOCK_Q_PRIORITY );

	/* Start the 'Check' task. */
	xTaskCreate( vErrorChecks, ( signed portCHAR * )"Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_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();

	/* Should never get here! */
	return 0;
}
/*-----------------------------------------------------------*/

/*
 * Cycle for ever, delaying then checking all the other tasks are still
 * operating without error.  If an error is detected then the delay period
 * is decreased from mainCHECK_PERIOD to mainERROR_CHECK_PERIOD so
 * the on board LED flash rate will increase. 
 *
 * In addition to the standard tests the memory allocator is tested through
 * the dynamic creation and deletion of a task each cycle.  Each time the 
 * task is created memory must be allocated for its stack.  When the task is
 * deleted this memory is returned to the heap.  If the task cannot be created 
 * then it is likely that the memory allocation failed.   In addition the
 * dynamically created task allocates and frees memory while it runs. 
 */
static void vErrorChecks( void *pvParameters )
{
portTickType xDelayPeriod = mainCHECK_PERIOD;
volatile unsigned portLONG ulMemCheckTaskRunningCount;
xTaskHandle xCreatedTask;
portTickType xLastWakeTime;

	/* Initialise xLastWakeTime to ensure the first call to vTaskDelayUntil()
	functions correctly. */
	xLastWakeTime = xTaskGetTickCount();

	for( ;; )
	{
		/* Set ulMemCheckTaskRunningCount to a known value so we can check
		later that it has changed. */
		ulMemCheckTaskRunningCount = mainCOUNT_INITIAL_VALUE;

		/* Dynamically create a task - passing ulMemCheckTaskRunningCount as a 
		parameter. */		
		xCreatedTask = mainNO_TASK;
		if( xTaskCreate( vMemCheckTask, ( signed portCHAR * ) "MEM_CHECK", configMINIMAL_STACK_SIZE, ( void * ) &ulMemCheckTaskRunningCount, tskIDLE_PRIORITY, &xCreatedTask ) != pdPASS )
		{
			/* Could not create the task - we have probably run out of heap. */
			xDelayPeriod = mainERROR_CHECK_PERIOD;
		}


		/* Delay until it is time to execute again.  The delay period is 
		shorter following an error. */
		vTaskDelayUntil( &xLastWakeTime, xDelayPeriod );

	
		/* Delete the dynamically created task. */
		if( xCreatedTask != mainNO_TASK )
		{
			vTaskDelete( xCreatedTask );
		}

		/* Check all the standard demo application tasks are executing without 
		error.  ulMemCheckTaskRunningCount is checked to ensure it was
		modified by the task just deleted. */
		if( prvCheckOtherTasksAreStillRunning( ulMemCheckTaskRunningCount ) != pdPASS )
		{
			/* An error has been detected in one of the tasks - flash faster. */
			xDelayPeriod = mainERROR_CHECK_PERIOD;
		}

		vParTestToggleLED( mainCHECK_TASK_LED );
	}
}
/*-----------------------------------------------------------*/

/*
 * 	Check each set of tasks in turn to see if they have experienced any
 *	error conditions. 
 */
static portLONG prvCheckOtherTasksAreStillRunning( unsigned portLONG ulMemCheckTaskCount )
{
portLONG lNoErrorsDiscovered = ( portLONG ) pdTRUE;

	if( xAreIntegerMathsTaskStillRunning() != pdTRUE )
	{
		lNoErrorsDiscovered = pdFALSE;
	}

	if( xAreComTestTasksStillRunning() != pdTRUE )
	{
		lNoErrorsDiscovered = pdFALSE;
	}

	if( xArePollingQueuesStillRunning() != pdTRUE )
	{
		lNoErrorsDiscovered = pdFALSE;
	}

	if( xAreMathsTaskStillRunning() != pdTRUE )
	{
		lNoErrorsDiscovered = pdFALSE;
	}

	if( xAreSemaphoreTasksStillRunning() != pdTRUE )
	{
		lNoErrorsDiscovered = pdFALSE;
	}

	if( xAreDynamicPriorityTasksStillRunning() != pdTRUE )
	{
		lNoErrorsDiscovered = pdFALSE;
	}

	if( xAreBlockingQueuesStillRunning() != pdTRUE )
	{
		lNoErrorsDiscovered = pdFALSE;
	}

	if( ulMemCheckTaskCount == mainCOUNT_INITIAL_VALUE )
	{
		/* The vMemCheckTask task did not increment the counter - it must
		have failed. */
		lNoErrorsDiscovered = pdFALSE;
	}

	return lNoErrorsDiscovered;
}
/*-----------------------------------------------------------*/

static void vMemCheckTask( void *pvParameters )
{
unsigned portLONG *pulMemCheckTaskRunningCounter;
void *pvMem1, *pvMem2, *pvMem3;
static portLONG lErrorOccurred = pdFALSE;

	/* This task is dynamically created then deleted during each cycle of the
	vErrorChecks task to check the operation of the memory allocator.  Each time
	the task is created memory is allocated for the stack and TCB.  Each time
	the task is deleted this memory is returned to the heap.  This task itself
	exercises the allocator by allocating and freeing blocks. 
	
	The task executes at the idle priority so does not require a delay. 
	
	pulMemCheckTaskRunningCounter is incremented each cycle to indicate to the
	vErrorChecks() task that this task is still executing without error. */

	pulMemCheckTaskRunningCounter = ( unsigned portLONG * ) pvParameters;

	for( ;; )
	{
		if( lErrorOccurred == pdFALSE )
		{
			/* We have never seen an error so increment the counter. */
			( *pulMemCheckTaskRunningCounter )++;
		}
		else
		{
			/* Reset the count so an error is detected by the 
			prvCheckOtherTasksAreStillRunning() function. */
			*pulMemCheckTaskRunningCounter = mainCOUNT_INITIAL_VALUE;
		}

		/* Allocate some memory - just to give the allocator some extra 
		exercise.  This has to be in a critical section to ensure the
		task does not get deleted while it has memory allocated. */
		vTaskSuspendAll();
		{
			pvMem1 = pvPortMalloc( mainMEM_CHECK_SIZE_1 );
			if( pvMem1 == NULL )
			{
				lErrorOccurred = pdTRUE;
			}
			else
			{
				memset( pvMem1, 0xaa, mainMEM_CHECK_SIZE_1 );
				vPortFree( pvMem1 );
			}
		}
		xTaskResumeAll();

		/* Again - with a different size block. */
		vTaskSuspendAll();
		{
			pvMem2 = pvPortMalloc( mainMEM_CHECK_SIZE_2 );
			if( pvMem2 == NULL )
			{
				lErrorOccurred = pdTRUE;
			}
			else
			{
				memset( pvMem2, 0xaa, mainMEM_CHECK_SIZE_2 );
				vPortFree( pvMem2 );
			}
		}
		xTaskResumeAll();

		/* Again - with a different size block. */
		vTaskSuspendAll();
		{
			pvMem3 = pvPortMalloc( mainMEM_CHECK_SIZE_3 );
			if( pvMem3 == NULL )
			{
				lErrorOccurred = pdTRUE;
			}
			else
			{
				memset( pvMem3, 0xaa, mainMEM_CHECK_SIZE_3 );
				vPortFree( pvMem3 );
			}
		}
		xTaskResumeAll();
	}
}
/*-----------------------------------------------------------*/

/*
 * Called by the startup code.  Initial processor setup can be placed in this
 * function.
 */
void hw_initialise (void)
{
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久er热在这里只有精品15| 亚洲视频你懂的| 成人网在线免费视频| 亚洲最大成人综合| 久久精品欧美日韩| 欧美麻豆精品久久久久久| 国产成人日日夜夜| 奇米影视一区二区三区| 亚洲手机成人高清视频| 欧美精品一区二区三| 欧美三级在线视频| 99re66热这里只有精品3直播 | 国产亚洲欧洲997久久综合| 欧美私人免费视频| 成人app在线观看| 久久精品国产99久久6| 亚洲最新在线观看| 中文字幕第一页久久| 成人性视频免费网站| 久久av中文字幕片| 亚洲国产精品欧美一二99 | 欧美极品aⅴ影院| 欧美乱妇23p| 91视频观看视频| 亚洲一区二区在线播放相泽| 91精品国产黑色紧身裤美女| 蜜乳av一区二区| 人妖欧美一区二区| 亚洲综合视频在线| 中文字幕亚洲一区二区va在线| www激情久久| 91精品国产高清一区二区三区| 99久久国产综合色|国产精品| 国产一区视频在线看| 美日韩一区二区| 亚洲成av人**亚洲成av**| 亚洲欧美日韩小说| 国产欧美精品日韩区二区麻豆天美| 日韩一区二区免费在线观看| 日本伦理一区二区| 成人动漫在线一区| 国产乱码精品1区2区3区| 琪琪久久久久日韩精品| 亚洲国产成人91porn| 亚洲一区二区中文在线| 亚洲精品欧美综合四区| 亚洲日本护士毛茸茸| 中文字幕av一区 二区| 久久理论电影网| 久久免费看少妇高潮| 久久五月婷婷丁香社区| 久久综合色8888| 久久一留热品黄| 久久综合九色综合97_久久久| 精品国产乱码久久久久久免费| 3d动漫精品啪啪1区2区免费 | 精品久久久久久久久久久久包黑料| 欧美日韩一区二区三区四区五区| 日本国产一区二区| 色欧美片视频在线观看| 色偷偷88欧美精品久久久| 91极品美女在线| 欧美性欧美巨大黑白大战| 欧美久久久久免费| 日韩欧美www| 国产亚洲短视频| 中文字幕av不卡| 亚洲男同1069视频| 亚洲成人激情av| 日韩电影在线一区| 亚洲成人自拍一区| 麻豆视频观看网址久久| 国内久久精品视频| 国产一区二区调教| 成人伦理片在线| 欧美丝袜第三区| 日韩一级在线观看| 国产亚洲视频系列| 成人免费一区二区三区视频 | 欧美一区二区三区色| 日韩一区二区三区四区五区六区| 精品奇米国产一区二区三区| 久久精品一二三| 一区二区三区免费在线观看| 视频一区二区三区在线| 色综合激情五月| 国产精品资源在线看| 成人99免费视频| 欧美视频日韩视频在线观看| 日韩网站在线看片你懂的| 欧美国产丝袜视频| 亚洲动漫第一页| 国产精品一区二区三区网站| 色综合天天狠狠| 日韩精品一区在线| 美国毛片一区二区三区| 国产精品亚洲一区二区三区在线| 色综合中文字幕国产 | 久久久国产一区二区三区四区小说 | 国产原创一区二区三区| 成人高清视频在线| 不卡的电视剧免费网站有什么| 在线视频欧美区| 精品久久一区二区三区| 中文字幕日本乱码精品影院| 午夜视频久久久久久| 国产成人午夜精品影院观看视频 | 国产精品福利av| 日本亚洲三级在线| 麻豆成人免费电影| 91丨porny丨户外露出| 欧美日韩精品二区第二页| 久久尤物电影视频在线观看| 亚洲一区二区欧美激情| 国产精品自产自拍| 91福利小视频| 国产精品美女久久久久av爽李琼| 日本强好片久久久久久aaa| 91视频国产资源| 久久无码av三级| 日本成人在线电影网| 91亚洲永久精品| 欧美国产禁国产网站cc| 美女视频一区二区| 欧美日韩亚洲综合在线 | 国产精品一区二区三区四区| 欧美绝品在线观看成人午夜影视| 亚洲欧美日韩精品久久久久| 日韩—二三区免费观看av| 色视频成人在线观看免| 久久免费午夜影院| 午夜亚洲国产au精品一区二区| 国产一区二区三区久久久| 色吧成人激情小说| 中文字幕av在线一区二区三区| 蜜桃在线一区二区三区| 欧美最猛性xxxxx直播| 国产亚洲污的网站| 裸体一区二区三区| 欧美xxxx老人做受| 亚洲国产精品成人综合色在线婷婷| 奇米精品一区二区三区在线观看 | 色综合天天综合色综合av | 国产精品女上位| 不卡一区二区中文字幕| 精品99一区二区三区| 麻豆中文一区二区| 欧美电影免费观看高清完整版在线 | 亚洲黄色录像片| 91在线观看成人| 国产亲近乱来精品视频| 亚洲综合色成人| 91丨porny丨户外露出| 欧美大片顶级少妇| 麻豆成人免费电影| 精品久久一二三区| 激情综合亚洲精品| 久久九九久久九九| 国产综合色在线视频区| 日本一区二区三区在线观看| 国产精品99久| 欧美mv和日韩mv的网站| 午夜精品久久久久久久久久| 99久久精品国产网站| 国产精品女主播在线观看| 91丝袜国产在线播放| 中文字幕在线不卡一区| 国产在线视频不卡二| 日本一区二区三级电影在线观看 | 国产精品灌醉下药二区| 成人av在线影院| 亚洲欧美另类综合偷拍| 欧美日韩一区二区在线观看 | 日韩精品久久久久久| 色婷婷久久综合| 最新热久久免费视频| 欧美亚洲图片小说| 日韩**一区毛片| 久久久久久久久一| 99久久精品一区| 亚洲国产精品精华液网站| 日韩无一区二区| 顶级嫩模精品视频在线看| 精品国产乱码久久久久久牛牛| 国产成人亚洲综合色影视| 日韩毛片在线免费观看| 91精品国产综合久久久久久漫画| 亚洲综合视频在线| 精品国产第一区二区三区观看体验 | 日韩三级视频中文字幕| 看电视剧不卡顿的网站| 欧美高清在线精品一区| 91精品福利在线一区二区三区| 首页综合国产亚洲丝袜| 国产农村妇女毛片精品久久麻豆| 在线精品视频免费播放| 激情欧美一区二区| 亚洲精品视频在线看| 国产色综合久久| 欧美日韩免费一区二区三区视频|