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

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

?? portmacro.h

?? 開源ZigBee 協(xié)議棧
?? H
字號:
/*
	FreeRTOS V3.2.0 - Copyright (C) 2003 - 2005 Richard Barry.

	This file is part of the FreeRTOS distribution.

	FreeRTOS 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 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; 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, 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.
	***************************************************************************
*/


#ifndef PORTMACRO_H
#define PORTMACRO_H

/*-----------------------------------------------------------
 * Port specific definitions.
 *
 * The settings in this file configure FreeRTOS correctly for the
 * given hardware and compiler.
 *
 * These settings should not be altered.
 *-----------------------------------------------------------
 */

/* Type definitions. */
#define portCHAR		char
#define portFLOAT		float
#define portDOUBLE		double
#define portLONG		long
#define portSHORT		short
#define portSTACK_TYPE	unsigned portLONG
#define portBASE_TYPE	long

#if( configUSE_16_BIT_TICKS == 1 )
	typedef unsigned portSHORT portTickType;
	#define portMAX_DELAY ( portTickType ) 0xffff
#else
	typedef unsigned portLONG portTickType;
	#define portMAX_DELAY ( portTickType ) 0xffffffff
#endif
/*-----------------------------------------------------------*/

/* Hardware specifics. */
#define portSTACK_GROWTH			( -1 )
#define portTICK_RATE_MS			( ( portTickType ) 1000 / configTICK_RATE_HZ )
#define portBYTE_ALIGNMENT			4
#define portYIELD()					asm volatile ( "SWI" );

/*
 * These define the timer to use for generating the tick interrupt.
 * They are put in this file so they can be shared between "port.c"
 * and "portisr.c".
 */
#define portTIMER_REG_BASE_PTR		AT91C_BASE_TC0
#define portTIMER_CLK_ENABLE_BIT	AT91C_PS_TC0
#define portTIMER_AIC_CHANNEL		( ( unsigned portLONG ) 4 )
/*-----------------------------------------------------------*/

/* Task utilities. */

/*
 * portRESTORE_CONTEXT, portRESTORE_CONTEXT, portENTER_SWITCHING_ISR
 * and portEXIT_SWITCHING_ISR can only be called from ARM mode, but
 * are included here for efficiency.  An attempt to call one from
 * THUMB mode code will result in a compile time error.
 */

#define portRESTORE_CONTEXT()											\
{																		\
extern volatile void * volatile pxCurrentTCB;							\
extern volatile unsigned portLONG ulCriticalNesting;					\
																		\
	/* Set the LR to the task stack. */									\
	asm volatile ( "LDR		R0, %0" : : "m" (pxCurrentTCB) );			\
	asm volatile ( "LDR		LR, [R0]" );								\
																		\
	/* The critical nesting depth is the first item on the stack. */	\
	/* Load it into the ulCriticalNesting variable. */					\
	asm volatile ( "LDR		R0, =ulCriticalNesting" );					\
	asm volatile ( "LDMFD	LR!, {R1}" );								\
	asm volatile ( "STR		R1, [R0]" );								\
																		\
	/* Get the SPSR from the stack. */									\
	asm volatile ( "LDMFD	LR!, {R0}" );								\
	asm volatile ( "MSR		SPSR, R0" );								\
																		\
	/* Restore all system mode registers for the task. */				\
	asm volatile ( "LDMFD	LR, {R0-R14}^" );							\
	asm volatile ( "NOP" );												\
																		\
	/* Restore the return address. */									\
	asm volatile ( "LDR		LR, [LR, #+60]" );							\
																		\
	/* And return - correcting the offset in the LR to obtain the */	\
	/* correct address. */												\
	asm volatile ( "SUBS	PC, LR, #4" );								\
	( void ) ulCriticalNesting;											\
}
/*-----------------------------------------------------------*/

