亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
成人激情视频网站| 国产成人午夜视频| 午夜成人免费电影| 一区二区成人在线| 亚洲一区在线视频观看| 亚洲激情欧美激情| 调教+趴+乳夹+国产+精品| 亚洲国产一区在线观看| 午夜精品久久久久久久蜜桃app | 久久久亚洲精品一区二区三区| 91精品国产综合久久精品性色| 91精品免费在线观看| 日韩视频一区二区三区在线播放| 日韩亚洲欧美综合| 国产视频一区在线播放| 亚洲欧美中日韩| 亚洲已满18点击进入久久| 喷水一区二区三区| 国产成人免费网站| 日本韩国一区二区三区视频| 欧美二区乱c少妇| 久久欧美一区二区| 亚洲精品第1页| 麻豆91精品视频| 成人精品免费网站| 这里只有精品免费| 国产日韩精品一区二区浪潮av| 亚洲图片另类小说| 美女mm1313爽爽久久久蜜臀| 成人永久看片免费视频天堂| 欧美日韩卡一卡二| 久久久久久久久久久久久久久99| 亚洲精品高清在线观看| 精品一区二区三区日韩| 色乱码一区二区三区88| 久久久综合视频| 亚洲地区一二三色| 99国产一区二区三精品乱码| 欧美一区二区国产| 亚洲免费观看高清完整| 激情五月播播久久久精品| 色综合久久精品| 久久久久久久久久看片| 奇米精品一区二区三区在线观看| 91日韩在线专区| 久久精品一区蜜桃臀影院| 亚洲成人在线免费| 99久久久精品免费观看国产蜜| 日韩欧美中文字幕一区| 亚洲成人自拍一区| 色婷婷久久综合| 国产精品免费丝袜| 国产高清亚洲一区| www精品美女久久久tv| 视频一区二区三区中文字幕| 色菇凉天天综合网| 国产精品二区一区二区aⅴ污介绍| 狠狠色综合色综合网络| 欧美一卡在线观看| 亚洲成av人片一区二区三区| 91色综合久久久久婷婷| 国产精品久久久久影院亚瑟 | 日本在线不卡视频| 在线亚洲人成电影网站色www| 国产精品久久久爽爽爽麻豆色哟哟| 久久疯狂做爰流白浆xx| 欧美一区二区三区在线观看视频| 夜夜夜精品看看| 欧美亚洲图片小说| 艳妇臀荡乳欲伦亚洲一区| 色综合天天做天天爱| 综合激情网...| 91久久久免费一区二区| 亚洲动漫第一页| 欧美精品日韩一本| 日日骚欧美日韩| 欧美一区二区观看视频| 美国av一区二区| 久久久久国产成人精品亚洲午夜| 国产精品一区三区| 中文字幕的久久| 色综合一个色综合亚洲| 亚洲成人中文在线| 欧美成人一区二区三区片免费| 奇米色777欧美一区二区| 2024国产精品| 菠萝蜜视频在线观看一区| 亚洲欧洲精品天堂一级| 欧美色图12p| 免费观看久久久4p| 国产三区在线成人av| www.亚洲精品| 亚洲一区二区av在线| 欧美另类一区二区三区| 五月天婷婷综合| 精品免费国产二区三区| 国产91清纯白嫩初高中在线观看| 亚洲少妇30p| 日韩三级av在线播放| 成人av电影观看| 亚洲高清一区二区三区| 欧美va天堂va视频va在线| 成人午夜av在线| 日本在线不卡一区| 亚洲婷婷在线视频| 日韩欧美中文一区二区| 99麻豆久久久国产精品免费优播| 日韩高清中文字幕一区| 国产精品大尺度| 精品日韩在线一区| 日本韩国欧美一区二区三区| 日本va欧美va瓶| 亚洲日本va午夜在线电影| 日韩欧美国产一区在线观看| 99re成人精品视频| 久久国产精品无码网站| 亚洲日本一区二区三区| 久久人人97超碰com| 在线不卡中文字幕播放| 成人美女视频在线观看18| 日韩电影免费一区| 亚洲精品乱码久久久久久久久 | 亚洲人xxxx| 精品欧美久久久| 欧美群妇大交群的观看方式| 白白色亚洲国产精品| 国产综合色精品一区二区三区| 亚洲第一会所有码转帖| 亚洲欧美国产77777| 国产视频一区二区在线| 欧美zozo另类异族| 日韩亚洲欧美在线| 欧美日本一区二区在线观看| 91丨九色丨蝌蚪丨老版| 国产精品一区二区三区四区| 美国三级日本三级久久99| 亚洲va欧美va国产va天堂影院| 亚洲精品一二三区| 亚洲男同性视频| 亚洲黄色免费网站| 亚洲精品伦理在线| 一区二区三区在线免费观看| 中文字幕视频一区| 国产精品久久久久久久久免费相片 | 欧美图区在线视频| 欧美无乱码久久久免费午夜一区| 99久久免费视频.com| 北岛玲一区二区三区四区| 国产91丝袜在线18| 成人一区在线观看| 95精品视频在线| jizzjizzjizz欧美| 色婷婷综合久色| 欧美日韩精品综合在线| 欧美丰满一区二区免费视频| 91麻豆精品国产自产在线观看一区| 欧美日韩久久一区| 日韩片之四级片| 久久精品亚洲精品国产欧美kt∨| 日本一区二区三区免费乱视频| 欧美激情一区二区三区不卡| 国产精品国产三级国产aⅴ入口| 成人免费在线视频| 亚洲一区二区三区影院| 亚洲大片在线观看| 久久99精品久久久久久| 成人在线综合网| 色婷婷激情综合| 日韩午夜电影av| 国产女同性恋一区二区| 亚洲免费色视频| 精品一区二区av| 91网站黄www| 91精品蜜臀在线一区尤物| 久久人人97超碰com| 一区二区三区在线影院| 首页国产丝袜综合| 成人免费精品视频| 精品视频资源站| 久久久一区二区三区| 亚洲综合在线视频| 国产一区二区三区综合| av中文字幕不卡| 欧美一区午夜视频在线观看| 久久蜜桃香蕉精品一区二区三区| 国产精品嫩草影院com| 日韩精品电影一区亚洲| 成人av电影在线网| 欧美一区二区三区四区高清| 亚洲国产成人私人影院tom| 国产精品久久影院| 精品一区二区三区免费视频| 在线观看国产一区二区| 久久综合色一综合色88| 亚洲成人av福利| 99久久精品情趣| 国产日韩成人精品| 日韩av网站在线观看| 91免费国产在线观看| 国产偷国产偷亚洲高清人白洁|