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

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

?? port.c

?? 超好的嵌入式操作系統學習代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
}
/*-----------------------------------------------------------*/

__attribute__((__naked__)) void SCALLYield( void )
{
	/* Save the context of the interrupted task. */
	portSAVE_CONTEXT_SCALL();
	vTaskSwitchContext();
	portRESTORE_CONTEXT_SCALL();
}
/*-----------------------------------------------------------*/

/* The code generated by the GCC compiler uses the stack in different ways at
different optimisation levels.  The interrupt flags can therefore not always
be saved to the stack.  Instead the critical section nesting level is stored
in a variable, which is then saved as part of the stack context. */
__attribute__((__noinline__)) void vPortEnterCritical( void )
{
	/* Disable interrupts */
	portDISABLE_INTERRUPTS();

	/* Now interrupts are disabled ulCriticalNesting can be accessed
	 directly.  Increment ulCriticalNesting to keep a count of how many times
	 portENTER_CRITICAL() has been called. */
	ulCriticalNesting++;
}
/*-----------------------------------------------------------*/

__attribute__((__noinline__)) void vPortExitCritical( void )
{
	if(ulCriticalNesting > portNO_CRITICAL_NESTING)
	{
		ulCriticalNesting--;
		if( ulCriticalNesting == portNO_CRITICAL_NESTING )
		{
			/* Enable all interrupt/exception. */
			portENABLE_INTERRUPTS();
		}
	}
}
/*-----------------------------------------------------------*/

/*
 * 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 )
{
	/* Setup the initial stack of the task.  The stack is set exactly as
	expected by the portRESTORE_CONTEXT() macro. */

	/* When the task starts, it will expect to find the function parameter in R12. */
	pxTopOfStack--;
	*pxTopOfStack-- = ( portSTACK_TYPE ) 0x08080808;					/* R8 */
	*pxTopOfStack-- = ( portSTACK_TYPE ) 0x09090909;					/* R9 */
	*pxTopOfStack-- = ( portSTACK_TYPE ) 0x0A0A0A0A;					/* R10 */
	*pxTopOfStack-- = ( portSTACK_TYPE ) 0x0B0B0B0B;					/* R11 */
	*pxTopOfStack-- = ( portSTACK_TYPE ) pvParameters;					/* R12 */
	*pxTopOfStack-- = ( portSTACK_TYPE ) 0xDEADBEEF;					/* R14/LR */
	*pxTopOfStack-- = ( portSTACK_TYPE ) pxCode + portINSTRUCTION_SIZE; /* R15/PC */
	*pxTopOfStack-- = ( portSTACK_TYPE ) portINITIAL_SR;				/* SR */
	*pxTopOfStack-- = ( portSTACK_TYPE ) 0xFF0000FF;					/* R0 */
	*pxTopOfStack-- = ( portSTACK_TYPE ) 0x01010101;					/* R1 */
	*pxTopOfStack-- = ( portSTACK_TYPE ) 0x02020202;					/* R2 */
	*pxTopOfStack-- = ( portSTACK_TYPE ) 0x03030303;					/* R3 */
	*pxTopOfStack-- = ( portSTACK_TYPE ) 0x04040404;					/* R4 */
	*pxTopOfStack-- = ( portSTACK_TYPE ) 0x05050505;					/* R5 */
	*pxTopOfStack-- = ( portSTACK_TYPE ) 0x06060606;					/* R6 */
	*pxTopOfStack-- = ( portSTACK_TYPE ) 0x07070707;					/* R7 */
	*pxTopOfStack = ( portSTACK_TYPE ) portNO_CRITICAL_NESTING;			/* ulCriticalNesting */

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

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

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

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

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

