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

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

?? portmacro.h

?? STM32 FreeRTOS v5.2移植源代碼
?? H
?? 第 1 頁 / 共 2 頁
字號:
	do																\
	{																\
		portDISABLE_INTERRUPTS();									\
																	\
		_Pragma("asm")												\
			;														\
			; Push the relevant SFR's onto the task's stack			\
			;														\
			movff   STATUS,POSTDEC2									\
			movff	WREG,POSTDEC2									\
			movff	BSR,POSTDEC2									\
			movff	PRODH,POSTDEC2									\
			movff	PRODL,POSTDEC2									\
			movff	FSR0H,POSTDEC2									\
			movff	FSR0L,POSTDEC2									\
			movff	FSR1H,POSTDEC2									\
			movff	FSR1L,POSTDEC2									\
			movff	TABLAT,POSTDEC2									\
			if __ROMSIZE > 0x8000									\
				movff	TBLPTRU,POSTDEC2							\
			endif													\
			movff	TBLPTRH,POSTDEC2								\
			movff	TBLPTRL,POSTDEC2								\
			if __ROMSIZE > 0x8000									\
				movff	PCLATU,POSTDEC2								\
			endif													\
			movff	PCLATH,POSTDEC2									\
			;														\
			; Store the compiler-scratch-area as described above.	\
			;														\
			movlw	OVERHEADPAGE0-LOCOPTSIZE+MAXLOCOPTSIZE			\
			clrf	FSR0L,ACCESS									\
			clrf	FSR0H,ACCESS									\
		_rtos_S1:													\
			movff	POSTINC0,POSTDEC2								\
			decfsz	WREG,W,ACCESS									\
			SMARTJUMP _rtos_S1										\
			;														\
			; Save the pic call/return-stack belonging to the		\
			; current task by copying it to the task's software-	\
			; stack. We save the hardware stack pointer (which		\
			; is the number of addresses on the stack) in the		\
			; W-register first because we need it later and it		\
			; is modified in the save-loop by executing pop's.		\
			; After the loop the W-register is stored on the		\
			; stack, too.											\
			;														\
			movf	STKPTR,W,ACCESS									\
			bz		_rtos_s3										\
		_rtos_S2:													\
			if __ROMSIZE > 0x8000									\
				movff	TOSU,POSTDEC2								\
			endif													\
			movff	TOSH,POSTDEC2									\
			movff	TOSL,POSTDEC2									\
			pop														\
			tstfsz	STKPTR,ACCESS									\
			SMARTJUMP _rtos_S2										\
		_rtos_s3:													\
			movwf	POSTDEC2,ACCESS									\
			;														\
			; Next the value for ucCriticalNesting used by the		\
			; task is stored on the stack. When						\
			; (ucInterruptForced == portINTERRUPTS_FORCED), we save	\
			; it as 0 (portNO_CRITICAL_SECTION_NESTING).			\
			;														\
			if ucInterruptForced == portINTERRUPTS_FORCED			\
				clrf POSTDEC2,ACCESS								\
			else													\
				movff	ucCriticalNesting,POSTDEC2					\
			endif													\
			;														\
			; Save the new top of the software stack in the TCB.	\
			;														\
			movff	pxCurrentTCB,FSR0L								\
			movff	pxCurrentTCB+1,FSR0H							\
			movff	FSR2L,POSTINC0									\
			movff	FSR2H,POSTINC0									\
		_Pragma("asmend")											\
	} while(0)

/************************************************************/

/*
 * This is the reverse of portSAVE_CONTEXT.
 */