#define portSAVE_CONTEXT()												\
{																		\
extern volatile void * volatile pxCurrentTCB;							\
extern volatile unsigned portLONG ulCriticalNesting;					\
																		\
	/* Push R0 as we are going to use the register. */					\
	asm volatile ( "STMDB	SP!, {R0}" );								\
																		\
	/* Set R0 to point to the task stack pointer. */					\
	asm volatile ( "STMDB	SP,{SP}^" );								\
	asm volatile ( "SUB		SP, SP, #4" );								\
	asm volatile ( "LDMIA	SP!,{R0}" );								\
																		\
	/* Push the return address onto the stack. */						\
	asm volatile ( "STMDB	R0!, {LR}" );								\
																		\
	/* Now we have saved LR we can use it instead of R0. */				\
	asm volatile ( "MOV		LR, R0" );									\
																		\
	/* Pop R0 so we can save it onto the system mode stack. */			\
	asm volatile ( "LDMIA	SP!, {R0}" );								\
																		\
	/* Push all the system mode registers onto the task stack. */		\
	asm volatile ( "STMDB	LR,{R0-LR}^");								\
	asm volatile ( "SUB		LR, LR, #60" );								\
																		\
	/* Push the SPSR onto the task stack. */							\
	asm volatile ( "MRS		R0, SPSR" );								\
	asm volatile ( "STMDB	LR!, {R0}" );								\
																		\
	asm volatile ( "LDR		R0, =ulCriticalNesting " );					\
	asm volatile ( "LDR		R0, [R0]" );								\
	asm volatile ( "STMDB	LR!, {R0}" );								\
																		\
	/* Store the new top of stack for the task. */						\
	asm volatile ( "LDR		R0, %0" : : "m" (pxCurrentTCB) );			\
	asm volatile ( "STR		LR, [R0]" );								\
	( void ) ulCriticalNesting;											\
}

/*-----------------------------------------------------------
 * ISR entry and exit macros.  These are only required if a task switch
 * is required from the ISR.
 *----------------------------------------------------------*/

#define portENTER_SWITCHING_ISR()										\
	/* Save the context of the interrupted task. */						\
	portSAVE_CONTEXT();													\
																		\
	/* We don't know the stack requirements for the ISR, so the frame */\
	/* pointer will be set to the top of the task stack, and the stack*/\
	/* pointer left where it is.  The IRQ stack will get used for any */\
	/* functions calls made by this ISR. */								\
	asm volatile ( "MOV		R11, LR" );									\
	{

#define portEXIT_SWITCHING_ISR( SwitchRequired )						\
		/* If a switch is required then we just need to call */			\
		/* vTaskSwitchContext() as the context has already been */		\
		/* saved. */													\
		if( SwitchRequired )											\
		{																\
			vTaskSwitchContext();										\
		}																\
	}																	\
	/* Restore the context of which ever task is now the highest */		\
	/* priority that is ready to run. */								\
	portRESTORE_CONTEXT();
/*-----------------------------------------------------------*/

/* Critical section handling. */

/*
 * The interrupt management utilities can only be called from ARM mode.  When
 * THUMB_INTERWORK is defined the utilities are defined as functions in
 * portISR.c to ensure a switch to ARM mode.  When THUMB_INTERWORK is not
 * defined then the utilities are defined as macros here - as per other ports.
 */

#ifdef THUMB_INTERWORK

	extern void vPortDisableInterruptsFromThumb( void ) __attribute__ ((naked));
	extern void vPortEnableInterruptsFromThumb( void ) __attribute__ ((naked));

	#define portDISABLE_INTERRUPTS()	vPortDisableInterruptsFromThumb()
	#define portENABLE_INTERRUPTS()		vPortEnableInterruptsFromThumb()

#else

	#define portDISABLE_INTERRUPTS()																\
		asm volatile ( "STMDB	SP!, {R0}" );		/* Push R0.									*/	\
		asm volatile ( "MRS		R0, CPSR" );		/* Get CPSR.								*/	\
		asm volatile ( "ORR		R0, R0, #0xC0" );	/* Disable IRQ, FIQ.						*/	\
		asm volatile ( "MSR		CPSR, R0" );		/* Write back modified value.				*/	\
		asm volatile ( "LDMIA	SP!, {R0}" )		/* Pop R0.									*/

	#define portENABLE_INTERRUPTS()																	\
		asm volatile ( "STMDB	SP!, {R0}" );		/* Push R0.									*/	\
		asm volatile ( "MRS		R0, CPSR" );		/* Get CPSR.								*/	\
		asm volatile ( "BIC		R0, R0, #0xC0" );	/* Enable IRQ, FIQ.							*/	\
		asm volatile ( "MSR		CPSR, R0" );		/* Write back modified value.				*/	\
		asm volatile ( "LDMIA	SP!, {R0}" )		/* Pop R0. */

#endif /* THUMB_INTERWORK */

extern void vPortEnterCritical( void );
extern void vPortExitCritical( void );

#define portENTER_CRITICAL()		vPortEnterCritical();
#define portEXIT_CRITICAL()			vPortExitCritical();

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

/* Task function macros as described on the FreeRTOS.org WEB site. */
#define portTASK_FUNCTION_PROTO( vFunction, pvParameters ) void vFunction( void *pvParameters )
#define portTASK_FUNCTION( vFunction, pvParameters ) void vFunction( void *pvParameters )