/* Schedule the COUNT&COMPARE match interrupt in (configCPU_CLOCK_HZ/configTICK_RATE_HZ)
clock cycles from now. */
#if( configTICK_USE_TC==0 )
	static void prvScheduleFirstTick(void)
	{
		unsigned long lCycles;

		lCycles = Get_system_register(AVR32_COUNT);
		lCycles += (configCPU_CLOCK_HZ/configTICK_RATE_HZ);
		// If lCycles ends up to be 0, make it 1 so that the COMPARE and exception
		// generation feature does not get disabled.
		if(0 == lCycles)
		{
			lCycles++;
		}
		Set_system_register(AVR32_COMPARE, lCycles);
	}
	
	__attribute__((__noinline__)) static void prvScheduleNextTick(void)
	{
		unsigned long lCycles, lCount;

		lCycles = Get_system_register(AVR32_COMPARE);
		lCycles += (configCPU_CLOCK_HZ/configTICK_RATE_HZ);
		// If lCycles ends up to be 0, make it 1 so that the COMPARE and exception
		// generation feature does not get disabled.
		if(0 == lCycles)
		{
			lCycles++;
		}
		lCount = Get_system_register(AVR32_COUNT);
		if( lCycles < lCount )
		{		// We missed a tick, recover for the next.
			lCycles += (configCPU_CLOCK_HZ/configTICK_RATE_HZ);
		}
		Set_system_register(AVR32_COMPARE, lCycles);
	}
#else
	__attribute__((__noinline__)) static void prvClearTcInt(void)
	{
		AVR32_TC.channel[configTICK_TC_CHANNEL].sr;
	}
#endif
/*-----------------------------------------------------------*/

