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

📄 os_flag.lst

📁 称植到lpc2124上的UCOS2.85版 是本人初学移植和ARM的成果 可能已有人上传类似的了
💻 LST
📖 第 1 页 / 共 5 页
字号:
 389 00ee 8091 0000 		lds r24,OSIntNesting
 390 00f2 8823      		tst r24
 391 00f4 29F0      		breq .L28
 223:../OSsrc/os_flag.c ****         *perr = OS_ERR_CREATE_ISR;                  /* ... can't CREATE from an ISR                
 393               	.LM53:
 394 00f6 80E1      		ldi r24,lo8(16)
 395 00f8 8C93      		st X,r24
 224:../OSsrc/os_flag.c ****         return ((OS_FLAG_GRP *)0);
 397               	.LM54:
 398 00fa 60E0      		ldi r22,lo8(0)
 399 00fc 70E0      		ldi r23,hi8(0)
 400 00fe 1CC0      		rjmp .L26
 401               	.L28:
 225:../OSsrc/os_flag.c ****     }
 226:../OSsrc/os_flag.c ****     OS_ENTER_CRITICAL();
 403               	.LM55:
 404               	/* #APP */
 405 0100 F894      		cli
 227:../OSsrc/os_flag.c ****     pgrp = OSFlagFreeList;                          /* Get next free event flag                    
 407               	.LM56:
 408               	/* #NOAPP */
 409 0102 E091 0000 		lds r30,OSFlagFreeList
 410 0106 F091 0000 		lds r31,(OSFlagFreeList)+1
 228:../OSsrc/os_flag.c ****     if (pgrp != (OS_FLAG_GRP *)0) {                 /* See if we have event flag groups available  
 412               	.LM57:
 413 010a 3097      		sbiw r30,0
 414 010c 89F0      		breq .L29
 229:../OSsrc/os_flag.c ****                                                     /* Adjust free list                            
 230:../OSsrc/os_flag.c ****         OSFlagFreeList       = (OS_FLAG_GRP *)OSFlagFreeList->OSFlagWaitList;
 416               	.LM58:
 417 010e 8181      		ldd r24,Z+1
 418 0110 9281      		ldd r25,Z+2
 419 0112 9093 0000 		sts (OSFlagFreeList)+1,r25
 420 0116 8093 0000 		sts OSFlagFreeList,r24
 231:../OSsrc/os_flag.c ****         pgrp->OSFlagType     = OS_EVENT_TYPE_FLAG;  /* Set to event flag group type                
 422               	.LM59:
 423 011a 85E0      		ldi r24,lo8(5)
 424 011c 8083      		st Z,r24
 232:../OSsrc/os_flag.c ****         pgrp->OSFlagFlags    = flags;               /* Set to desired initial value                
 426               	.LM60:
 427 011e 2383      		std Z+3,r18
 233:../OSsrc/os_flag.c ****         pgrp->OSFlagWaitList = (void *)0;           /* Clear list of tasks waiting on flags        
 429               	.LM61:
 430 0120 1282      		std Z+2,__zero_reg__
 431 0122 1182      		std Z+1,__zero_reg__
 234:../OSsrc/os_flag.c **** #if OS_FLAG_NAME_SIZE > 1
 235:../OSsrc/os_flag.c ****         pgrp->OSFlagName[0]  = '?';
 433               	.LM62:
 434 0124 8FE3      		ldi r24,lo8(63)
 435 0126 8483      		std Z+4,r24
 236:../OSsrc/os_flag.c ****         pgrp->OSFlagName[1]  = OS_ASCII_NUL;
 437               	.LM63:
 438 0128 1582      		std Z+5,__zero_reg__
 237:../OSsrc/os_flag.c **** #endif
 238:../OSsrc/os_flag.c ****         OS_EXIT_CRITICAL();
 440               	.LM64:
 441               	/* #APP */
 442 012a 7894      		sei
 239:../OSsrc/os_flag.c ****         *perr                = OS_ERR_NONE;
 444               	.LM65:
 445               	/* #NOAPP */
 446 012c 1C92      		st X,__zero_reg__
 447 012e 03C0      		rjmp .L30
 448               	.L29:
 240:../OSsrc/os_flag.c ****     } else {
 241:../OSsrc/os_flag.c ****         OS_EXIT_CRITICAL();
 450               	.LM66:
 451               	/* #APP */
 452 0130 7894      		sei
 242:../OSsrc/os_flag.c ****         *perr                = OS_ERR_FLAG_GRP_DEPLETED;
 454               	.LM67:
 455               	/* #NOAPP */
 456 0132 82E7      		ldi r24,lo8(114)
 457 0134 8C93      		st X,r24
 458               	.L30:
 243:../OSsrc/os_flag.c ****     }
 244:../OSsrc/os_flag.c ****     return (pgrp);                                  /* Return pointer to event flag group          
 460               	.LM68:
 461 0136 BF01      		movw r22,r30
 462               	.L26:
 245:../OSsrc/os_flag.c **** }
 464               	.LM69:
 465 0138 CB01      		movw r24,r22
 466               	/* epilogue: frame size=0 */
 467 013a 0895      		ret
 468               	/* epilogue end (size=1) */
 469               	/* function OSFlagCreate size 47 (46) */
 474               	.Lscope1:
 479               	.global	OSFlagNameGet
 481               	OSFlagNameGet:
 246:../OSsrc/os_flag.c **** 
 247:../OSsrc/os_flag.c **** /*$PAGE*/
 248:../OSsrc/os_flag.c **** /*
 249:../OSsrc/os_flag.c **** ***************************************************************************************************
 250:../OSsrc/os_flag.c **** *                                     DELETE AN EVENT FLAG GROUP
 251:../OSsrc/os_flag.c **** *
 252:../OSsrc/os_flag.c **** * Description: This function deletes an event flag group and readies all tasks pending on the event
 253:../OSsrc/os_flag.c **** *              group.
 254:../OSsrc/os_flag.c **** *
 255:../OSsrc/os_flag.c **** * Arguments  : pgrp          is a pointer to the desired event flag group.
 256:../OSsrc/os_flag.c **** *
 257:../OSsrc/os_flag.c **** *              opt           determines delete options as follows:
 258:../OSsrc/os_flag.c **** *                            opt == OS_DEL_NO_PEND   Deletes the event flag group ONLY if no task p
 259:../OSsrc/os_flag.c **** *                            opt == OS_DEL_ALWAYS    Deletes the event flag group even if tasks are
 260:../OSsrc/os_flag.c **** *                                                    waiting.  In this case, all the tasks pending 
 261:../OSsrc/os_flag.c **** *                                                    readied.
 262:../OSsrc/os_flag.c **** *
 263:../OSsrc/os_flag.c **** *              perr          is a pointer to an error code that can contain one of the following va
 264:../OSsrc/os_flag.c **** *                            OS_ERR_NONE               The call was successful and the event flag g
 265:../OSsrc/os_flag.c **** *                                                      deleted
 266:../OSsrc/os_flag.c **** *                            OS_ERR_DEL_ISR            If you attempted to delete the event flag gr
 267:../OSsrc/os_flag.c **** *                                                      an ISR
 268:../OSsrc/os_flag.c **** *                            OS_ERR_FLAG_INVALID_PGRP  If 'pgrp' is a NULL pointer.
 269:../OSsrc/os_flag.c **** *                            OS_ERR_EVENT_TYPE         If you didn't pass a pointer to an event fla
 270:../OSsrc/os_flag.c **** *                            OS_ERR_INVALID_OPT        An invalid option was specified
 271:../OSsrc/os_flag.c **** *                            OS_ERR_TASK_WAITING       One or more tasks were waiting on the event 
 272:../OSsrc/os_flag.c **** *                                                      group.
 273:../OSsrc/os_flag.c **** *
 274:../OSsrc/os_flag.c **** * Returns    : pgrp          upon error
 275:../OSsrc/os_flag.c **** *              (OS_EVENT *)0 if the event flag group was successfully deleted.
 276:../OSsrc/os_flag.c **** *
 277:../OSsrc/os_flag.c **** * Note(s)    : 1) This function must be used with care.  Tasks that would normally expect the prese
 278:../OSsrc/os_flag.c **** *                 the event flag group MUST check the return code of OSFlagAccept() and OSFlagPend(
 279:../OSsrc/os_flag.c **** *              2) This call can potentially disable interrupts for a long time.  The interrupt disa
 280:../OSsrc/os_flag.c **** *                 time is directly proportional to the number of tasks waiting on the event flag gr
 281:../OSsrc/os_flag.c **** ***************************************************************************************************
 282:../OSsrc/os_flag.c **** */
 283:../OSsrc/os_flag.c **** 
 284:../OSsrc/os_flag.c **** #if OS_FLAG_DEL_EN > 0
 285:../OSsrc/os_flag.c **** OS_FLAG_GRP  *OSFlagDel (OS_FLAG_GRP *pgrp, INT8U opt, INT8U *perr)
 286:../OSsrc/os_flag.c **** {
 287:../OSsrc/os_flag.c ****     BOOLEAN       tasks_waiting;
 288:../OSsrc/os_flag.c ****     OS_FLAG_NODE *pnode;
 289:../OSsrc/os_flag.c ****     OS_FLAG_GRP  *pgrp_return;
 290:../OSsrc/os_flag.c **** #if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status regis
 291:../OSsrc/os_flag.c ****     OS_CPU_SR     cpu_sr = 0;
 292:../OSsrc/os_flag.c **** #endif
 293:../OSsrc/os_flag.c **** 
 294:../OSsrc/os_flag.c **** 
 295:../OSsrc/os_flag.c **** 
 296:../OSsrc/os_flag.c **** #if OS_ARG_CHK_EN > 0
 297:../OSsrc/os_flag.c ****     if (perr == (INT8U *)0) {                              /* Validate 'perr'                      
 298:../OSsrc/os_flag.c ****         return (pgrp);
 299:../OSsrc/os_flag.c ****     }
 300:../OSsrc/os_flag.c ****     if (pgrp == (OS_FLAG_GRP *)0) {                        /* Validate 'pgrp'                      
 301:../OSsrc/os_flag.c ****         *perr = OS_ERR_FLAG_INVALID_PGRP;
 302:../OSsrc/os_flag.c ****         return (pgrp);
 303:../OSsrc/os_flag.c ****     }
 304:../OSsrc/os_flag.c **** #endif
 305:../OSsrc/os_flag.c ****     if (OSIntNesting > 0) {                                /* See if called from ISR ...           
 306:../OSsrc/os_flag.c ****         *perr = OS_ERR_DEL_ISR;                            /* ... can't DELETE from an ISR         
 307:../OSsrc/os_flag.c ****         return (pgrp);
 308:../OSsrc/os_flag.c ****     }
 309:../OSsrc/os_flag.c ****     if (pgrp->OSFlagType != OS_EVENT_TYPE_FLAG) {          /* Validate event group type            
 310:../OSsrc/os_flag.c ****         *perr = OS_ERR_EVENT_TYPE;
 311:../OSsrc/os_flag.c ****         return (pgrp);
 312:../OSsrc/os_flag.c ****     }
 313:../OSsrc/os_flag.c ****     OS_ENTER_CRITICAL();
 314:../OSsrc/os_flag.c ****     if (pgrp->OSFlagWaitList != (void *)0) {               /* See if any tasks waiting on event fla
 315:../OSsrc/os_flag.c ****         tasks_waiting = OS_TRUE;                           /* Yes                                  
 316:../OSsrc/os_flag.c ****     } else {
 317:../OSsrc/os_flag.c ****         tasks_waiting = OS_FALSE;                          /* No                                   
 318:../OSsrc/os_flag.c ****     }
 319:../OSsrc/os_flag.c ****     switch (opt) {
 320:../OSsrc/os_flag.c ****         case OS_DEL_NO_PEND:                               /* Delete group if no task waiting      
 321:../OSsrc/os_flag.c ****              if (tasks_waiting == OS_FALSE) {
 322:../OSsrc/os_flag.c **** #if OS_FLAG_NAME_SIZE > 1
 323:../OSsrc/os_flag.c ****                  pgrp->OSFlagName[0]  = '?';               /* Unknown name                         
 324:../OSsrc/os_flag.c ****                  pgrp->OSFlagName[1]  = OS_ASCII_NUL;
 325:../OSsrc/os_flag.c **** #endif
 326:../OSsrc/os_flag.c ****                  pgrp->OSFlagType     = OS_EVENT_TYPE_UNUSED;
 327:../OSsrc/os_flag.c ****                  pgrp->OSFlagWaitList = (void *)OSFlagFreeList; /* Return group to free list       
 328:../OSsrc/os_flag.c ****                  pgrp->OSFlagFlags    = (OS_FLAGS)0;
 329:../OSsrc/os_flag.c ****                  OSFlagFreeList       = pgrp;
 330:../OSsrc/os_flag.c ****                  OS_EXIT_CRITICAL();
 331:../OSsrc/os_flag.c ****                  *perr                = OS_ERR_NONE;
 332:../OSsrc/os_flag.c ****                  pgrp_return          = (OS_FLAG_GRP *)0;  /* Event Flag Group has been deleted    
 333:../OSsrc/os_flag.c ****              } else {
 334:../OSsrc/os_flag.c ****                  OS_EXIT_CRITICAL();
 335:../OSsrc/os_flag.c ****                  *perr                = OS_ERR_TASK_WAITING;
 336:../OSsrc/os_flag.c ****                  pgrp_return          = pgrp;
 337:../OSsrc/os_flag.c ****              }
 338:../OSsrc/os_flag.c ****              break;
 339:../OSsrc/os_flag.c **** 
 340:../OSsrc/os_flag.c ****         case OS_DEL_ALWAYS:                                /* Always delete the event flag group   
 341:../OSsrc/os_flag.c ****              pnode = (OS_FLAG_NODE *)pgrp->OSFlagWaitList;
 342:../OSsrc/os_flag.c ****              while (pnode != (OS_FLAG_NODE *)0) {          /* Ready ALL tasks waiting for flags    
 343:../OSsrc/os_flag.c ****                  (void)OS_FlagTaskRdy(pnode, (OS_FLAGS)0);
 344:../OSsrc/os_flag.c ****                  pnode = (OS_FLAG_NODE *)pnode->OSFlagNodeNext;
 345:../OSsrc/os_flag.c ****              }
 346:../OSsrc/os_flag.c **** #if OS_FLAG_NAME_SIZE > 1
 347:../OSsrc/os_flag.c ****              pgrp->OSFlagName[0]  = '?';                   /* Unknown name                         
 348:../OSsrc/os_flag.c ****              pgrp->OSFlagName[1]  = OS_ASCII_NUL;
 349:../OSsrc/os_flag.c **** #endif
 350:../OSsrc/os_flag.c ****              pgrp->OSFlagType     = OS_EVENT_TYPE_UNUSED;
 351:../OSsrc/os_flag.c ****              pgrp->OSFlagWaitList = (void *)OSFlagFreeList;/* Return group to free list            
 352:../OSsrc/os_flag.c ****              pgrp->OSFlagFlags    = (OS_FLAGS)0;
 353:../OSsrc/os_flag.c ****              OSFlagFreeList       = pgrp;
 354:../OSsrc/os_flag.c ****              OS_EXIT_CRITICAL();
 355:../OSsrc/os_flag.c ****              if (tasks_waiting == OS_TRUE) {               /* Reschedule only if task(s) were waiti
 356:../OSsrc/os_flag.c ****                  OS_Sched();                               /* Find highest priority task ready to r
 357:../OSsrc/os_flag.c ****              }
 358:../OSsrc/os_flag.c ****              *perr = OS_ERR_NONE;
 359:../OSsrc/os_flag.c ****              pgrp_return          = (OS_FLAG_GRP *)0;      /* Event Flag Group has been deleted    
 360:../OSsrc/os_flag.c ****              break;
 361:../OSsrc/os_flag.c **** 
 362:../OSsrc/os_flag.c ****         default:
 363:../OSsrc/os_flag.c ****              OS_EXIT_CRITICAL();
 364:../OSsrc/os_flag.c ****              *perr                = OS_ERR_INVALID_OPT;
 365:../OSsrc/os_flag.c ****              pgrp_return          = pgrp;
 366:../OSsrc/os_flag.c ****              break;
 367:../OSsrc/os_flag.c ****     }
 368:../OSsrc/os_flag.c ****     return (pgrp_return);
 369:../OSsrc/os_flag.c **** }
 370:../OSsrc/os_flag.c **** #endif
 371:../OSsrc/os_flag.c **** /*$PAGE*/
 372:../OSsrc/os_flag.c **** /*
 373:../OSsrc/os_flag.c **** ***************************************************************************************************
 374:../OSsrc/os_flag.c **** *                                 GET THE NAME OF AN EVENT FLAG GROUP
 375:../OSsrc/os_flag.c **** *
 376:../OSsrc/os_flag.c **** * Description: This function is used to obtain the name assigned to an event flag group
 377:../OSsrc/os_flag.c **** *
 378:../OSsrc/os_flag.c **** * Arguments  : pgrp      is a pointer to the event flag group.
 379:../OSsrc/os_flag.c **** *

⌨️ 快捷键说明

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