⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 os_q.lst

📁 AVR平台下的ucos版本
💻 LST
📖 第 1 页 / 共 5 页
字号:
 278:os/source/os_q.c ****     }
 279:os/source/os_q.c ****     if (pevent->OSEventType != OS_EVENT_TYPE_Q) {     /* Validate event block type                 
 280:os/source/os_q.c ****         return (OS_ERR_EVENT_TYPE);
 281:os/source/os_q.c ****     }
 282:os/source/os_q.c **** #endif
 283:os/source/os_q.c ****     OS_ENTER_CRITICAL();
 388               	.LM43:
 389               	/* #APP */
 390 00f8 F894      		cli
 284:os/source/os_q.c ****     pq             = (OS_Q *)pevent->OSEventPtr;      /* Point to queue storage structure          
 392               	.LM44:
 393               	/* #NOAPP */
 394 00fa 0480      		ldd __tmp_reg__,Z+4
 395 00fc F581      		ldd r31,Z+5
 396 00fe E02D      		mov r30,__tmp_reg__
 285:os/source/os_q.c ****     pq->OSQIn      = pq->OSQStart;
 398               	.LM45:
 399 0100 8281      		ldd r24,Z+2
 400 0102 9381      		ldd r25,Z+3
 401 0104 9783      		std Z+7,r25
 402 0106 8683      		std Z+6,r24
 286:os/source/os_q.c ****     pq->OSQOut     = pq->OSQStart;
 404               	.LM46:
 405 0108 9187      		std Z+9,r25
 406 010a 8087      		std Z+8,r24
 287:os/source/os_q.c ****     pq->OSQEntries = 0;
 408               	.LM47:
 409 010c 1586      		std Z+13,__zero_reg__
 410 010e 1486      		std Z+12,__zero_reg__
 288:os/source/os_q.c ****     OS_EXIT_CRITICAL();
 412               	.LM48:
 413               	/* #APP */
 414 0110 7894      		sei
 289:os/source/os_q.c ****     return (OS_NO_ERR);
 290:os/source/os_q.c **** }
 416               	.LM49:
 417               	/* #NOAPP */
 418 0112 80E0      		ldi r24,lo8(0)
 419 0114 90E0      		ldi r25,hi8(0)
 420               	/* epilogue: frame size=0 */
 421 0116 0895      		ret
 422               	/* epilogue end (size=1) */
 423               	/* function OSQFlush size 19 (18) */
 428               	.Lscope2:
 433               	.global	OSQPend
 435               	OSQPend:
 291:os/source/os_q.c **** #endif
 292:os/source/os_q.c **** 
 293:os/source/os_q.c **** /*$PAGE*/
 294:os/source/os_q.c **** /*
 295:os/source/os_q.c **** ***************************************************************************************************
 296:os/source/os_q.c **** *                                     PEND ON A QUEUE FOR A MESSAGE
 297:os/source/os_q.c **** *
 298:os/source/os_q.c **** * Description: This function waits for a message to be sent to a queue
 299:os/source/os_q.c **** *
 300:os/source/os_q.c **** * Arguments  : pevent        is a pointer to the event control block associated with the desired qu
 301:os/source/os_q.c **** *
 302:os/source/os_q.c **** *              timeout       is an optional timeout period (in clock ticks).  If non-zero, your tas
 303:os/source/os_q.c **** *                            wait for a message to arrive at the queue up to the amount of time
 304:os/source/os_q.c **** *                            specified by this argument.  If you specify 0, however, your task will
 305:os/source/os_q.c **** *                            forever at the specified queue or, until a message arrives.
 306:os/source/os_q.c **** *
 307:os/source/os_q.c **** *              err           is a pointer to where an error message will be deposited.  Possible er
 308:os/source/os_q.c **** *                            messages are:
 309:os/source/os_q.c **** *
 310:os/source/os_q.c **** *                            OS_NO_ERR           The call was successful and your task received a
 311:os/source/os_q.c **** *                                                message.
 312:os/source/os_q.c **** *                            OS_TIMEOUT          A message was not received within the specified ti
 313:os/source/os_q.c **** *                            OS_ERR_EVENT_TYPE   You didn't pass a pointer to a queue
 314:os/source/os_q.c **** *                            OS_ERR_PEVENT_NULL  If 'pevent' is a NULL pointer
 315:os/source/os_q.c **** *                            OS_ERR_PEND_ISR     If you called this function from an ISR and the re
 316:os/source/os_q.c **** *                                                would lead to a suspension.
 317:os/source/os_q.c **** *
 318:os/source/os_q.c **** * Returns    : != (void *)0  is a pointer to the message received
 319:os/source/os_q.c **** *              == (void *)0  if no message was received or,
 320:os/source/os_q.c **** *                            if 'pevent' is a NULL pointer or,
 321:os/source/os_q.c **** *                            if you didn't pass a pointer to a queue.
 322:os/source/os_q.c **** ***************************************************************************************************
 323:os/source/os_q.c **** */
 324:os/source/os_q.c **** 
 325:os/source/os_q.c **** void  *OSQPend (OS_EVENT *pevent, INT16U timeout, INT8U *err)
 326:os/source/os_q.c **** {
 437               	.LM50:
 438               	/* prologue: frame size=0 */
 439 0118 BF92      		push r11
 440 011a CF92      		push r12
 441 011c DF92      		push r13
 442 011e EF92      		push r14
 443 0120 FF92      		push r15
 444 0122 0F93      		push r16
 445 0124 1F93      		push r17
 446 0126 CF93      		push r28
 447 0128 DF93      		push r29
 448               	/* prologue end (size=9) */
 449 012a 7C01      		movw r14,r24
 450 012c 6A01      		movw r12,r20
 327:os/source/os_q.c **** #if OS_CRITICAL_METHOD == 3                      /* Allocate storage for CPU status register       
 328:os/source/os_q.c ****     OS_CPU_SR  cpu_sr;
 329:os/source/os_q.c **** #endif    
 330:os/source/os_q.c ****     void      *msg;
 331:os/source/os_q.c ****     OS_Q      *pq;
 332:os/source/os_q.c **** 
 333:os/source/os_q.c **** 
 334:os/source/os_q.c ****     if (OSIntNesting > 0) {                      /* See if called from ISR ...                     
 452               	.LM51:
 453 012e B090 0000 		lds r11,OSIntNesting
 454 0132 BB20      		tst r11
 455 0134 31F0      		breq .L14
 335:os/source/os_q.c ****         *err = OS_ERR_PEND_ISR;                  /* ... can't PEND from an ISR                     
 457               	.LM52:
 458 0136 82E0      		ldi r24,lo8(2)
 459 0138 FA01      		movw r30,r20
 460 013a 8083      		st Z,r24
 336:os/source/os_q.c ****         return ((void *)0);
 462               	.LM53:
 463 013c 80E0      		ldi r24,lo8(0)
 464 013e 90E0      		ldi r25,hi8(0)
 465 0140 52C0      		rjmp .L13
 466               	.L14:
 337:os/source/os_q.c ****     }
 338:os/source/os_q.c **** #if OS_ARG_CHK_EN > 0
 339:os/source/os_q.c ****     if (pevent == (OS_EVENT *)0) {               /* Validate 'pevent'                              
 340:os/source/os_q.c ****         *err = OS_ERR_PEVENT_NULL;
 341:os/source/os_q.c ****         return ((void *)0);
 342:os/source/os_q.c ****     }
 343:os/source/os_q.c ****     if (pevent->OSEventType != OS_EVENT_TYPE_Q) {/* Validate event block type                      
 344:os/source/os_q.c ****         *err = OS_ERR_EVENT_TYPE;
 345:os/source/os_q.c ****         return ((void *)0);
 346:os/source/os_q.c ****     }
 347:os/source/os_q.c **** #endif
 348:os/source/os_q.c ****     OS_ENTER_CRITICAL();
 468               	.LM54:
 469               	/* #APP */
 470 0142 F894      		cli
 349:os/source/os_q.c ****     pq = (OS_Q *)pevent->OSEventPtr;             /* Point at queue control block                   
 472               	.LM55:
 473               	/* #NOAPP */
 474 0144 FC01      		movw r30,r24
 475 0146 A481      		ldd r26,Z+4
 476 0148 B581      		ldd r27,Z+5
 350:os/source/os_q.c ****     if (pq->OSQEntries != 0) {                   /* See if any messages in the queue               
 478               	.LM56:
 479 014a FD01      		movw r30,r26
 480 014c C485      		ldd r28,Z+12
 481 014e D585      		ldd r29,Z+13
 482 0150 2097      		sbiw r28,0
 483 0152 B9F0      		breq .L15
 351:os/source/os_q.c ****         msg = *pq->OSQOut++;                     /* Yes, extract oldest message from the queue     
 485               	.LM57:
 486 0154 2085      		ldd r18,Z+8
 487 0156 3185      		ldd r19,Z+9
 488 0158 F901      		movw r30,r18
 489 015a 8191      		ld r24,Z+
 490 015c 9191      		ld r25,Z+
 491 015e 9F01      		movw r18,r30
 492 0160 FD01      		movw r30,r26
 493 0162 3187      		std Z+9,r19
 494 0164 2087      		std Z+8,r18
 495 0166 8C01      		movw r16,r24
 352:os/source/os_q.c ****         pq->OSQEntries--;                        /* Update the number of entries in the queue      
 497               	.LM58:
 498 0168 2197      		sbiw r28,1
 499 016a D587      		std Z+13,r29
 500 016c C487      		std Z+12,r28
 353:os/source/os_q.c ****         if (pq->OSQOut == pq->OSQEnd) {          /* Wrap OUT pointer if we are at the end of the qu
 502               	.LM59:
 503 016e 8481      		ldd r24,Z+4
 504 0170 9581      		ldd r25,Z+5
 505 0172 2817      		cp r18,r24
 506 0174 3907      		cpc r19,r25
 507 0176 59F5      		brne .L19
 354:os/source/os_q.c ****             pq->OSQOut = pq->OSQStart;
 509               	.LM60:
 510 0178 8281      		ldd r24,Z+2
 511 017a 9381      		ldd r25,Z+3
 512 017c 9187      		std Z+9,r25
 513 017e 8087      		std Z+8,r24
 514 0180 26C0      		rjmp .L19
 515               	.L15:
 355:os/source/os_q.c ****         }
 356:os/source/os_q.c ****         OS_EXIT_CRITICAL();
 357:os/source/os_q.c ****         *err = OS_NO_ERR;
 358:os/source/os_q.c ****         return (msg);                            /* Return message received                        
 359:os/source/os_q.c ****     }
 360:os/source/os_q.c ****     OSTCBCur->OSTCBStat |= OS_STAT_Q;            /* Task will have to pend for a message to be post
 517               	.LM61:
 518 0182 E091 0000 		lds r30,OSTCBCur
 519 0186 F091 0000 		lds r31,(OSTCBCur)+1
 520 018a 808D      		ldd r24,Z+24
 521 018c 8460      		ori r24,lo8(4)
 522 018e 808F      		std Z+24,r24
 361:os/source/os_q.c ****     OSTCBCur->OSTCBDly   = timeout;              /* Load timeout into TCB                          
 524               	.LM62:
 525 0190 E091 0000 		lds r30,OSTCBCur
 526 0194 F091 0000 		lds r31,(OSTCBCur)+1
 527 0198 778B      		std Z+23,r23
 528 019a 668B      		std Z+22,r22
 362:os/source/os_q.c ****     OS_EventTaskWait(pevent);                    /* Suspend task until event or timeout occurs     
 530               	.LM63:
 531 019c C701      		movw r24,r14
 532 019e 0E94 0000 		call OS_EventTaskWait
 363:os/source/os_q.c ****     OS_EXIT_CRITICAL();
 534               	.LM64:
 535               	/* #APP */
 536 01a2 7894      		sei
 364:os/source/os_q.c ****     OS_Sched();                                  /* Find next highest priority task ready to run   
 538               	.LM65:
 539               	/* #NOAPP */
 540 01a4 0E94 0000 		call OS_Sched
 365:os/source/os_q.c ****     OS_ENTER_CRITICAL();
 542               	.LM66:
 543               	/* #APP */
 544 01a8 F894      		cli
 366:os/source/os_q.c ****     msg = OSTCBCur->OSTCBMsg;
 546               	.LM67:
 547               	/* #NOAPP */
 548 01aa E091 0000 		lds r30,OSTCBCur
 549 01ae F091 0000 		lds r31,(OSTCBCur)+1
 550 01b2 0489      		ldd r16,Z+20
 551 01b4 1589      		ldd r17,Z+21
 367:os/source/os_q.c ****     if (msg != (void *)0) {                      /* Did we get a message?                          
 553               	.LM68:
 554 01b6 0115      		cp r16,__zero_reg__
 555 01b8 1105      		cpc r17,__zero_reg__
 556 01ba 69F0      		breq .L17
 368:os/source/os_q.c ****         OSTCBCur->OSTCBMsg      = (void *)0;     /* Extract message from TCB (Put there by QPost)  
 558               	.LM69:
 559 01bc D58B      		std Z+21,r29
 560 01be C48B      		std Z+20,r28
 369:os/source/os_q.c ****         OSTCBCur->OSTCBStat     = OS_STAT_RDY;
 562               	.LM70:
 563 01c0 B08E      		std Z+24,r11
 370:os/source/os_q.c ****         OSTCBCur->OSTCBEventPtr = (OS_EVENT *)0; /* No longer waiting for event                    
 565               	.LM71:
 566 01c2 E091 0000 		lds r30,OSTCBCur
 567 01c6 F091 0000 		lds r31,(OSTCBCur)+1
 568 01ca D38B      		std Z+19,r29
 569 01cc C28B      		std Z+18,r28
 570               	.L19:
 371:os/source/os_q.c ****         OS_EXIT_CRITICAL();
 572               	.LM72:
 573               	/* #APP */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -