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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? port.c

?? FreeRTOSV3.2.0 經(jīng)典嵌入式操作系統(tǒng)
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*-----------------------------------------------------------*/

/* 
 * See header file for description. 
 */
portSTACK_TYPE *pxPortInitialiseStack( portSTACK_TYPE *pxTopOfStack, pdTASK_CODE pxCode, void *pvParameters )
{
unsigned portLONG ulAddress;
portSTACK_TYPE *pxStartOfStack;

	/* Leave space to write the size of the stack as the first byte. */
	pxStartOfStack = pxTopOfStack;
	pxTopOfStack++;

	/* Place a few bytes of known values on the bottom of the stack. 
	This is just useful for debugging and can be uncommented if required.
	*pxTopOfStack = 0x11;
	pxTopOfStack++;
	*pxTopOfStack = 0x22;
	pxTopOfStack++;
	*pxTopOfStack = 0x33;
	pxTopOfStack++;
	*/

	/* Simulate how the stack would look after a call to the scheduler tick 
	ISR. 

	The return address that would have been pushed by the MCU. */
	ulAddress = ( unsigned portLONG ) pxCode;
	*pxTopOfStack = ( portSTACK_TYPE ) ulAddress;
	ulAddress >>= 8;
	pxTopOfStack++;
	*pxTopOfStack = ( portSTACK_TYPE ) ( ulAddress );
	pxTopOfStack++;

	/* Next all the registers will have been pushed by portSAVE_CONTEXT(). */
	*pxTopOfStack = 0xaa;	/* acc */
	pxTopOfStack++;	

	/* We want tasks to start with interrupts enabled. */
	*pxTopOfStack = portGLOBAL_INTERRUPT_BIT;
	pxTopOfStack++;

	/* The function parameters will be passed in the DPTR and B register as
	a three byte generic pointer is used. */
	ulAddress = ( unsigned portLONG ) pvParameters;
	*pxTopOfStack = ( portSTACK_TYPE ) ulAddress;	/* DPL */
	ulAddress >>= 8;
	*pxTopOfStack++;
	*pxTopOfStack = ( portSTACK_TYPE ) ulAddress;	/* DPH */
	ulAddress >>= 8;
	pxTopOfStack++;
	*pxTopOfStack = ( portSTACK_TYPE ) ulAddress;	/* b */
	pxTopOfStack++;

	/* The remaining registers are straight forward. */
	*pxTopOfStack = 0x02;	/* R2 */
	pxTopOfStack++;
	*pxTopOfStack = 0x03;	/* R3 */
	pxTopOfStack++;
	*pxTopOfStack = 0x04;	/* R4 */
	pxTopOfStack++;
	*pxTopOfStack = 0x05;	/* R5 */
	pxTopOfStack++;
	*pxTopOfStack = 0x06;	/* R6 */
	pxTopOfStack++;
	*pxTopOfStack = 0x07;	/* R7 */
	pxTopOfStack++;
	*pxTopOfStack = 0x00;	/* R0 */
	pxTopOfStack++;
	*pxTopOfStack = 0x01;	/* R1 */
	pxTopOfStack++;
	*pxTopOfStack = 0x00;	/* PSW */
	pxTopOfStack++;
	*pxTopOfStack = 0xbb;	/* BP */

	/* Dont increment the stack size here as we don't want to include
	the stack size byte as part of the stack size count.

	Finally we place the stack size at the beginning. */
	*pxStartOfStack = ( portSTACK_TYPE ) ( pxTopOfStack - pxStartOfStack );

	/* Unlike most ports, we return the start of the stack as this is where the
	size of the stack is stored. */
	return pxStartOfStack;
}
/*-----------------------------------------------------------*/

/* 
 * See header file for description. 
 */
portBASE_TYPE xPortStartScheduler( void )
{
	/* Setup timer 2 to generate the RTOS tick. */
	prvSetupTimerInterrupt();	

	/* Make sure we start with the expected SFR page.  This line should not
	really be required. */
	SFRPAGE = 0;

	/* Copy the stack for the first task to execute from XRAM into the stack,
	restore the task context from the new stack, then start running the task. */
	portCOPY_XRAM_TO_STACK();
	portRESTORE_CONTEXT();

	/* Should never get here! */
	return pdTRUE;
}
/*-----------------------------------------------------------*/

void vPortEndScheduler( void )
{
	/* Not implemented for this port. */
}
/*-----------------------------------------------------------*/

/*
 * Manual context switch.  The first thing we do is save the registers so we
 * can use a naked attribute.
 */
