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

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

?? port.c

?? freertosV4.40 是一種small的嵌入式系統(tǒng)。利于嵌入式開好者入門學習嵌入式操作系統(tǒng)。通過對于源碼的學習可以很好的掌握freertos的運行機制。
?? C
字號:
/*
	FreeRTOS.org V4.4.0 - Copyright (C) 2003-2007 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.

	Also see http://www.SafeRTOS.com for an IEC 61508 compliant version along
	with commercial development and support options.
	***************************************************************************
*/


/*-----------------------------------------------------------
 * Implementation of functions defined in portable.h for the ARM7 port.
 *
 * Components that can be compiled to either ARM or THUMB mode are
 * contained in this file.  The ISR routines, which can only be compiled
 * to ARM mode are contained in portISR.c.
 *----------------------------------------------------------*/

/*
	Changes from V2.5.2
		
	+ ulCriticalNesting is now saved as part of the task context, as is 
	  therefore added to the initial task stack during pxPortInitialiseStack.
*/


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

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

/* Processor constants. */
#include "AT91SAM7X256.h"

/* Constants required to setup the task context. */
#define portINITIAL_SPSR				( ( portSTACK_TYPE ) 0x1f ) /* System mode, ARM mode, interrupts enabled. */
#define portTHUMB_MODE_BIT				( ( portSTACK_TYPE ) 0x20 )
#define portINSTRUCTION_SIZE			( ( portSTACK_TYPE ) 4 )
#define portNO_CRITICAL_SECTION_NESTING	( ( portSTACK_TYPE ) 0 )

/* Constants required to setup the tick ISR. */
#define portENABLE_TIMER			( ( unsigned portCHAR ) 0x01 )
#define portPRESCALE_VALUE			0x00
#define portINTERRUPT_ON_MATCH		( ( unsigned portLONG ) 0x01 )
#define portRESET_COUNT_ON_MATCH	( ( unsigned portLONG ) 0x02 )

/* Constants required to setup the PIT. */
#define portPIT_CLOCK_DIVISOR			( ( unsigned portLONG ) 16 )
#define portPIT_COUNTER_VALUE			( ( ( configCPU_CLOCK_HZ / portPIT_CLOCK_DIVISOR ) / 1000UL ) * portTICK_RATE_MS )

#define portINT_LEVEL_SENSITIVE  0
#define portPIT_ENABLE      	( ( unsigned portSHORT ) 0x1 << 24 )
#define portPIT_INT_ENABLE     	( ( unsigned portSHORT ) 0x1 << 25 )
/*-----------------------------------------------------------*/

/* Setup the timer to generate the tick interrupts. */
static void prvSetupTimerInterrupt( void );

/* 
 * The scheduler can only be started from ARM mode, so 
 * vPortISRStartFirstSTask() is defined in portISR.c. 
 */
extern void vPortISRStartFirstTask( void );

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

/* 
 * Initialise the stack of a task to look exactly as if a call to 
 * portSAVE_CONTEXT had been called.
 *
 * See header file for description. 
 */
portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters )
{
portSTACK_TYPE *pxOriginalTOS;

	pxOriginalTOS = pxTopOfStack;

	/* Setup the initial stack of the task.  The stack is set exactly as 
	expected by the portRESTORE_CONTEXT() macro. */

	/* First on the stack is the return address - which in this case is the
	start of the task.  The offset is added to make the return address appear
	as it would within an IRQ ISR. */
	*pxTopOfStack = ( portSTACK_TYPE ) pxCode + portINSTRUCTION_SIZE;		
	pxTopOfStack--;

	*pxTopOfStack = ( portSTACK_TYPE ) 0xaaaaaaaa;	/* R14 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) pxOriginalTOS; /* Stack used when task starts goes in R13. */
	pxTopOfStack--;
	*pxTopOfStack = ( portSTACK_TYPE ) 0x12121212;	/* R12 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x11111111;	/* R11 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x10101010;	/* R10 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x09090909;	/* R9 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x08080808;	/* R8 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x07070707;	/* R7 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x06060606;	/* R6 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x05050505;	/* R5 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x04040404;	/* R4 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x03030303;	/* R3 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x02020202;	/* R2 */
	pxTopOfStack--;	
	*pxTopOfStack = ( portSTACK_TYPE ) 0x01010101;	/* R1 */
	pxTopOfStack--;	

	/* When the task starts is will expect to find the function parameter in
	R0. */
	*pxTopOfStack = ( portSTACK_TYPE ) pvParameters; /* R0 */
	pxTopOfStack--;

	/* The last thing onto the stack is the status register, which is set for
	system mode, with interrupts enabled. */
	*pxTopOfStack = ( portSTACK_TYPE ) portINITIAL_SPSR;

	#ifdef THUMB_INTERWORK
	{
		/* We want the task to start in thumb mode. */
		*pxTopOfStack |= portTHUMB_MODE_BIT;
	}
	#endif

	pxTopOfStack--;

	/* Some optimisation levels use the stack differently to others.  This 
	means the interrupt flags cannot always be stored on the stack and will
	instead be stored in a variable, which is then saved as part of the
	tasks context. */
	*pxTopOfStack = portNO_CRITICAL_SECTION_NESTING;

	return pxTopOfStack;
}
/*-----------------------------------------------------------*/

