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

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

?? portmacro.h

?? FreeRTOS V4.2.1,增加了AVR32 UC3 和 LPC2368 的支持
?? H
字號:
/*
	FreeRTOS.org V4.2.1 - 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.
	***************************************************************************
*/

/*
	Changes from V3.2.3
	
	+ Modified portENTER_SWITCHING_ISR() to allow use with GCC V4.0.1.

	Changes from V3.2.4

	+ Removed the use of the %0 parameter within the assembler macros and 
	  replaced them with hard coded registers.  This will ensure the
	  assembler does not select the link register as the temp register as
	  was occasionally happening previously.

	+ The assembler statements are now included in a single asm block rather
	  than each line having its own asm block.
*/

#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	portLONG

#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
/*-----------------------------------------------------------*/	

/* Architecture specifics. */
#define portSTACK_GROWTH			( -1 )
#define portTICK_RATE_MS			( ( portTickType ) 1000 / configTICK_RATE_HZ )		
#define portBYTE_ALIGNMENT			4
#define portNOP()					asm volatile ( "NOP" );
/*-----------------------------------------------------------*/	


/* Scheduler 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, =pxCurrentTCB								\n\t"	\
	"LDR		R0, [R0]										\n\t"	\
	"LDR		LR, [R0]										\n\t"	\
																		\
	/* The critical nesting depth is the first item on the stack. */	\
	/* Load it into the ulCriticalNesting variable. */					\
	"LDR		R0, =ulCriticalNesting							\n\t"	\
	"LDMFD	LR!, {R1}											\n\t"	\
	"STR		R1, [R0]										\n\t"	\
																		\
	/* Get the SPSR from the stack. */									\
	"LDMFD	LR!, {R0}											\n\t"	\
	"MSR		SPSR, R0										\n\t"	\
																		\
	/* Restore all system mode registers for the task. */				\
	"LDMFD	LR, {R0-R14}^										\n\t"	\
	"NOP														\n\t"	\
																		\
	/* Restore the return address. */									\
	"LDR		LR, [LR, #+60]									\n\t"	\
																		\
	/* And return - correcting the offset in the LR to obtain the */	\
	/* correct address. */												\
	"SUBS	PC, LR, #4											\n\t"	\
	);																	\
	( void ) ulCriticalNesting;											\
	( void ) pxCurrentTCB;												\
}
/*-----------------------------------------------------------*/

#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}											\n\t"	\
																		\
	/* Set R0 to point to the task stack pointer. */					\
	"STMDB	SP,{SP}^											\n\t"	\
	"NOP														\n\t"	\
	"SUB	SP, SP, #4											\n\t"	\
	"LDMIA	SP!,{R0}											\n\t"	\
																		\
	/* Push the return address onto the stack. */						\
	"STMDB	R0!, {LR}											\n\t"	\
																		\
	/* Now we have saved LR we can use it instead of R0. */				\
	"MOV	LR, R0												\n\t"	\
																		\
	/* Pop R0 so we can save it onto the system mode stack. */			\
	"LDMIA	SP!, {R0}											\n\t"	\
																		\
	/* Push all the system mode registers onto the task stack. */		\
	"STMDB	LR,{R0-LR}^											\n\t"	\
	"NOP														\n\t"	\
	"SUB	LR, LR, #60											\n\t"	\
																		\
	/* Push the SPSR onto the task stack. */							\
	"MRS	R0, SPSR											\n\t"	\
	"STMDB	LR!, {R0}											\n\t"	\
																		\
	"LDR	R0, =ulCriticalNesting								\n\t"	\
	"LDR	R0, [R0]											\n\t"	\
	"STMDB	LR!, {R0}											\n\t"	\
																		\
	/* Store the new top of stack for the task. */						\
	"LDR	R0, =pxCurrentTCB									\n\t"	\
	"LDR	R0, [R0]											\n\t"	\
	"STR	LR, [R0]											\n\t"	\
	);																	\
	( void ) ulCriticalNesting;											\
	( void ) pxCurrentTCB;												\
}


/*-----------------------------------------------------------
 * 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 ( "SUB		R11, LR, #4" );							\
	{

#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();

#define portYIELD()					asm volatile ( "SWI" );	
/*-----------------------------------------------------------*/


/* Critical section management. */

/*
 * 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}		\n\t"	/* Push R0.						*/	\
			"MRS	R0, CPSR		\n\t"	/* Get CPSR.					*/	\
			"ORR	R0, R0, #0xC0	\n\t"	/* Disable IRQ, FIQ.			*/	\
			"MSR	CPSR, R0		\n\t"	/* Write back modified value.	*/	\
			"LDMIA	SP!, {R0}			" )	/* Pop R0.						*/
			
	#define portENABLE_INTERRUPTS()												\
		asm volatile (															\
			"STMDB	SP!, {R0}		\n\t"	/* Push R0.						*/	\
			"MRS	R0, CPSR		\n\t"	/* Get CPSR.					*/	\
			"BIC	R0, R0, #0xC0	\n\t"	/* Enable IRQ, FIQ.				*/	\
			"MSR	CPSR, R0		\n\t"	/* Write back modified value.	*/	\
			"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一区二区三区免费野_久草精品视频
伊人开心综合网| 国产精品你懂的| www.日本不卡| 国产盗摄一区二区| 韩国女主播一区| 韩国三级中文字幕hd久久精品| 裸体在线国模精品偷拍| 秋霞国产午夜精品免费视频| 亚洲bt欧美bt精品| 亚洲国产日日夜夜| 日本亚洲视频在线| 精品在线观看免费| 国产精品一区二区三区四区| 国产毛片精品国产一区二区三区| 久久成人精品无人区| 狠狠色伊人亚洲综合成人| 久久超碰97中文字幕| 国产高清久久久久| 91香蕉视频黄| 欧美在线综合视频| 91精品视频网| 久久精品亚洲国产奇米99| 中文字幕久久午夜不卡| 亚洲日本一区二区| 日日噜噜夜夜狠狠视频欧美人| 蜜臀精品久久久久久蜜臀| 国产专区综合网| 91网站在线观看视频| 91传媒视频在线播放| 91精品国产综合久久久久久久久久| 日韩欧美国产麻豆| 一区精品在线播放| 日本欧美一区二区| 成人三级在线视频| 欧美又粗又大又爽| 日韩精品一区在线| 亚洲三级小视频| 免费av成人在线| 97成人超碰视| 欧美videos大乳护士334| 中文字幕国产一区二区| 午夜日韩在线观看| 国产成人av一区二区三区在线| 一本大道久久a久久精品综合| 欧美一区二区三区日韩视频| 一区二区成人在线观看| 久久99精品国产.久久久久久| 北岛玲一区二区三区四区| 制服丝袜亚洲网站| 亚洲欧美另类综合偷拍| 国内成人精品2018免费看| 色婷婷av一区二区三区软件| 精品国产污网站| 亚洲高清在线精品| 99这里都是精品| www国产亚洲精品久久麻豆| 亚洲影院免费观看| www.av精品| 久久精品夜色噜噜亚洲a∨| 丝袜诱惑制服诱惑色一区在线观看| 成人免费视频网站在线观看| 91精品国产91久久久久久一区二区| 国产精品久久久久久亚洲伦| 精品夜夜嗨av一区二区三区| 欧美三级三级三级爽爽爽| 国产精品美女视频| 国产一区二区电影| 精品免费一区二区三区| 三级亚洲高清视频| 91网址在线看| 中文字幕在线一区免费| 国产精品18久久久久久vr| 欧美变态tickling挠脚心| 午夜久久久久久电影| 日本乱码高清不卡字幕| 国产精品人妖ts系列视频| 国产盗摄一区二区三区| 欧美精品一区二区久久婷婷| 麻豆视频观看网址久久| 欧美一级欧美一级在线播放| 婷婷久久综合九色综合伊人色| 在线免费视频一区二区| 中文字幕色av一区二区三区| www.欧美.com| 亚洲色图一区二区| 色国产综合视频| 亚洲一区二区综合| 欧美三级中文字| 日本一区中文字幕| 精品久久久久久久久久久久久久久久久| 日韩影院精彩在线| 欧美不卡视频一区| 国产精品一二三区| 国产精品另类一区| 日韩欧美国产精品| 久久国产精品免费| 国产欧美一区二区三区在线老狼| 国产盗摄精品一区二区三区在线| 欧美激情一区二区三区不卡| 91猫先生在线| 天天综合天天做天天综合| 欧美一级理论性理论a| 国产中文一区二区三区| 中文字幕av不卡| 在线欧美日韩国产| 久久99国内精品| 国产精品久久久一区麻豆最新章节| 色综合久久久久网| 日韩avvvv在线播放| 久久久国产午夜精品| 99久久精品国产观看| 肉丝袜脚交视频一区二区| 精品久久国产字幕高潮| 99久久综合精品| 日本午夜精品视频在线观看| 久久综合九色综合久久久精品综合| 成人av中文字幕| 日韩成人一级片| 国产精品免费视频一区| 56国语精品自产拍在线观看| 国产福利不卡视频| 性久久久久久久久久久久| 国产日韩欧美一区二区三区乱码| 色噜噜夜夜夜综合网| 韩国成人在线视频| 亚洲一区二区在线观看视频 | www.亚洲精品| 日本vs亚洲vs韩国一区三区二区 | 欧美丝袜自拍制服另类| 久久99国产精品免费| 亚洲无线码一区二区三区| 久久久99精品免费观看不卡| 欧美专区亚洲专区| 波多野洁衣一区| 韩国av一区二区三区| 亚洲午夜一二三区视频| 国产精品色噜噜| 日韩欧美国产麻豆| 欧美日韩国产小视频| 99国产欧美久久久精品| 国产99久久久久| 另类人妖一区二区av| 性久久久久久久| 亚洲一区二区欧美| 日韩毛片视频在线看| 中文字幕免费观看一区| 久久久噜噜噜久久中文字幕色伊伊 | 国产欧美日韩在线视频| 日韩欧美国产一区在线观看| 欧美日韩免费高清一区色橹橹 | 一区二区在线电影| 国产精品美女久久久久aⅴ| 欧美成人精品高清在线播放| 欧美高清视频一二三区| 欧美日韩精品一区二区三区四区| 99麻豆久久久国产精品免费优播| 成人永久免费视频| 国产98色在线|日韩| 国产麻豆精品一区二区| 国产乱一区二区| 国产乱色国产精品免费视频| 国产一区二区福利| 岛国av在线一区| 成人国产在线观看| 97久久久精品综合88久久| 欧美精品一二三| 在线一区二区三区四区五区| 乱中年女人伦av一区二区| 亚洲va天堂va国产va久| 日日摸夜夜添夜夜添亚洲女人| 亚洲成av人片在www色猫咪| 亚洲成av人片一区二区三区| 天天色天天操综合| 裸体歌舞表演一区二区| 国产高清成人在线| 91免费看片在线观看| 欧美中文字幕一区二区三区 | 五月激情综合网| 久久不见久久见免费视频7 | 欧美一区二区网站| 日韩一级片在线播放| 久久久一区二区三区捆绑**| 国产精品美女www爽爽爽| 亚洲美女偷拍久久| 日韩精品高清不卡| 国产夫妻精品视频| 日本精品视频一区二区三区| 91.成人天堂一区| 久久精品欧美日韩| 一区二区三区毛片| 久久99精品久久久久婷婷| 成人av影院在线| 日韩一区二区在线观看| 国产精品理伦片| 亚洲成人1区2区| 国产成人av一区| 日韩一区二区三区免费看| 中文字幕在线观看一区| 视频一区视频二区中文字幕| 成人性生交大片|