void vPortYield( void ) _naked
{
	/* Save the execution context onto the stack, then copy the entire stack
	to XRAM.  This is necessary as the internal RAM is only large enough to
	hold one stack, and we want one per task. 
	
	PERFORMANCE COULD BE IMPROVED BY ONLY COPYING TO XRAM IF A TASK SWITCH
	IS REQUIRED. */
	portSAVE_CONTEXT();
	portCOPY_STACK_TO_XRAM();

	/* Call the standard scheduler context switch function. */
	vTaskSwitchContext();

	/* Copy the stack of the task about to execute from XRAM into RAM and
	restore it's context ready to run on exiting. */
	portCOPY_XRAM_TO_STACK();
	portRESTORE_CONTEXT();
}
/*-----------------------------------------------------------*/

#if configUSE_PREEMPTION == 1
	void vTimer2ISR( void ) interrupt 5 _naked
	{
		/* Preemptive context switch function triggered by the timer 2 ISR.
		This does the same as vPortYield() (see above) with the addition
		of incrementing the RTOS tick count. */

		portSAVE_CONTEXT();
		portCOPY_STACK_TO_XRAM();

		vTaskIncrementTick();
		vTaskSwitchContext();
		
		portCLEAR_INTERRUPT_FLAG();
		portCOPY_XRAM_TO_STACK();
		portRESTORE_CONTEXT();
	}
#else
	void vTimer2ISR( void ) interrupt 5
	{
		/* When using the cooperative scheduler the timer 2 ISR is only 
		required to increment the RTOS tick count. */

		vTaskIncrementTick();
		portCLEAR_INTERRUPT_FLAG();
	}
#endif
/*-----------------------------------------------------------*/

static void prvSetupTimerInterrupt( void )
{
unsigned portCHAR ucOriginalSFRPage;

/* Constants calculated to give the required timer capture values. */
const unsigned portLONG ulTicksPerSecond = configCPU_CLOCK_HZ / portCLOCK_DIVISOR;
const unsigned portLONG ulCaptureTime = ulTicksPerSecond / configTICK_RATE_HZ;
const unsigned portLONG ulCaptureValue = portMAX_TIMER_VALUE - ulCaptureTime;
const unsigned portCHAR ucLowCaptureByte = ( unsigned portCHAR ) ( ulCaptureValue & ( unsigned portLONG ) 0xff );
const unsigned portCHAR ucHighCaptureByte = ( unsigned portCHAR ) ( ulCaptureValue >> ( unsigned portLONG ) 8 );

	/* NOTE:  This uses a timer only present on 8052 architecture. */

	/* Remember the current SFR page so we can restore it at the end of the
	function. */
	ucOriginalSFRPage = SFRPAGE;
	SFRPAGE = 0;

	/* TMR2CF can be left in its default state. */	
	TMR2CF = ( unsigned portCHAR ) 0;

	/* Setup the overflow reload value. */
	RCAP2L = ucLowCaptureByte;
	RCAP2H = ucHighCaptureByte;

	/* The initial load is performed manually. */
	TMR2L = ucLowCaptureByte;
	TMR2H = ucHighCaptureByte;

	/* Enable the timer 2 interrupts. */
	IE |= portTIMER_2_INTERRUPT_ENABLE;

	/* Interrupts are disabled when this is called so the timer can be started
	here. */
	TMR2CN = portENABLE_TIMER;

	/* Restore the original SFR page. */
	SFRPAGE = ucOriginalSFRPage;
}




