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

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

?? os-task-switch.s

?? ucos-ii-at90S-icc-avr
?? S
?? 第 1 頁 / 共 4 頁
字號:
	.module os-task-switch.c
	.area text(rom, con, rel)
	.dbfile G:\編程2002-10-15-HOME\做過的項目\2002-10-22\home-c\software\ucos-ii-at90S-icc-avr\os-task-sem\os-task-switch.c
	.dbfunc e OSInit _OSInit fV
;              i -> R16
	.even
_OSInit::
	.dbline -1
	.dbline 8
; //os主要代碼
; #define  OS_GLOBALS                           /* Declare GLOBAL variables                              */
; #include "includes.h"
; 
; #define  OS_MASTER_FILE                       /* Prevent the following files from including includes.h */
; 
; void        OSInit(void)
; {
	.dbline 11
;   INT8U i;
; 
;   OSIntNesting=0;             /* Interrupt nesting level                              */
	clr R2
	sts _OSIntNesting,R2
	.dbline 12
;   OSLockNesting=0;            /* Multitasking lock nesting level                      */
	sts _OSLockNesting,R2
	.dbline 13
;   OSPrioCur=0xff;                /* Priority of current task                             */
	ldi R24,255
	sts _OSPrioCur,R24
	.dbline 14
;   OSPrioHighRdy=0xff;            /* Priority of highest priority task                    */
	sts _OSPrioHighRdy,R24
	.dbline 15
;   OSRunning = FALSE;
	sts _OSRunning,R2
	.dbline 17
; 
;   OSTCBCur=0;                        /* Pointer to currently running TCB              */
	clr R3
	sts _OSTCBCur+1,R3
	sts _OSTCBCur,R2
	.dbline 18
;   OSTCBHighRdy=0;                    /* Pointer to highest priority TCB ready to run  */
	sts _OSTCBHighRdy+1,R3
	sts _OSTCBHighRdy,R2
	.dbline 20
; /*init task tcb pointers list*/
;   for(i=0;i<OS_TASK_COUNT;i++)
	clr R16
	rjmp L6
L3:
	.dbline 21
	ldi R24,<_OSpTCBList
	ldi R25,>_OSpTCBList
	mov R30,R16
	clr R31
	lsl R30
	rol R31
	add R30,R24
	adc R31,R25
	clr R2
	clr R3
	std z+0,R2
	std z+1,R3
L4:
	.dbline 20
	inc R16
L6:
	.dbline 20
	cpi R16,3
	brlo L3
	.dbline -2
	.dbline 22
;     OSpTCBList[i]=(OS_TCB*)0;
; }
L2:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e OSTaskCreate _OSTaskCreate fc
;            psp -> R10,R11
;            err -> R20
;           prio -> R22
;       stk_size -> y+14
;           ptos -> y+12
;          pdata -> y+10
;           task -> R10,R11
;           ptcb -> R20,R21
	.even
_OSTaskCreate::
	rcall push_gset3
	mov R10,R18
	mov R11,R19
	mov R20,R16
	mov R21,R17
	sbiw R28,4
	ldd R22,y+16
	.dbline -1
	.dbline 29