#endif /* PORTMACRO_H */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本麻豆一区二区三区视频| 欧美一区二区三区四区五区 | 国产亚洲一区二区三区在线观看| 日本韩国欧美在线| 99久久精品国产麻豆演员表| 国产成人av电影在线播放| 国产99久久精品| 91亚洲资源网| 欧美色图片你懂的| 欧美日韩精品高清| 久久久久国产精品麻豆ai换脸| 久久伊人中文字幕| 亚洲精品成人天堂一二三| 一区2区3区在线看| 极品少妇xxxx精品少妇| 成人黄色一级视频| 777奇米四色成人影色区| 日韩女优av电影在线观看| 国产精品网站在线| 美女视频网站久久| 91免费看片在线观看| 日韩视频免费直播| 亚洲精品视频自拍| 欧美色中文字幕| 日韩欧美一区二区免费| 亚洲色图清纯唯美| 狠狠色狠狠色综合系列| 91高清视频在线| 国产欧美日韩视频一区二区 | 亚洲一区二三区| av电影在线观看完整版一区二区| 欧美午夜不卡在线观看免费| 久久精品亚洲一区二区三区浴池| 日韩在线a电影| 欧美在线观看视频一区二区三区| 日本一区二区成人| 国产91精品久久久久久久网曝门 | 亚洲综合图片区| 色婷婷精品大在线视频| 国产精品传媒在线| 国产馆精品极品| 国产欧美精品一区二区色综合| 男男gaygay亚洲| 精品免费视频.| 国产麻豆精品在线| 国产女同性恋一区二区| 国产一区三区三区| 欧美韩国一区二区| 色婷婷综合久久久久中文一区二区| 国产精品免费av| 日本韩国欧美在线| 美国一区二区三区在线播放| 日韩精品一区二区三区在线观看| 国产综合色产在线精品| 国产欧美一区二区三区在线看蜜臀| 国产在线不卡一卡二卡三卡四卡| 日韩午夜小视频| 成人精品免费网站| 三级精品在线观看| 国产精品麻豆一区二区| 欧美久久久影院| 国产成人免费在线| 亚洲高清三级视频| 国产丝袜在线精品| 欧美一区二区三区视频在线 | 精品久久久久久久久久久久久久久 | 国产精品久久久久久久久免费桃花 | 欧美综合天天夜夜久久| 久久精品国产亚洲一区二区三区| 国产视频一区在线观看| 91视频91自| 美日韩一级片在线观看| 亚洲精品va在线观看| 久久久亚洲午夜电影| 制服丝袜中文字幕亚洲| 成人18精品视频| 紧缚捆绑精品一区二区| 亚洲国产欧美日韩另类综合 | 国产一区999| 精品一区二区三区蜜桃| 亚洲成在线观看| 亚洲午夜三级在线| 一区二区免费在线| 亚洲日本在线天堂| 亚洲人成亚洲人成在线观看图片 | 亚洲色图第一区| 国产欧美日本一区视频| 欧美变态tickling挠脚心| 精品视频免费看| 欧美一区二区三区日韩视频| 欧美日韩一区在线观看| 欧美色视频一区| 欧美一区二区视频在线观看2020| 777奇米四色成人影色区| 欧美精品一二三| 91精品国产综合久久久久久久久久 | 色噜噜狠狠成人中文综合| 色激情天天射综合网| 91视频国产观看| 欧美一区二区三区公司| 日韩精品中文字幕在线不卡尤物| xvideos.蜜桃一区二区| 国产精品色眯眯| 亚洲国产美女搞黄色| 蜜臀av性久久久久蜜臀aⅴ| 国产综合久久久久久久久久久久| 国产99精品国产| 欧美日韩精品是欧美日韩精品| 欧美高清视频一二三区 | 美女视频黄 久久| 粉嫩一区二区三区性色av| 欧美视频一区在线| 欧美激情艳妇裸体舞| 亚洲va国产天堂va久久en| 国产成人在线免费观看| 日韩一本二本av| 一区二区三区欧美激情| 国产成人在线视频网址| 91精品国产一区二区三区香蕉| 欧美韩国一区二区| 国产在线不卡视频| 日韩午夜电影av| 婷婷久久综合九色综合绿巨人| 高清在线不卡av| 久久久亚洲国产美女国产盗摄| 亚洲综合一二三区| 国产精品18久久久久久久久| 日本福利一区二区| 自拍偷拍欧美精品| 国产成人午夜精品5599| www国产成人免费观看视频 深夜成人网| 综合激情网...| av电影在线不卡| 国产精品久久久久久久久快鸭 | 欧美一区二区女人| 婷婷国产在线综合| 欧美一级视频精品观看| 久久草av在线| 欧美国产精品一区二区三区| 国产精品一级二级三级| 久久青草欧美一区二区三区| 国产精品一区一区三区| 亚洲国产高清在线| 在线日韩av片| 精品亚洲porn| 国产精品青草久久| 欧美视频日韩视频在线观看| 丝袜亚洲另类欧美综合| 精品福利一区二区三区| 北条麻妃国产九九精品视频| 亚洲成人免费在线| 五月天一区二区| 国产一区中文字幕| 午夜欧美视频在线观看 | 成人自拍视频在线| 亚洲免费在线观看| 91精品免费在线观看| 国产精品一二三四五| 欧美激情中文不卡| 7777精品伊人久久久大香线蕉的 | 色哟哟一区二区在线观看| 免费久久精品视频| 亚洲一二三四在线| 久久女同精品一区二区| 欧美精品色一区二区三区| caoporn国产一区二区| 久久99精品国产91久久来源| 亚洲国产成人av| 亚洲精品成a人| 亚洲一二三区在线观看| 亚洲欧洲国产日韩| 国产女人18毛片水真多成人如厕| 91麻豆精品国产自产在线观看一区 | 国产乱人伦精品一区二区在线观看 | 日产欧产美韩系列久久99| 亚洲最大的成人av| 中文字幕佐山爱一区二区免费| 亚洲欧洲性图库| 亚洲欧美另类图片小说| 亚洲欧洲成人精品av97| 亚洲欧美偷拍三级| 亚洲综合久久久久| 亚洲午夜成aⅴ人片| 亚洲午夜精品在线| 激情欧美一区二区| 成人高清伦理免费影院在线观看| 国产乱一区二区| 一本一道波多野结衣一区二区| 97久久人人超碰| 在线播放亚洲一区| 国产亚洲精久久久久久| 亚洲视频图片小说| 午夜精品久久久久久不卡8050| 麻豆精品国产传媒mv男同| 国内精品免费**视频| 成人精品gif动图一区| 欧美日韩激情一区二区三区| 色中色一区二区| 欧美一区二区三区白人| 国产精品免费人成网站|