#define portRESTORE_CONTEXT()										\
	do																\
	{																\
		_Pragma("asm")												\
			;														\
			; Set FSR0 to point to pxCurrentTCB->pxTopOfStack.		\
			;														\
			movff	pxCurrentTCB,FSR0L								\
			movff	pxCurrentTCB+1,FSR0H							\
			;														\
			; De-reference FSR0 to set the address it holds into	\
			; FSR2 (i.e. *( pxCurrentTCB->pxTopOfStack ) ). FSR2	\
			; is used by wizC as stackpointer.						\
			;														\
			movff	POSTINC0,FSR2L									\
			movff	POSTINC0,FSR2H									\
			;														\
			; Next, the value for ucCriticalNesting used by the		\
			; task is retrieved from the stack.						\
			;														\
			movff	PREINC2,ucCriticalNesting						\
			;														\
			; Rebuild the pic call/return-stack. The number of		\
			; return addresses is the next item on the task stack.	\
			; Save this number in PRODL. Then fetch the addresses	\
			; and store them on the hardwarestack.					\
			; The datasheets say we can't use movff here...			\
			;														\
			movff	PREINC2,PRODL	// Use PRODL as tempregister	\
			clrf	STKPTR,ACCESS									\
		_rtos_R1:													\
			push													\
			movf	PREINC2,W,ACCESS								\
			movwf	TOSL,ACCESS										\
			movf	PREINC2,W,ACCESS								\
			movwf	TOSH,ACCESS										\
			if __ROMSIZE > 0x8000									\
				movf	PREINC2,W,ACCESS							\
				movwf	TOSU,ACCESS									\
			else													\
				clrf	TOSU,ACCESS									\
			endif													\
			decfsz	PRODL,F,ACCESS									\
			SMARTJUMP _rtos_R1										\
			;														\
			; Restore the compiler's working storage area to page 0	\
			;														\
			movlw	OVERHEADPAGE0-LOCOPTSIZE+MAXLOCOPTSIZE			\
			movwf	FSR0L,ACCESS									\
			clrf	FSR0H,ACCESS									\
		_rtos_R2:													\
			decf	FSR0L,F,ACCESS									\
			movff	PREINC2,INDF0									\
			tstfsz	FSR0L,ACCESS									\
			SMARTJUMP _rtos_R2										\
			;														\
			; Restore the sfr's forming the tasks context.			\
			; We cannot yet restore bsr, w and status because		\
			; we need these	registers for a final test.				\
			;														\
			movff	PREINC2,PCLATH									\
			if __ROMSIZE > 0x8000									\
				movff	PREINC2,PCLATU								\
			else													\
				clrf	PCLATU,ACCESS								\
			endif													\
			movff	PREINC2,TBLPTRL									\
			movff	PREINC2,TBLPTRH									\
			if __ROMSIZE > 0x8000									\
				movff	PREINC2,TBLPTRU								\
			else													\
				clrf	TBLPTRU,ACCESS								\
			endif													\
			movff	PREINC2,TABLAT									\
			movff	PREINC2,FSR1L									\
			movff	PREINC2,FSR1H									\
			movff	PREINC2,FSR0L									\
			movff	PREINC2,FSR0H									\
			movff	PREINC2,PRODL									\
			movff	PREINC2,PRODH									\
			;														\
			; The return from portRESTORE_CONTEXT() depends on		\
			; the value of ucCriticalNesting. When it is zero,		\
			; interrupts need to be enabled. This is done via a		\
			; retfie instruction because we need the				\
			; interrupt-enabling and the return to the restored		\
			; task to be uninterruptable.							\
	 		; Because bsr, status and W are affected by the test	\
	 		; they are restored after the test.						\
			;														\
			movlb	ucCriticalNesting>>8							\
			tstfsz	ucCriticalNesting,BANKED						\
			SMARTJUMP _rtos_R4										\
		_rtos_R3:													\
			movff	PREINC2,BSR										\
			movff	PREINC2,WREG									\
			movff	PREINC2,STATUS									\
			retfie	0		; Return enabling interrupts			\
		_rtos_R4:													\
			movff	PREINC2,BSR										\
			movff	PREINC2,WREG									\
			movff	PREINC2,STATUS									\
			return	0		; Return without affecting interrupts	\
		_Pragma("asmend")											\
	} while(0)

/*-----------------------------------------------------------*/

#define portTICK_RATE_MS	( ( portTickType ) 1000 / configTICK_RATE_HZ )		

/*-----------------------------------------------------------*/

extern void vPortYield( void );
#define portYIELD()				vPortYield()

#define portNOP()	_Pragma("asm")									\
						nop											\
					_Pragma("asmend")

/*-----------------------------------------------------------*/

#define portTASK_FUNCTION( xFunction, pvParameters )	 	\
	void pointed xFunction( void *pvParameters )		\
	_Pragma(asmfunc xFunction)

#define portTASK_FUNCTION_PROTO		portTASK_FUNCTION
/*-----------------------------------------------------------*/


#define volatile
#define register

#endif /* PORTMACRO_H */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲三级在线观看| 亚洲成av人在线观看| 亚洲靠逼com| 麻豆精品一区二区综合av| 99久久伊人网影院| 久久精品一区蜜桃臀影院| 午夜久久久影院| 91日韩精品一区| 国产三级精品视频| 久久精品国产亚洲一区二区三区| 91影院在线观看| 亚洲国产精品成人综合| 日韩成人午夜电影| 欧美三级午夜理伦三级中视频| 国产欧美精品区一区二区三区 | 中文字幕免费观看一区| av电影在线观看一区| 不卡的电影网站| 欧美午夜精品理论片a级按摩| 色94色欧美sute亚洲线路一ni| 日本丰满少妇一区二区三区| 在线看国产一区| 欧美精品日韩综合在线| 精品电影一区二区| 中文字幕在线观看一区二区| 亚洲综合一二区| 久久er99热精品一区二区| 国产成人亚洲综合a∨婷婷| 99视频国产精品| 欧美一二三四在线| 中文字幕精品一区二区精品绿巨人| 亚洲欧美一区二区不卡| 亚洲成av人片在线观看无码| 激情五月婷婷综合| 在线观看免费亚洲| 国产日韩视频一区二区三区| 一区二区三区日韩精品视频| 久久99国内精品| 99国产精品久久久久久久久久| 欧美男女性生活在线直播观看| 久久午夜国产精品| 亚洲国产日产av| 成人免费毛片高清视频| 91精品国产一区二区| 综合欧美亚洲日本| 国产精品综合av一区二区国产馆| 色综合久久88色综合天天免费| 欧美va亚洲va香蕉在线| 亚洲中国最大av网站| 豆国产96在线|亚洲| 欧美一级高清大全免费观看| 国产精品国产精品国产专区不蜜| 久久精品国产亚洲高清剧情介绍| 色偷偷成人一区二区三区91| 久久众筹精品私拍模特| 亚洲一区二区影院| 91丨porny丨最新| 国产午夜亚洲精品不卡| 久久精品久久99精品久久| 欧美日韩情趣电影| 亚洲综合成人在线| 91色在线porny| 亚洲欧洲性图库| 成人精品国产福利| 久久久精品tv| 国产精品18久久久久久久久| 日韩一区二区三区高清免费看看| 亚洲午夜日本在线观看| 色狠狠色狠狠综合| 一区二区在线观看免费| 一本高清dvd不卡在线观看| 国产精品久久久久久久久搜平片 | 国产成人亚洲综合a∨婷婷| 欧美一二三四在线| 久久av中文字幕片| 日韩欧美电影一区| 久久精品国产在热久久| 2023国产精品| 国产精一区二区三区| 欧美伦理视频网站| 国产福利视频一区二区三区| 亚洲午夜久久久| 中文字幕亚洲综合久久菠萝蜜| 欧美人动与zoxxxx乱| 99久久精品免费观看| 久久99国产精品久久| 亚洲大型综合色站| 综合网在线视频| 国产拍揄自揄精品视频麻豆| 欧美精品丝袜中出| 在线观看不卡一区| a在线欧美一区| 国产999精品久久久久久 | 中文字幕精品在线不卡| 91精品国产综合久久香蕉的特点| av激情综合网| 国产精品一区二区无线| 免费成人美女在线观看.| 伦理电影国产精品| 午夜久久久久久久久| 亚洲三级电影全部在线观看高清| 久久久久成人黄色影片| 日韩欧美一级特黄在线播放| 欧美日韩国产综合一区二区三区| 91在线国内视频| 99久久99久久精品免费看蜜桃| 国产一区视频在线看| 精品一区二区三区在线播放| 爽爽淫人综合网网站| 亚洲国产综合91精品麻豆| 亚洲猫色日本管| 亚洲精品国产一区二区精华液 | 91精品国产综合久久国产大片| 日本韩国一区二区三区视频| 成人动漫一区二区三区| 成人手机在线视频| 成人免费精品视频| 99国产精品国产精品久久| 波多野结衣在线aⅴ中文字幕不卡| 国产91精品一区二区| 国产成人在线观看免费网站| 国产成人免费视频一区| 丰满少妇在线播放bd日韩电影| 国产91精品露脸国语对白| 大陆成人av片| 91欧美激情一区二区三区成人| 91福利国产成人精品照片| 91成人免费电影| 91精品国产一区二区三区 | 免费观看在线综合色| 免费看日韩精品| 国产一区二区三区免费播放| 国产suv精品一区二区6| 99精品欧美一区二区三区小说| 91污片在线观看| 在线成人av影院| 精品国产91洋老外米糕| 国产精品无遮挡| 亚洲最大色网站| 日韩av午夜在线观看| 国产精品自拍毛片| 91丨porny丨户外露出| 欧美老年两性高潮| 亚洲欧美另类久久久精品| 五月综合激情日本mⅴ| 国产尤物一区二区在线| 99精品欧美一区二区蜜桃免费| 欧美亚洲国产bt| 欧美sm美女调教| 亚洲欧洲日产国产综合网| 亚洲成人中文在线| 国产一区不卡视频| 在线免费不卡视频| 日韩精品专区在线影院重磅| 国产精品伦理在线| 奇米888四色在线精品| 成人国产精品免费网站| 欧美高清你懂得| 国产精品久久久久影院| 免费久久99精品国产| 色丁香久综合在线久综合在线观看 | 欧美在线免费播放| 久久色视频免费观看| 亚洲激情在线激情| 国产成人精品亚洲日本在线桃色 | 亚洲欧美另类久久久精品| 麻豆精品一区二区av白丝在线| 在线看日本不卡| 欧美一区二区二区| 久久综合999| 自拍偷拍亚洲综合| 亚洲国产视频直播| 久久99精品国产麻豆不卡| 国产精品1024| 91国产免费看| 欧美一个色资源| 国产精品久久久久影院老司| 亚洲午夜精品久久久久久久久| 五月激情综合婷婷| 国产成人午夜视频| 欧美主播一区二区三区| 日韩欧美国产wwwww| 一区视频在线播放| 日韩1区2区日韩1区2区| 国产精品一区二区视频| 色综合色综合色综合 | 国产精品一线二线三线| 99久久精品国产麻豆演员表| 欧美日韩dvd在线观看| 久久精品人人做人人爽人人 | 欧美日韩成人在线一区| 精品国产91乱码一区二区三区| 国产精品国产精品国产专区不蜜 | 激情六月婷婷久久| 91免费看`日韩一区二区| 欧美一级欧美一级在线播放| 欧美高清在线一区二区| 日韩国产欧美在线视频| 97精品电影院| 久久久久综合网|