; /*
; OS_STK *	OSTaskStkInit (void (*task)(void *pd),void *pdata, OS_STK *ptos);
; INT8U       OSTCBInit(OS_TCB *ptcb,INT8U prio, OS_STK *ptos,INT16U stk_size);
; */
; 
; INT8U       OSTaskCreate(OS_TCB *ptcb,void (*task)(void *pd), void *pdata, OS_STK *ptos,INT16U stk_size, INT8U prio)
; {
	.dbline 33
;     void   *psp;
;     INT8U   err;
; 
;     if (prio > OS_LOWEST_PRIO) {             /* Make sure priority is within allowable range           */
	ldi R24,2
	cp R24,R22
	brsh L8
	.dbline 33
	.dbline 34
;         return (OSERR_PRIO_INVALID);
	ldi R16,1
	rjmp L7
L8:
	.dbline 36
;     }
;     OS_ENTER_CRITICAL();
	st -y,r16
	 in r16,0x3f
	 cli
	 push r16
	ld r16,y+
	.dbline 36
	.dbline 37
;     if (OSpTCBList[prio] == (OS_TCB *)0) { /* Make sure task doesn't already exist at this priority  */
	ldi R24,<_OSpTCBList
	ldi R25,>_OSpTCBList
	mov R30,R22
	clr R31
	lsl R30
	rol R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	tst R2
	brne L10
	tst R3
	brne L10
X0:
	.dbline 37
	.dbline 38
;         OSpTCBList[prio] = ptcb;    /* Reserve the priority to prevent others from doing ...  */
	ldi R24,<_OSpTCBList
	ldi R25,>_OSpTCBList
	mov R30,R22
	clr R31
	lsl R30
	rol R31
	add R30,R24
	adc R31,R25
	std z+0,R20
	std z+1,R21
	.dbline 39
;         OS_EXIT_CRITICAL();
	st -y,r16
	pop r16
	out 0x3F,r16
	ld r16,y+
	.dbline 39
	.dbline 40
;         psp = (void *)OSTaskStkInit(task, pdata, ptos, stk_size); /* Initialize the task's stack              */
	ldd R0,y+14
	ldd R1,y+15
	std y+2,R0
	std y+3,R1
	ldd R0,y+12
	ldd R1,y+13
	std y+0,R0
	std y+1,R1
	ldd R18,y+10
	ldd R19,y+11
	mov R16,R10
	mov R17,R11
	rcall _OSTaskStkInit
	mov R10,R16
	mov R11,R17
	.dbline 41
;         err = OSTCBInit(ptcb,prio, psp,stk_size);         
	ldd R0,y+14
	ldd R1,y+15
	std y+2,R0
	std y+3,R1
	std y+0,R10
	std y+1,R11
	mov R18,R22
	mov R16,R20
	mov R17,R21
	rcall _OSTCBInit
	mov R20,R16
	.dbline 42
;         if (err == OS_NO_ERR) {
	tst R16
	brne L12
	.dbline 42
	.dbline 43
;             if (OSRunning) {                 /* Find highest priority task if multitasking has started */
	lds R2,_OSRunning
	tst R2
	breq L13
	.dbline 43
	.dbline 44
;                 OSSched();
	rcall _OSSched
	.dbline 45
;             }
	.dbline 46
L12:
	.dbline 46
;         } else {
	.dbline 47
;         }
L13:
	.dbline 48
;         return (err);
	mov R16,R20
	rjmp L7
L10:
	.dbline 49
;     } else {
	.dbline 50
;         OS_EXIT_CRITICAL();
	st -y,r16
	pop r16
	out 0x3F,r16
	ld r16,y+
	.dbline 50
	.dbline 51
;         return (OSERR_PRIO_EXIST);
	ldi R16,3
	.dbline -2
L7:
	adiw R28,4
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r psp 10 pV
	.dbsym r err 20 c
	.dbsym r prio 22 c
	.dbsym l stk_size 14 i
	.dbsym l ptos 12 pc
	.dbsym l pdata 10 pV
	.dbsym r task 10 pfV
	.dbsym r ptcb 20 pX
	.dbend
	.dbfunc e OSTCBInit _OSTCBInit fc
;       stk_size -> y+6
;           ptos -> y+4
;           prio -> R22
;           ptcb -> R20,R21
	.even
_OSTCBInit::
	rcall push_gset2
	mov R22,R18
	mov R20,R16
	mov R21,R17
	.dbline -1
	.dbline 99
;     }
; }
; 
; /*
; *********************************************************************************************************
; *                                            INITIALIZE TCB
; *
; * Description: This function is internal to uC/OS-II and is used to initialize a Task Control Block when
; *              a task is created (see OSTaskCreate() and OSTaskCreateExt()).
; *
; * Arguments  : prio          is the priority of the task being created
; *
; *              ptos          is a pointer to the task's top-of-stack assuming that the CPU registers
; *                            have been placed on the stack.  Note that the top-of-stack corresponds to a 
; *                            'high' memory location is OS_STK_GROWTH is set to 1 and a 'low' memory
; *                            location if OS_STK_GROWTH is set to 0.  Note that stack growth is CPU
; *                            specific.
; *
; *              pbos          is a pointer to the bottom of stack.  A NULL pointer is passed if called by
; *                            'OSTaskCreate()'.
; *
; *              id            is the task's ID (0..65535)
; *
; *              stk_size      is the size of the stack (in 'stack units').  If the stack units are INT8Us
; *                            then, 'stk_size' contains the number of bytes for the stack.  If the stack
; *                            units are INT32Us then, the stack contains '4 * stk_size' bytes.  The stack
; *                            units are established by the #define constant OS_STK which is CPU
; *                            specific.  'stk_size' is 0 if called by 'OSTaskCreate()'.
; *
; *              pext          is a pointer to a user supplied memory area that is used to extend the task
; *                            control block.  This allows you to store the contents of floating-point
; *                            registers, MMU registers or anything else you could find useful during a 
; *                            context switch.  You can even assign a name to each task and store this name
; *                            in this TCB extension.  A NULL pointer is passed if called by OSTaskCreate().
; *
; *              opt           options as passed to 'OSTaskCreateExt()' or, 
; *                            0 if called from 'OSTaskCreate()'.
; *
; * Returns    : OS_NO_ERR         if the call was successful
; *              OS_NO_MORE_TCB    if there are no more free TCBs to be allocated and thus, the task cannot
; *                                be created.
; *
; * Note       : This function is INTERNAL to uC/OS-II and your application should not call it.
; *********************************************************************************************************
; */
; 
; INT8U OSTCBInit (OS_TCB *ptcb,INT8U prio, OS_STK *ptos, INT16U stk_size)
; {
	.dbline 101
; #if OS_STRICT
;   if((0==ptcb)||(prio>OS_LOWEST_PRIO)||((INT16U)ptos<OS_HARDWARE_STACK_SIZE+40)||(stk_size<OS_HARDWARE_STACK_SIZE+40))
	cpi R20,0
	cpc R20,R21
	breq L21
X1:
	ldi R24,2
	cp R24,R22
	brlo L21
	ldd R24,y+4
	ldd R25,y+5
	cpi R24,104
	ldi R30,0
	cpc R25,R30
	brlo L21
	ldd R24,y+6
	ldd R25,y+7
	cpi R24,104
	ldi R30,0
	cpc R25,R30
	brsh L17
L21:
	.dbline 102
;     OSError(0);
	clr R16
	rcall _OSError
L17:
	.dbline 104
; #endif
;     OS_ENTER_CRITICAL();
	st -y,r16
	 in r16,0x3f
	 cli
	 push r16
	ld r16,y+
	.dbline 104
	.dbline 105
;     if ((OS_TCB *)0!=ptcb) {
	cpi R20,0
	cpc R20,R21
	breq L22
X2:
	.dbline 105
	.dbline 106
;         OS_EXIT_CRITICAL();
	st -y,r16
	pop r16
	out 0x3F,r16
	ld r16,y+
	.dbline 106
	.dbline 107
;         ptcb->OSTCBStkPtr    = ptos;                       /* Load Stack pointer in TCB                */
	mov R30,R20
	mov R31,R21
	ldd R0,y+4
	ldd R1,y+5
	std z+0,R0
	std z+1,R1
	.dbline 108
;         ptcb->OSTCBPrio      = (INT8U)prio;                /* Load task priority into TCB              */
	std z+5,R22
	.dbline 109
;         ptcb->OSTCBStat      = OS_STAT_RDY;                /* Task is ready to run                     */
	ldi R24,1
	std z+4,R24
	.dbline 110
;         ptcb->OSTCBDly       = 0;                          /* Task is not delayed                      */
	clr R2
	clr R3
	std z+2,R2
	std z+3,R3
	.dbline 112
; 
;         return (OS_NO_ERR);
	clr R16
	rjmp L16
L22:
	.dbline 113
;     } else {
	.dbline 114
;         OS_EXIT_CRITICAL();
	st -y,r16
	pop r16
	out 0x3F,r16
	ld r16,y+
	.dbline 114
	.dbline 115
;         return (OSERR_TCB_INVALID);
	ldi R16,2
	.dbline -2
L16:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l stk_size 6 i
	.dbsym l ptos 4 pc
	.dbsym r prio 22 c
	.dbsym r ptcb 20 pX
	.dbend
	.dbfunc e OSSched _OSSched fV
	.even
_OSSched::
	.dbline -1
	.dbline 137
;     }
; }
; 
; /*
; *********************************************************************************************************
; *                                              SCHEDULER
; *
; * Description: This function is called by other uC/OS-II services to determine whether a new, high
; *              priority task has been made ready to run.  This function is invoked by TASK level code
; *              and is not used to reschedule tasks from ISRs (see OSIntExit() for ISR rescheduling).
; *
; * Arguments  : none
; *
; * Returns    : none
; *
; * Notes      : 1) This function is INTERNAL to uC/OS-II and your application should not call it.
; *              2) Rescheduling is prevented when the scheduler is locked (see OSSchedLock())
; *********************************************************************************************************
; */
; 
; void OSSched (void)
; {
	.dbline 138
;     OS_ENTER_CRITICAL();
	st -y,r16
	 in r16,0x3f
	 cli
	 push r16
	ld r16,y+
	.dbline 138
	.dbline 139
;     if ((OSLockNesting | OSIntNesting) == 0) {   /* Task scheduling must be enabled and not ISR level  */
	lds R2,_OSIntNesting
	lds R3,_OSLockNesting
	or R3,R2
	brne L25
	.dbline 139
	.dbline 140
;         OSPrioHighRdy=OSGetPrioRdy();
	rcall _OSGetPrioRdy
	sts _OSPrioHighRdy,R16
	.dbline 141
; 		if(OSPrioHighRdy>OS_LOWEST_PRIO)
	ldi R24,2
	cp R24,R16
	brsh L27
	.dbline 142
; 		{
	.dbline 144
; #if OS_STRICT
; 		  OSError(0);
	clr R16
	rcall _OSError
	.dbline 146
	rjmp L28
L27:
	.dbline 146
; #endif
; 		}else if (OSPrioHighRdy != OSPrioCur) {         /* No context switch if current task is highest ready */
	lds R2,_OSPrioCur
	lds R3,_OSPrioHighRdy
	cp R3,R2
	breq L29
	.dbline 146
	.dbline 147
;             OSTCBHighRdy = OSpTCBList[OSPrioHighRdy];
	ldi R24,<_OSpTCBList
	ldi R25,>_OSpTCBList
	mov R30,R3
	clr R31
	lsl R30
	rol R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldd R3,z+1
	sts _OSTCBHighRdy+1,R3
	sts _OSTCBHighRdy,R2
	.dbline 149
; #if OS_STRICT
; 		  	if(0==OSTCBHighRdy)
	tst R2
	brne L31
	tst R3
	brne L31
X3:
	.dbline 150
; 			  OSError(0);
	clr R16
	rcall _OSError
L31:
	.dbline 152
; #endif			
; 			OS_TASK_SW();                        /* Perform a context switch                           */
	rcall _OSCtxSw
	.dbline 153
;         }//end OSPrioHighRdy != OSPrioCur
L29:
L28:
	.dbline 154
;     }//end nesting==0
L25:
	.dbline 155
;     OS_EXIT_CRITICAL();
	st -y,r16
	pop r16
	out 0x3F,r16
	ld r16,y+
	.dbline 155
	.dbline -2
	.dbline 156
; }
L24:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e OSStart _OSStart fV
	.even
