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

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

?? port.c

?? FreeRTOS is a portable, open source, mini Real Time Kernel - a free to download and royalty free RTO
?? C
?? 第 1 頁 / 共 2 頁
字號:
	/* Because FreeRTOS is not supposed to run with nested interrupts, put all OS
	calls in a critical section . */
	portENTER_CRITICAL();
		vTaskIncrementTick();
	portEXIT_CRITICAL();

	/* Restore the context of the "elected task". */
	portRESTORE_CONTEXT_OS_INT();
}
/*-----------------------------------------------------------*/

__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色综合久久免费分享| 亚洲色大成网站www久久九九| 色婷婷国产精品综合在线观看| 久国产精品韩国三级视频| 午夜久久久久久久久| 亚洲国产精品久久久久婷婷884| 亚洲天堂2016| 亚洲欧美成人一区二区三区| 亚洲丝袜美腿综合| 亚洲免费看黄网站| 亚洲男同性恋视频| 亚洲电影你懂得| 偷偷要91色婷婷| 老色鬼精品视频在线观看播放| 视频在线在亚洲| 蜜臀a∨国产成人精品| 麻豆精品在线看| 国产91精品在线观看| 成人av电影在线网| 欧美性猛片xxxx免费看久爱| 在线成人午夜影院| 久久综合色综合88| 国产精品免费丝袜| 一区二区三区中文字幕精品精品 | 欧美高清dvd| 91麻豆精品国产91久久久使用方法| 日韩一区二区免费电影| 久久久久99精品国产片| 国产精品国产三级国产aⅴ中文 | 久久99国产精品久久| 国产经典欧美精品| 在线免费观看视频一区| 7777精品伊人久久久大香线蕉| 欧美不卡在线视频| 亚洲私人黄色宅男| 极品瑜伽女神91| 91丨porny丨首页| 日韩亚洲欧美成人一区| 国产精品欧美一区喷水| 午夜精品爽啪视频| 一本久久精品一区二区| 在线综合亚洲欧美在线视频| 精品少妇一区二区三区免费观看| 国产欧美日韩不卡免费| 亚洲午夜av在线| 国产精品亚洲人在线观看| 欧日韩精品视频| 国产日本一区二区| 日本v片在线高清不卡在线观看| 高清在线不卡av| 日韩欧美国产成人一区二区| 亚洲色图色小说| 国产在线精品一区在线观看麻豆| 欧美在线视频不卡| 亚洲欧美偷拍另类a∨色屁股| 精品午夜久久福利影院| 欧美日韩日日摸| 中文字幕五月欧美| 国产sm精品调教视频网站| 制服丝袜亚洲网站| 一二三四区精品视频| www.亚洲色图.com| 国产日韩精品一区| 久久99蜜桃精品| 欧美一卡二卡三卡| 亚洲va国产天堂va久久en| 色婷婷激情综合| 中文字幕日本乱码精品影院| 国产成人啪免费观看软件| 日韩美女一区二区三区四区| 五月天激情综合网| 欧美视频自拍偷拍| 亚洲一级在线观看| 欧美亚洲丝袜传媒另类| 国产精品久久久久久久久久免费看| 韩国精品久久久| 精品国偷自产国产一区| 久久99国产精品久久| 欧美本精品男人aⅴ天堂| 日韩电影在线一区二区| 欧美日韩国产一区| 亚洲h动漫在线| 正在播放亚洲一区| 美女看a上一区| 26uuu另类欧美亚洲曰本| 久99久精品视频免费观看| 欧美成人一区二区三区在线观看| 人妖欧美一区二区| 精品国产伦一区二区三区免费| 激情五月激情综合网| 久久综合久久久久88| 丁香婷婷深情五月亚洲| 国产精品进线69影院| 色综合 综合色| 调教+趴+乳夹+国产+精品| 欧美精品九九99久久| 麻豆国产一区二区| 日本一区二区三区四区在线视频| 成人av影院在线| 日欧美一区二区| 精品国产乱子伦一区| 懂色av噜噜一区二区三区av| 亚洲日穴在线视频| 51午夜精品国产| 国产一二精品视频| 亚洲另类在线一区| 在线不卡中文字幕播放| 精一区二区三区| 亚洲色图都市小说| 4hu四虎永久在线影院成人| 国产一区二区三区免费在线观看| 国产欧美日韩三区| 欧美日韩午夜精品| 国产成人精品免费视频网站| 亚洲精品菠萝久久久久久久| 日韩欧美在线网站| 91影视在线播放| 日本欧美久久久久免费播放网| 中文一区二区在线观看| 欧美性视频一区二区三区| 久久er精品视频| 成人欧美一区二区三区黑人麻豆| 日韩欧美国产精品一区| 91麻豆免费视频| 激情久久久久久久久久久久久久久久| 国产精品国产三级国产三级人妇 | 91国模大尺度私拍在线视频| 日产国产高清一区二区三区| 国产精品美女久久久久久久| 91麻豆精品91久久久久久清纯| 99久久免费国产| 国模少妇一区二区三区| 天天综合网 天天综合色| 国产精品欧美一区喷水| 欧美日韩一区 二区 三区 久久精品| 久久精品久久综合| 亚洲一区二区三区国产| 亚洲色图制服丝袜| 亚洲国产精品精华液2区45| 欧美一卡2卡3卡4卡| 欧美系列一区二区| 94色蜜桃网一区二区三区| 国产精品一级黄| 国产一区久久久| 韩国成人精品a∨在线观看| 午夜国产精品一区| 亚洲va国产天堂va久久en| 亚洲一区二区3| 亚洲精品ww久久久久久p站| 成人免费小视频| 中文字幕的久久| 国产欧美一区二区三区网站| 久久这里只精品最新地址| 日韩一级成人av| 91精品国产综合久久久久久| 97成人超碰视| 高清beeg欧美| 麻豆免费精品视频| 亚洲制服欧美中文字幕中文字幕| 国产精品原创巨作av| 美女一区二区在线观看| 久久er精品视频| 日韩理论电影院| 国产精品久久久久久久久果冻传媒| 色婷婷综合五月| 欧美色图片你懂的| 成人毛片视频在线观看| 麻豆精品视频在线观看免费| 亚洲综合丁香婷婷六月香| 国产精品久久久一本精品| 日韩一区欧美一区| 国产欧美一区二区在线观看| 欧美一级一区二区| 91麻豆精品国产91久久久久久久久| 日韩成人免费电影| 韩国三级中文字幕hd久久精品| 日韩av中文字幕一区二区 | 久久久久久久久久看片| 欧美日韩亚洲综合在线| 在线一区二区三区四区| 99久久夜色精品国产网站| 伊人婷婷欧美激情| 日韩av一区二区在线影视| 亚洲午夜精品久久久久久久久| 亚洲男帅同性gay1069| 亚洲女同ⅹxx女同tv| 日韩一区二区三区四区| 国产精品免费久久| 欧美国产精品劲爆| 国产日韩高清在线| 亚洲精品一区在线观看| 色婷婷亚洲婷婷| 久久久99精品免费观看| 国产欧美一区二区三区鸳鸯浴 | 色综合久久精品| 韩日av一区二区| 韩国v欧美v日本v亚洲v| 国产一区二区三区日韩| 成人激情免费网站| 成人免费视频app|