?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品1区2区| 美女一区二区三区| 久久久蜜桃精品| 欧美一区日韩一区| 欧美最猛黑人xxxxx猛交| 93久久精品日日躁夜夜躁欧美| 国产一本一道久久香蕉| 日本伊人精品一区二区三区观看方式| 亚洲精品少妇30p| 亚洲视频免费观看| 国产精品久久久久久久久久久免费看| 中文字幕巨乱亚洲| 日韩专区在线视频| 中文天堂在线一区| 国产午夜精品一区二区| 久久久久国产精品人| 欧美久久久久久蜜桃| 欧美三级视频在线播放| 在线国产亚洲欧美| 91福利视频在线| 这里只有精品免费| 日韩欧美国产午夜精品| 久久亚洲精品国产精品紫薇| 久久久久久久久久看片| 中文字幕亚洲成人| 亚洲aaa精品| 欧美aaaaaa午夜精品| 久久爱www久久做| 国产91在线观看| 91蜜桃在线观看| 欧美日韩你懂得| 欧美大片顶级少妇| 国产精品乱人伦| 亚洲一区二区三区不卡国产欧美| 日日骚欧美日韩| 懂色中文一区二区在线播放| 欧美在线综合视频| 欧美成人福利视频| 国产日韩影视精品| 午夜成人在线视频| 国产精品一二一区| 欧洲国内综合视频| 久久亚区不卡日本| 日韩高清在线电影| 风间由美性色一区二区三区| 在线日韩av片| 久久久不卡影院| 91精品国产全国免费观看| 免费看日韩a级影片| 国产91在线观看| 欧美在线播放高清精品| 久久综合久色欧美综合狠狠| 伊人夜夜躁av伊人久久| 久久99精品国产91久久来源| 91视频一区二区三区| 日韩欧美精品在线视频| 亚洲欧美一区二区三区极速播放| 极品少妇xxxx精品少妇| 欧美在线制服丝袜| 中文字幕一区二区三区乱码在线| 日韩电影免费在线看| 91久久精品一区二区三区| 久久久蜜臀国产一区二区| 奇米一区二区三区av| 在线亚洲一区二区| 自拍偷拍国产精品| 国产电影精品久久禁18| 欧美成人a∨高清免费观看| 亚洲小说春色综合另类电影| av综合在线播放| 欧美激情在线免费观看| 国产专区欧美精品| 精品久久一区二区| 日韩电影一二三区| 91精品免费在线观看| 亚洲v精品v日韩v欧美v专区| 色8久久精品久久久久久蜜| 国产拍欧美日韩视频二区| 久久国产精品72免费观看| 欧美一区二区三区四区久久| 亚洲成人动漫在线免费观看| 91浏览器入口在线观看| 亚洲色图在线看| 成人av在线观| 亚洲欧美日本韩国| 色综合天天在线| 亚洲免费观看高清完整版在线| www.av亚洲| 亚洲天堂2016| 91国产免费观看| 亚洲国产精品一区二区www在线 | 91视频国产资源| 自拍偷拍亚洲激情| 欧美午夜电影网| 偷拍日韩校园综合在线| 91精品国产一区二区人妖| 麻豆精品精品国产自在97香蕉| 日韩欧美激情一区| 国产一区二区久久| 国产精品青草综合久久久久99| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 在线观看成人免费视频| 无码av中文一区二区三区桃花岛| 欧美二区乱c少妇| 久久成人久久爱| 国产蜜臀av在线一区二区三区| 99久久精品久久久久久清纯| 亚洲午夜在线电影| 欧美一卡二卡三卡| 国产91在线看| 亚洲一区二区在线免费看| 欧美一区二区三区视频在线观看| 国内成+人亚洲+欧美+综合在线| 国产精品色在线| 欧美日韩国产影片| 国产999精品久久| 亚洲一二三区不卡| 久久久午夜电影| 色婷婷综合五月| 国内精品在线播放| 亚洲免费观看视频| 精品国产乱码久久久久久免费| 欧美熟乱第一页| 九色|91porny| 亚洲精品第1页| 欧美精品一区视频| 欧美亚洲国产怡红院影院| 国产一区亚洲一区| 亚洲成人一区在线| 国产精品你懂的在线欣赏| 91精品一区二区三区在线观看| 国产伦精品一区二区三区在线观看| 亚洲一区在线观看视频| 国产精品系列在线| 久久日韩精品一区二区五区| 欧美日韩中文字幕精品| 成人av资源下载| 国产一区视频导航| 天天操天天干天天综合网| 国产精品久久一卡二卡| 精品久久久久久无| 欧美日韩精品欧美日韩精品一综合| 99视频热这里只有精品免费| 韩国女主播一区| 久久成人免费日本黄色| 亚洲午夜三级在线| 亚洲精品免费看| 国产喷白浆一区二区三区| 精品国产不卡一区二区三区| 欧美一卡二卡在线| 91麻豆精品国产91| 欧美日韩卡一卡二| 在线观看亚洲一区| 色偷偷一区二区三区| 色综合天天天天做夜夜夜夜做| 成人毛片在线观看| 粉嫩av亚洲一区二区图片| 国产精品亚洲专一区二区三区 | 亚洲bdsm女犯bdsm网站| 亚洲激情图片一区| 亚洲少妇最新在线视频| 亚洲视频免费在线观看| 亚洲免费av观看| 亚洲精品欧美激情| 亚洲国产精品嫩草影院| 亚洲在线视频免费观看| 亚洲第一福利一区| 日韩国产欧美三级| 精品亚洲成a人| 国产精品资源在线| 成人免费看片app下载| 99久久夜色精品国产网站| 亚洲精品视频一区二区| 国产精品黄色在线观看| 中文字幕中文字幕一区二区| 《视频一区视频二区| 国产精品灌醉下药二区| 亚洲精品国产高清久久伦理二区| 一区二区三区日韩| 亚洲 欧美综合在线网络| 日韩av中文在线观看| 久久国产精品99久久久久久老狼| 黄色日韩网站视频| 91视频观看免费| 欧美丰满嫩嫩电影| 久久精品国产**网站演员| 国产精一品亚洲二区在线视频| 成人在线视频一区二区| 91福利社在线观看| 日韩女优毛片在线| 国产精品国产自产拍高清av| 亚洲一区视频在线| 久久成人18免费观看| heyzo一本久久综合| 精品婷婷伊人一区三区三| 久久综合成人精品亚洲另类欧美| 国产精品初高中害羞小美女文| 日韩高清不卡在线| 97精品超碰一区二区三区| 日韩欧美美女一区二区三区|