_OSStart::
	.dbline -1
	.dbline 177
; 
; /*
; *********************************************************************************************************
; *                                          START MULTITASKING
; *
; * Description: This function is used to start the multitasking process which lets uC/OS-II manages the
; *              task that you have created.  Before you can call OSStart(), you MUST have called OSInit()
; *              and you MUST have created at least one task.
; *
; * Arguments  : none
; *
; * Returns    : none
; *
; * Note       : OSStartHighRdy() MUST:
; *                 a) Call OSTaskSwHook() then,
; *                 b) Set OSRunning to TRUE.
; *********************************************************************************************************
; */
; 
; void OSStart (void)
; {
	.dbline 178
;     if (OSRunning == FALSE) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费人成精品欧美精品| 91成人网在线| 日本伦理一区二区| 精品国产电影一区二区| 欧美日产在线观看| 91国产丝袜在线播放| 欧美高清在线一区| 精品久久久久久久久久久院品网 | 亚洲色图制服诱惑| 懂色av一区二区夜夜嗨| 一区二区三区视频在线观看| 国产乱码一区二区三区| 1024国产精品| 欧美一级xxx| 麻豆91免费看| 日本一区二区三区dvd视频在线| 久草中文综合在线| 黄色资源网久久资源365| 色美美综合视频| 久久久99久久| 免费成人你懂的| 91黄色在线观看| 国产精品每日更新在线播放网址| 免费看精品久久片| 91精品国产综合久久香蕉麻豆| 国产精品久久久久永久免费观看| 国产自产视频一区二区三区| 欧美一区三区二区| 亚洲成人免费在线| 欧美三级午夜理伦三级中视频| 中日韩av电影| 成人一区二区三区中文字幕| 久久久精品影视| 国产成人综合亚洲网站| 日韩精品中文字幕一区二区三区| 奇米精品一区二区三区四区| 欧美一级日韩免费不卡| 日韩精品一二区| 91精品久久久久久蜜臀| 久久超碰97中文字幕| 日韩精品自拍偷拍| 国内精品久久久久影院色| www久久久久| 粉嫩av一区二区三区在线播放| 欧美韩国日本综合| 91亚洲精华国产精华精华液| 亚洲女与黑人做爰| 欧美日韩一级大片网址| 日本伊人精品一区二区三区观看方式| 欧美一区二区三区四区五区| 美女视频黄频大全不卡视频在线播放| 91精品综合久久久久久| 久久66热偷产精品| 中文字幕第一区第二区| 在线免费观看一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲精品一区二区三区精华液 | 欧美欧美欧美欧美首页| 亚洲国产色一区| 日韩一区二区三区三四区视频在线观看 | 捆绑调教美女网站视频一区| 久久女同精品一区二区| 不卡的电视剧免费网站有什么| 亚洲欧洲成人自拍| 欧美揉bbbbb揉bbbbb| 狠狠色伊人亚洲综合成人| 国产午夜精品一区二区三区四区| 不卡电影一区二区三区| 天天综合网 天天综合色| 久久亚洲一区二区三区四区| 99久久er热在这里只有精品66| 亚洲一区自拍偷拍| 久久久久久免费毛片精品| 99re热视频精品| 日本不卡在线视频| 自拍偷拍欧美激情| 日韩精品中文字幕在线一区| 91麻豆免费观看| 韩国午夜理伦三级不卡影院| 一区二区理论电影在线观看| 26uuu精品一区二区三区四区在线| 99久久精品国产一区二区三区| 日产国产欧美视频一区精品 | 26uuu久久天堂性欧美| 91国产丝袜在线播放| 粉嫩av一区二区三区在线播放| 亚洲成精国产精品女| 欧美日本一区二区| 成年人午夜久久久| 精品一区二区精品| 偷拍亚洲欧洲综合| 一区二区三区四区av| 久久久不卡网国产精品二区| 欧美日韩亚洲综合一区 | 色婷婷久久久久swag精品| 国产在线精品免费| 日韩不卡手机在线v区| 一区二区久久久| 国产精品私房写真福利视频| 精品日韩一区二区三区免费视频| 欧美综合欧美视频| 一本大道久久a久久综合| 国产91丝袜在线18| 国产精品一区二区三区乱码| 蜜桃视频免费观看一区| 日韩电影在线观看一区| 亚洲成人av在线电影| 亚洲高清视频中文字幕| 亚洲一区二区三区四区在线 | 亚洲一区二区欧美激情| 亚洲日本在线a| 国产精品久久久久久久久晋中| 久久久精品国产99久久精品芒果| 日韩欧美一区二区久久婷婷| 欧美一区二区三区视频在线| 欧美日韩国产系列| 欧美日韩国产一级| 91麻豆精品国产综合久久久久久| 欧美亚洲国产怡红院影院| 日本丰满少妇一区二区三区| 色欲综合视频天天天| 丁香啪啪综合成人亚洲小说| 成人深夜在线观看| 成人免费视频视频在线观看免费| 丁香啪啪综合成人亚洲小说| av网站一区二区三区| 一本一道久久a久久精品| 欧美在线小视频| 欧美日韩三级视频| 51精品国自产在线| 中文字幕在线视频一区| 中文字幕一区二区三区蜜月| 亚洲摸摸操操av| 亚洲高清视频在线| 免费观看日韩av| 国产精品18久久久久| 成人久久视频在线观看| aaa欧美大片| 欧美日韩国产综合一区二区三区| 制服丝袜在线91| 欧美mv日韩mv国产网站| 久久久精品综合| 一区二区三区精品| 看电影不卡的网站| 成人精品电影在线观看| 色婷婷综合久久久久中文一区二区| 欧美亚洲动漫精品| 精品91自产拍在线观看一区| 国产精品人人做人人爽人人添| 亚洲综合成人网| 国产主播一区二区| 色综合一区二区三区| 91精品国产手机| 国产精品毛片久久久久久久| 亚洲国产视频网站| 国产成a人无v码亚洲福利| 欧美性色综合网| 久久九九全国免费| 午夜久久福利影院| 国产成a人亚洲| 在线播放中文字幕一区| 国产精品电影一区二区三区| 日本欧美一区二区三区乱码 | 极品少妇xxxx精品少妇偷拍| av一区二区三区| 欧美不卡一区二区三区四区| 一区二区三区四区在线播放| 精品一二线国产| 在线免费观看日本一区| 国产欧美日韩在线视频| 日韩精品电影一区亚洲| 成人av免费在线观看| 欧美成人三级电影在线| 亚洲自拍与偷拍| 97久久超碰精品国产| 26uuu欧美日本| 免费亚洲电影在线| 91搞黄在线观看| 中文字幕在线不卡一区 | 色www精品视频在线观看| 国产欧美一区二区三区鸳鸯浴| 午夜一区二区三区视频| 91尤物视频在线观看| 欧美国产一区在线| 国产高清久久久| 久久中文娱乐网| 久久激情五月婷婷| 91精品国产综合久久久久久久久久| 一区二区三区中文字幕电影| 成人a免费在线看| 国产日韩欧美一区二区三区乱码 | 91黄色激情网站| 中文字幕亚洲欧美在线不卡| 国产高清不卡一区二区| 久久奇米777| 国内不卡的二区三区中文字幕| 日韩精品一区二区三区四区| 香蕉久久夜色精品国产使用方法| 欧美在线一二三| 亚洲成av人片一区二区三区|