/* Setup the timer to generate the tick interrupts. */
static void prvSetupTimerInterrupt(void)
{
#if( configTICK_USE_TC==1 )

	volatile avr32_tc_t *tc = &AVR32_TC;

	// Options for waveform genration.
	tc_waveform_opt_t waveform_opt =
	{
	.channel  = configTICK_TC_CHANNEL,             /* Channel selection. */

	.bswtrg   = TC_EVT_EFFECT_NOOP,                /* Software trigger effect on TIOB. */
	.beevt    = TC_EVT_EFFECT_NOOP,                /* External event effect on TIOB. */
	.bcpc     = TC_EVT_EFFECT_NOOP,                /* RC compare effect on TIOB. */
	.bcpb     = TC_EVT_EFFECT_NOOP,                /* RB compare effect on TIOB. */

	.aswtrg   = TC_EVT_EFFECT_NOOP,                /* Software trigger effect on TIOA. */
	.aeevt    = TC_EVT_EFFECT_NOOP,                /* External event effect on TIOA. */
	.acpc     = TC_EVT_EFFECT_NOOP,                /* RC compare effect on TIOA: toggle. */
	.acpa     = TC_EVT_EFFECT_NOOP,                /* RA compare effect on TIOA: toggle (other possibilities are none, set and clear). */

	.wavsel   = TC_WAVEFORM_SEL_UP_MODE_RC_TRIGGER,/* Waveform selection: Up mode without automatic trigger on RC compare. */
	.enetrg   = FALSE,                             /* External event trigger enable. */
	.eevt     = 0,                                 /* External event selection. */
	.eevtedg  = TC_SEL_NO_EDGE,                    /* External event edge selection. */
	.cpcdis   = FALSE,                             /* Counter disable when RC compare. */
	.cpcstop  = FALSE,                             /* Counter clock stopped with RC compare. */

	.burst    = FALSE,                             /* Burst signal selection. */
	.clki     = FALSE,                             /* Clock inversion. */
	.tcclks   = TC_CLOCK_SOURCE_TC2                /* Internal source clock 2. */
	};

	tc_interrupt_t tc_interrupt =
	{
		.etrgs=0,
		.ldrbs=0,
		.ldras=0,
		.cpcs =1,
		.cpbs =0,
		.cpas =0,
		.lovrs=0,
		.covfs=0,
	};

#endif

	/* Disable all interrupt/exception. */
	portDISABLE_INTERRUPTS();

	/* Register the compare interrupt handler to the interrupt controller and
	enable the compare interrupt. */

	#if( configTICK_USE_TC==1 )
	{
		INTC_register_interrupt(&vTick, configTICK_TC_IRQ, INT0);

		/* Initialize the timer/counter. */
		tc_init_waveform(tc, &waveform_opt);

		/* Set the compare triggers.
		Remember TC counter is 16-bits, so counting second is not possible!
		That's why we configure it to count ms. */
		tc_write_rc( tc, configTICK_TC_CHANNEL, ( configPBA_CLOCK_HZ / 4) / configTICK_RATE_HZ );

		tc_configure_interrupts( tc, configTICK_TC_CHANNEL, &tc_interrupt );

		/* Start the timer/counter. */
		tc_start(tc, configTICK_TC_CHANNEL);
	}
	#else
	{
		INTC_register_interrupt(&vTick, AVR32_CORE_COMPARE_IRQ, INT0);
		prvScheduleFirstTick();
	}
	#endif
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产一区二区三区蜜臀| 亚洲五码中文字幕| 国产一区在线视频| 久久亚洲欧美国产精品乐播| 激情小说亚洲一区| 国产色综合一区| 北条麻妃国产九九精品视频| 亚洲日韩欧美一区二区在线| 欧美在线影院一区二区| 天天色天天爱天天射综合| 日韩亚洲欧美在线观看| 国产麻豆精品视频| 亚洲人成网站精品片在线观看| 欧美精品日日鲁夜夜添| 狠狠色狠狠色综合日日91app| 日本一区二区三区视频视频| bt7086福利一区国产| 亚洲成a天堂v人片| 精品成a人在线观看| 99vv1com这只有精品| 日韩制服丝袜av| 国产亚洲精品7777| 欧美色涩在线第一页| 国产综合色精品一区二区三区| 中文字幕的久久| 欧美精品精品一区| 国产91精品久久久久久久网曝门| 一个色妞综合视频在线观看| 91精品国产色综合久久| 国产**成人网毛片九色| 日本欧美肥老太交大片| 国产精品久久久久久久午夜片| 欧美日韩高清不卡| 成人一级片网址| 奇米影视7777精品一区二区| 中文字幕一区三区| 精品日韩欧美一区二区| 色婷婷国产精品综合在线观看| 九九九久久久精品| 一个色在线综合| 国产精品麻豆视频| 日韩精品一区二区三区视频播放 | 亚洲色图在线视频| 日韩精品中文字幕在线一区| 99久久99久久精品免费观看| 久久精品国产成人一区二区三区| 亚洲麻豆国产自偷在线| 久久精品亚洲麻豆av一区二区| 欧美日韩国产123区| 99久久国产综合精品麻豆| 精彩视频一区二区| 首页国产丝袜综合| 亚洲一区二区av在线| 国产精品无码永久免费888| 欧美一级理论性理论a| 欧美性高清videossexo| 不卡视频在线看| 成人一二三区视频| 国产精品香蕉一区二区三区| 乱一区二区av| 日韩精品成人一区二区在线| 夜色激情一区二区| 亚洲婷婷在线视频| 中文字幕一区二区日韩精品绯色| 欧美精品一区二区在线观看| 日韩一区二区免费电影| 69av一区二区三区| 91.麻豆视频| 欧美高清性hdvideosex| 欧美日本在线观看| 91.com在线观看| 69p69国产精品| 日韩视频免费观看高清完整版在线观看 | 国产精品一二三四| 国产精品88888| 国产麻豆精品在线| 国产99久久久国产精品免费看| 国产精品羞羞答答xxdd| 国产大陆精品国产| 国产999精品久久| a在线播放不卡| 色八戒一区二区三区| 91久久精品网| 欧美视频一区二区在线观看| 欧美美女直播网站| 91精品啪在线观看国产60岁| 日韩欧美色电影| 久久先锋影音av鲁色资源网| 欧美激情综合五月色丁香小说| 中国av一区二区三区| 亚洲免费毛片网站| 日本视频在线一区| 国产一区免费电影| 成人性视频网站| 在线亚洲欧美专区二区| 欧美巨大另类极品videosbest | 337p亚洲精品色噜噜| 日韩一区二区三区免费观看| 26uuu色噜噜精品一区二区| 国产欧美一区二区精品性色超碰 | 亚洲摸摸操操av| 亚洲第一电影网| 美女一区二区三区在线观看| 国产成人精品免费看| 色先锋久久av资源部| 3atv在线一区二区三区| 欧美国产精品专区| 亚洲一区在线电影| 国产一区二区中文字幕| 91在线丨porny丨国产| 欧美人伦禁忌dvd放荡欲情| 精品日韩成人av| 亚洲精品中文字幕乱码三区| 全国精品久久少妇| 成人黄色一级视频| 8x福利精品第一导航| 国产精品久久久久永久免费观看 | 青青草91视频| 成人黄色一级视频| 日韩免费高清视频| 怡红院av一区二区三区| 精品一区二区三区免费播放| 色8久久人人97超碰香蕉987| 精品国产91九色蝌蚪| 一区二区三区蜜桃网| 国产一区二区三区av电影| 在线视频国内一区二区| 久久久久久久久99精品| 日韩电影在线一区二区三区| a在线欧美一区| 精品国产免费人成在线观看| 一区二区三区日韩欧美精品| 国产高清亚洲一区| 一区二区三区蜜桃| 国产精品一区在线观看乱码| 91福利在线观看| 国产亚洲午夜高清国产拍精品 | 欧美成人欧美edvon| 亚洲国产中文字幕在线视频综合| 成人免费毛片app| 精品久久人人做人人爱| 亚洲国产精品一区二区www在线| 福利一区二区在线观看| 欧美成人激情免费网| 亚洲国产精品久久人人爱蜜臀| 波多野结衣中文字幕一区| 精品精品国产高清a毛片牛牛| 亚洲国产精品精华液网站| 99精品一区二区| 国产精品你懂的| 国产精品18久久久| 欧美本精品男人aⅴ天堂| 日韩中文字幕亚洲一区二区va在线| 色94色欧美sute亚洲线路一ni | 国产精品区一区二区三区| 丁香激情综合国产| 久久午夜国产精品| 激情小说亚洲一区| 欧美xingq一区二区| 激情综合网av| 日韩欧美国产系列| 蜜桃视频在线观看一区| 欧美挠脚心视频网站| 亚洲国产欧美另类丝袜| 欧美做爰猛烈大尺度电影无法无天| 亚洲色图欧美在线| 91丨九色丨蝌蚪丨老版| 亚洲区小说区图片区qvod| 91女人视频在线观看| 亚洲免费观看在线视频| 91国偷自产一区二区三区观看| 亚洲精品乱码久久久久久黑人| 91麻豆精东视频| 一区二区三区国产精品| 欧美亚洲动漫精品| 午夜视频在线观看一区二区三区 | 欧美伦理影视网| 午夜天堂影视香蕉久久| 日韩西西人体444www| 激情综合色播激情啊| 国产精品久久影院| 一本色道久久综合亚洲精品按摩| 亚洲精品视频在线| 精品视频在线视频| 琪琪一区二区三区| 欧美激情一区在线| 色婷婷久久综合| 日韩电影免费在线观看网站| 日韩精品一区二区三区swag| 国产成人亚洲精品青草天美| 亚洲日本在线观看| 在线电影院国产精品| 韩国v欧美v亚洲v日本v| 国产精品理论片| 欧美日韩免费观看一区三区| 激情综合一区二区三区| 最新热久久免费视频| 91精品麻豆日日躁夜夜躁| 国产剧情一区二区| 一区二区三区在线视频免费观看|