portBASE_TYPE xPortStartScheduler( void )
{
	/* Start the timer that generates the tick ISR.  Interrupts are disabled
	here already. */
	prvSetupTimerInterrupt();

	/* Start the first task. */
	vPortISRStartFirstTask();	

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

void vPortEndScheduler( void )
{
	/* It is unlikely that the ARM port will require this function as there
	is nothing to return to.  */
}
/*-----------------------------------------------------------*/

/*
 * Setup the timer 0 to generate the tick interrupts at the required frequency.
 */
static void prvSetupTimerInterrupt( void )
{
AT91PS_PITC pxPIT = AT91C_BASE_PITC;

	/* Setup the AIC for PIT interrupts.  The interrupt routine chosen depends
	on whether the preemptive or cooperative scheduler is being used. */
	#if configUSE_PREEMPTION == 0

		extern void ( vNonPreemptiveTick ) ( void );
		AT91F_AIC_ConfigureIt( AT91C_ID_SYS, AT91C_AIC_PRIOR_HIGHEST, portINT_LEVEL_SENSITIVE, ( void (*)(void) ) vNonPreemptiveTick );

	#else
		
		extern void ( vPreemptiveTick )( void );
		AT91F_AIC_ConfigureIt( AT91C_ID_SYS, AT91C_AIC_PRIOR_HIGHEST, portINT_LEVEL_SENSITIVE, ( void (*)(void) ) vPreemptiveTick );

	#endif

	/* Configure the PIT period. */
	pxPIT->PITC_PIMR = portPIT_ENABLE | portPIT_INT_ENABLE | portPIT_COUNTER_VALUE;

	/* Enable the interrupt.  Global interrupts are disables at this point so 
	this is safe. */
    AT91C_BASE_AIC->AIC_IECR = 0x1 << AT91C_ID_SYS;
}
/*-----------------------------------------------------------*/



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产三级欧美三级日产三级99| 欧美激情在线一区二区三区| 日韩欧美激情四射| 国产欧美精品在线观看| 亚洲一区二区三区激情| 波多野洁衣一区| 国产传媒久久文化传媒| 从欧美一区二区三区| 国产精品888| 成人性视频网站| 99精品在线免费| 在线视频亚洲一区| 欧美日本精品一区二区三区| 69p69国产精品| 精品国产99国产精品| 久久久久国产精品人| 欧美激情一区二区| 亚洲精品欧美综合四区| 亚洲国产精品一区二区久久恐怖片 | 亚洲综合男人的天堂| 亚洲午夜免费视频| 美日韩一级片在线观看| 国产成人无遮挡在线视频| 99久久伊人精品| 欧美日韩极品在线观看一区| 日韩精品一区二区三区老鸭窝| 久久久精品国产免费观看同学| 国产精品人人做人人爽人人添| 亚洲另类中文字| 男人的j进女人的j一区| 丰满少妇久久久久久久| 日本道在线观看一区二区| 91精品国产品国语在线不卡| 欧美经典一区二区| 五月天中文字幕一区二区| 国产成人综合自拍| 宅男在线国产精品| 亚洲丝袜另类动漫二区| 奇米色777欧美一区二区| 成人动漫在线一区| 欧美大肚乱孕交hd孕妇| 尤物视频一区二区| 国产一区二区在线电影| 欧美视频在线观看一区| 亚洲国产精品t66y| 男女激情视频一区| 91极品视觉盛宴| 久久精品男人的天堂| 香蕉久久夜色精品国产使用方法 | 日韩午夜激情电影| 亚洲精品国产成人久久av盗摄| 久久99精品久久久久久| 欧美性生活久久| 国产精品国产精品国产专区不蜜 | 奇米精品一区二区三区四区| 99久久精品国产精品久久| 337p日本欧洲亚洲大胆精品 | 91精品国产品国语在线不卡| 亚洲人一二三区| 99精品1区2区| 国产精品福利av| 成人深夜在线观看| 久久久久国产精品麻豆ai换脸| 日韩经典中文字幕一区| 欧美理论电影在线| 亚洲777理论| 欧美视频一区在线| 亚洲综合一区二区三区| 91网上在线视频| 亚洲你懂的在线视频| jlzzjlzz亚洲日本少妇| 国产精品麻豆网站| 成人aaaa免费全部观看| 亚洲国产精品激情在线观看| 成人午夜免费电影| 国产精品女人毛片| 97se亚洲国产综合在线| 最新热久久免费视频| 高清shemale亚洲人妖| 国产女主播在线一区二区| 狠狠色丁香久久婷婷综合丁香| 精品日韩av一区二区| 国产乱国产乱300精品| 久久综合色综合88| 国产麻豆精品95视频| 国产欧美日韩视频一区二区| 不卡的电视剧免费网站有什么| 国产精品无圣光一区二区| 成人免费av在线| 亚洲色图制服诱惑| 欧美日韩国产首页| 久久99精品国产| 国产人妖乱国产精品人妖| jvid福利写真一区二区三区| 亚洲午夜在线观看视频在线| 欧美高清一级片在线| 久久国产精品72免费观看| 久久久久国产精品麻豆| 91美女福利视频| 婷婷成人激情在线网| 精品久久久久久无| 成人av网站免费| 亚洲国产欧美在线| 精品区一区二区| 成人av网在线| 日韩高清电影一区| 国产日产欧美一区| 精品视频在线视频| 国产精选一区二区三区| 亚洲欧美激情在线| 日韩视频123| 99久久伊人精品| 久久精品国产一区二区三| 亚洲国产精品传媒在线观看| 欧美中文字幕一区二区三区 | 日韩欧美综合一区| 99精品欧美一区二区蜜桃免费| 午夜精品久久久久久久99水蜜桃| 国产色综合一区| 欧美一区二区三区四区久久| 成人精品免费看| 久久精品72免费观看| 亚洲精品ww久久久久久p站| www欧美成人18+| 欧洲av一区二区嗯嗯嗯啊| 国产福利一区二区三区在线视频| 亚洲成人免费视| 亚洲人吸女人奶水| 国产日本欧洲亚洲| 久久久久久免费网| 欧美一区二区网站| 欧美在线免费视屏| 91在线小视频| 成人听书哪个软件好| 激情图区综合网| 久久国产精品99久久久久久老狼| 亚洲电影中文字幕在线观看| 亚洲欧洲精品一区二区精品久久久| 欧美r级在线观看| 在线综合亚洲欧美在线视频| 欧美视频一区在线| 欧美日韩亚洲综合| 91传媒视频在线播放| 成人黄色av电影| 国产九色sp调教91| 国产精品综合一区二区| 国模无码大尺度一区二区三区| 日本人妖一区二区| 日本不卡一区二区| 免费看日韩精品| 蜜乳av一区二区| 久久99国产乱子伦精品免费| 久久精品国产亚洲aⅴ| 老司机免费视频一区二区| 婷婷国产在线综合| 免费高清不卡av| 国产剧情一区二区| 成人h动漫精品一区二区| 国产成人日日夜夜| 成人动漫一区二区| 91国偷自产一区二区三区成为亚洲经典| 波多野结衣中文字幕一区二区三区| 丰满亚洲少妇av| 91国内精品野花午夜精品| 欧美日韩视频一区二区| 欧美一级一区二区| 26uuu久久天堂性欧美| 国产三级一区二区| 亚洲色图视频网| 日韩中文字幕不卡| 国产综合色视频| 成人午夜激情视频| 欧美日韩一区久久| 26uuu久久综合| 亚洲天堂成人在线观看| 香蕉久久一区二区不卡无毒影院 | 欧美精品日日鲁夜夜添| 日韩一级片网址| 国产精品久久久久久久裸模| 亚洲精品国产无套在线观| 婷婷国产在线综合| 高清不卡一二三区| 欧美乱妇20p| 国产精品欧美一级免费| 五月天激情综合| 国产不卡免费视频| 欧美狂野另类xxxxoooo| 国产亚洲午夜高清国产拍精品 | 国产精品久久久久永久免费观看| 亚洲色图.com| 精品中文字幕一区二区| 日本福利一区二区| 久久一二三国产| 亚洲成a天堂v人片| 国产欧美日韩综合| 亚洲超丰满肉感bbw| 国产剧情一区在线| 中文字幕av一区二区三区| 国产午夜精品久久久久久久 | 99久久久精品免费观看国产蜜|