亚洲欧美第一页_禁久久精品乱码_粉嫩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	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" );	
#define portNOP()					asm volatile ( "NOP" );

/*
 * 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, =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();
/*-----------------------------------------------------------*/	

/* 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}		\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一区二区三区免费野_久草精品视频
福利一区二区在线观看| 日韩一区二区三区四区 | 成人欧美一区二区三区黑人麻豆 | 精品奇米国产一区二区三区| 中文字幕精品一区二区精品绿巨人 | 国产精品卡一卡二| 婷婷国产在线综合| av男人天堂一区| 欧美一区二区日韩一区二区| 日韩毛片在线免费观看| 国产一区二区三区不卡在线观看 | 人人狠狠综合久久亚洲| 91蜜桃免费观看视频| 久久众筹精品私拍模特| 偷拍亚洲欧洲综合| 色综合天天性综合| 亚洲码国产岛国毛片在线| 久久精品国产久精国产| 在线免费观看视频一区| 国产精品第五页| 国产成人亚洲综合a∨婷婷| 3atv在线一区二区三区| 亚洲香肠在线观看| 色偷偷久久一区二区三区| 国产精品区一区二区三区| 国产一区二区三区最好精华液| 欧美日韩国产小视频| 亚洲精品中文字幕乱码三区| 成人黄色大片在线观看| 欧美激情综合五月色丁香| 国产剧情一区在线| 最新日韩av在线| 丁香六月综合激情| 国产日韩av一区二区| 国产精品中文有码| 国产日产欧产精品推荐色| 国产精品99久久久久久似苏梦涵| 欧美一区二区私人影院日本| 日本欧美一区二区| 日韩一级成人av| 极品瑜伽女神91| 国产女人水真多18毛片18精品视频 | 午夜电影久久久| 欧美精品色一区二区三区| 天堂一区二区在线| 欧美精选一区二区| 激情久久五月天| 国产亚洲美州欧州综合国| 国产91精品在线观看| 国产精品福利影院| 欧美偷拍一区二区| 免费看欧美女人艹b| 久久久美女艺术照精彩视频福利播放| 国产乱子伦视频一区二区三区| 国产欧美日产一区| 色综合久久综合中文综合网| 亚洲h动漫在线| 欧美大片在线观看一区二区| 国产白丝精品91爽爽久久 | 成人黄色片在线观看| 亚洲视频精选在线| 欧美少妇xxx| 久久国产三级精品| 国产精品乱码一区二区三区软件| aaa欧美色吧激情视频| 亚洲一二三区在线观看| 欧美成人综合网站| 成人三级伦理片| 偷拍与自拍一区| 国产精品网站在线| 7777精品伊人久久久大香线蕉完整版 | 欧美韩国日本不卡| jlzzjlzz亚洲女人18| 婷婷亚洲久悠悠色悠在线播放| www久久久久| 色老汉av一区二区三区| 日本伊人色综合网| 国产精品理伦片| 日韩欧美中文一区| 91麻豆成人久久精品二区三区| 日本午夜一区二区| 亚洲色图19p| 精品久久久影院| 欧美亚洲高清一区二区三区不卡| 国产一区二区三区在线观看免费视频| 亚洲同性同志一二三专区| 欧美xxxx在线观看| 欧洲视频一区二区| 国产91精品一区二区麻豆亚洲| 无码av免费一区二区三区试看| 国产精品久久久久国产精品日日 | 97精品国产露脸对白| 免费观看成人av| 亚洲午夜精品网| 国产精品久久久久久久久图文区| 日韩欧美在线一区二区三区| 欧美日韩亚洲国产综合| 91一区二区三区在线播放| 国产乱人伦偷精品视频免下载| 亚洲美女视频一区| 国产精品无圣光一区二区| 91精品国产入口| 欧美三级中文字| 91视频xxxx| 99久久精品免费看| 成人性视频网站| 国产精品456露脸| 日本不卡的三区四区五区| 亚洲午夜在线视频| 亚洲激情在线播放| 亚洲天堂网中文字| 国产精品电影一区二区| 国产精品你懂的在线| 国产精品午夜电影| 中文字幕第一区| 国产精品久久久久精k8| 国产精品美女一区二区在线观看| 久久亚洲一区二区三区明星换脸| 精品美女被调教视频大全网站| 678五月天丁香亚洲综合网| 69堂亚洲精品首页| 欧美猛男gaygay网站| 欧美剧情电影在线观看完整版免费励志电影 | 91.com在线观看| 欧美一区二区视频免费观看| 91精品国产色综合久久ai换脸| 欧美美女喷水视频| 日韩一级黄色大片| 精品国产乱码久久久久久浪潮| 精品国产成人在线影院| 欧美国产日韩一二三区| 国产精品女同互慰在线看 | 2022国产精品视频| 日本一区二区综合亚洲| 国产精品久久久久久久午夜片 | 樱桃国产成人精品视频| 亚洲大片免费看| 美腿丝袜在线亚洲一区| 国产麻豆精品视频| 91女人视频在线观看| 欧美色图在线观看| 精品国产91亚洲一区二区三区婷婷| 精品国产乱码久久久久久夜甘婷婷 | 首页国产丝袜综合| 精彩视频一区二区| av午夜精品一区二区三区| 91国产丝袜在线播放| 91精品国产综合久久福利软件| 久久女同精品一区二区| 中文字幕日韩一区| 水蜜桃久久夜色精品一区的特点| 激情综合色综合久久| 国产成人h网站| 欧美日韩日日骚| 久久综合九色综合久久久精品综合| 国产精品电影一区二区三区| 午夜精品aaa| 不卡av在线免费观看| 在线不卡中文字幕播放| 中文字幕av一区 二区| 五月婷婷综合激情| 成人精品免费看| 欧美一区二区三区不卡| 亚洲视频香蕉人妖| 91激情五月电影| 精品国产乱码久久久久久1区2区 | 精品国产一二三| 亚洲综合丝袜美腿| 国产成人自拍网| 欧美欧美欧美欧美| 国产精品第五页| 激情国产一区二区| 欧美三级视频在线| 综合久久一区二区三区| 国产在线不卡一区| 欧美日韩一区中文字幕| 国产精品久久久久精k8| 久久99国产精品成人| 欧美色综合网站| 亚洲激情在线激情| 成人精品免费看| 久久久久久久综合日本| 国产欧美日韩亚州综合 | 奇米色一区二区| 在线观看91精品国产入口| 国产日韩欧美亚洲| 国内精品久久久久影院色| 欧美一区二区人人喊爽| 亚洲综合成人网| 色婷婷av一区二区三区gif| 久久精品人人做| 国产主播一区二区三区| 欧美一卡二卡在线观看| 五月婷婷激情综合网| 欧美在线观看18| 一区二区日韩av| 欧美在线观看视频在线| 一区二区三区高清| 欧美中文字幕不卡| 亚洲一区二区在线免费观看视频|