📄 ggt_kernel.lst
字号:
541 **------------------修改记录------------------------------------------------------------------------
542 ** 修改人: 卢益贵
543 ** 日 期: 2008年1月8日
544 ** 说 明:
545 ** 原代码:
546 BOOL OSTaskMsgPost(const OS_ID TaskID, const UINT32 Msg, const UINT32 wParam, const UINT32 lParam)
547 {
548 BOOL R;
549 _pOSMsg pMsg;
550 _pOSTask pTask;
551
552 OSIRQLock();
553
554 pMsg = (_pOSMsg)BoxAlloc(pOSBoxMsg);
555 R = pMsg != NULL;
556 if(R)
557 {
558 pMsg->Sender = pOSTskNow->ID;
559 pMsg->Msg = Msg;
560 pMsg->wParam = wParam;
561 pMsg->lParam = lParam;
562
563 pTask = &pOSTask[TaskID - 1];
564 ListAppend((void *)(&(pTask->pMsg)), pMsg);
565
566 //如果对方正在等待,则加载他
567 if(OS_STATE_TSK_WAIT_MSG == pTask->State)
568 OSTaskPushReady(pTask);
569 }
570
571 OSIRQUnlock();
572 return(R);
573 }
574 **--------------------------------------------------------------------------------------------------
575 ****************************************************************************************************/
576 INT32 OSTaskMsgPost(const OS_ID TaskID, const UINT32 Msg, const UINT32 wParam, const UINT32 lParam)
577 {
578 1 INT32 R;
579 1 _pOSMsg pMsg;
580 1 _pOSTask pTask;
581 1
582 1 OSIRQLock();
583 1
584 1 pMsg = (_pOSMsg)BoxAlloc(pOSBoxMsg);
585 1 if(pMsg != NULL)
586 1 {
ARM COMPILER V2.32a, GGT_Kernel 28/02/08 23:05:55 PAGE 10
587 2 pMsg->Msg = Msg;
588 2 pMsg->wParam = wParam;
589 2 pMsg->lParam = lParam;
590 2
591 2 pTask = &pOSTask[TaskID - 1];
592 2 ListAppend((void *)(&(pTask->pMsg)), pMsg);
593 2
594 2 //如果对方正在等待,则加载他
595 2 if(OS_STATE_TSK_WAIT_MSG == pTask->State)
596 2 {
597 3 pTask->State = OS_STATE_TSK_READY;
598 3 //优先加入队列头
599 3 ListFirst((void *)(&pOSTskReady), (void *)pTask);
600 3 R = 2;
601 3 }else
602 2 R = 1;
603 2 }else
604 1 R = 0;
605 1
606 1 OSIRQUnlock();
607 1 return(R);
608 1 }
609
610 /****************************************************************************************************
611 ** 函数名: OSTaskMsgPeek
612 ** 描 述: 消息窥探
613 ** 输 入: pMsg:指向消息结构的指针
614 ** 输 出: 返回TRUE表示有消息
615 ** 创建人: 卢益贵
616 ** 日 期: 2007年12月8日
617
618 **------------------修改记录------------------------------------------------------------------------
619 ** 修改人:
620 ** 日 期:
621 ** 说 明:
622 ** 原代码:
623 **--------------------------------------------------------------------------------------------------
624 ****************************************************************************************************/
625 BOOL OSTaskMsgPeek(_pMsg pMsg)
626 {
627 1 BOOL R;
628 1 _pOSMsg pOSMsg;
629 1
630 1 OSIRQLock();
631 1
632 1 pOSMsg = pOSTskNow->pMsg;
633 1 R = (NULL != pOSMsg);
634 1 if(R)
635 1 {
636 2 *pMsg = *((_pMsg)(&(pOSMsg->Msg)));
637 2 pOSTskNow->pMsg = (pOSTskNow->pMsg)->pNext;
638 2 BoxFree(pOSBoxMsg, pOSMsg);
639 2 }
640 1
641 1 OSIRQUnlock();
642 1
643 1 return(R);
644 1 }
645
646 /****************************************************************************************************
647 ** 函数名: OSTaskMsgWait
648 ** 描 述: 消息等待函数,没有消息不返回,一直挂起等待
649 ** 输 入: pMsg:指向消息结构的指针
650 ** 输 出: 返回TRUE表示有消息
651 ** 创建人: 卢益贵
652 ** 日 期: 2007年12月8日
ARM COMPILER V2.32a, GGT_Kernel 28/02/08 23:05:55 PAGE 11
653
654 **------------------修改记录------------------------------------------------------------------------
655 ** 修改人:
656 ** 日 期:
657 ** 说 明:
658 ** 原代码:
659 **--------------------------------------------------------------------------------------------------
660 ****************************************************************************************************/
661 BOOL OSTaskMsgWait(_pMsg pMsg)
662 {
663 1 DoWait:
664 1 if(OSTaskMsgPeek(pMsg))
665 1 {
666 2 return(TRUE);
667 2 }else
668 1 {
669 2 pOSTskNow->State = OS_STATE_TSK_WAIT_MSG;
670 2 OSTaskIsNULLLoadDef();
671 2 OSTaskSW();
672 2 goto DoWait;
673 2 }
674 1 }
675
676
ARM COMPILER V2.32a, GGT_Kernel 28/02/08 23:05:55 PAGE 12
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN CODE32 (SWI_Handler?A)
EXTERN CODE32 (OSStackAlloc?A)
EXTERN CODE32 (OSStackInit?A)
EXTERN CODE32 (ListFirst?A)
EXTERN CODE32 (ListAppend?A)
EXTERN CODE32 (ListDelete?A)
EXTERN CODE32 (BoxInit?A)
EXTERN CODE32 (BoxAlloc?A)
EXTERN CODE32 (BoxFree?A)
EXTERN CODE32 (OSGetBoxTask?A)
EXTERN CODE32 (OSGetBoxStack?A)
EXTERN CODE32 (OSGetSumTask?A)
EXTERN CODE32 (OSGetSizeStack?A)
EXTERN CODE32 (OSGetTick?A)
EXTERN CODE32 (OSGetSumMsg?A)
EXTERN CODE32 (OSGetBoxMsg?A)
EXTERN CODE32 (OSTimerInit?A)
EXTERN CODE32 (?C?UDIV?A)
*** PUBLICS:
PUBLIC OSTaskUserCreate?A
PUBLIC OSTaskMsgWait?A
PUBLIC OSTaskMsgPeek?A
PUBLIC OSTaskMsgPost?A
PUBLIC OSTaskSelf?A
PUBLIC OSTaskKill?A
PUBLIC OSTaskDelay?A
PUBLIC OSTaskDispatch?A
PUBLIC OSTaskPushReady?A
PUBLIC OSTaskPushDelay?A
PUBLIC OSInit?A
PUBLIC OSTaskIsNULLLoadDef?A
PUBLIC OSTaskOrderByPrio?A
PUBLIC OSTaskGetPrioTick?A
PUBLIC OSTaskDataInit?A
PUBLIC OSTaskSetPrio?A
PUBLIC Resume?A
PUBLIC Suspend?A
PUBLIC OSTaskInit?A
PUBLIC pOSTskNow
PUBLIC pOSTskMain
PUBLIC pOSTskReady
PUBLIC pOSTask
PUBLIC pOSTskDelay
PUBLIC pOSBoxMsg
*** DATA SEGMENT '?DT0?GGT_Kernel':
00000000 pOSTskNow:
00000000 BEGIN_INIT
00000000 00000000 DD 0x0
00000004 END_INIT
00000004 pOSTskMain:
00000004 BEGIN_INIT
00000004 00000000 DD 0x0
00000008 END_INIT
00000008 pOSTskReady:
00000008 BEGIN_INIT
00000008 00000000 DD 0x0
0000000C END_INIT
0000000C pOSTask:
0000000C DS 4
00000010 pOSTskDelay:
ARM COMPILER V2.32a, GGT_Kernel 28/02/08 23:05:55 PAGE 13
00000010 BEGIN_INIT
00000010 00000000 DD 0x0
00000014 END_INIT
00000014 pOSBoxMsg:
00000014 DS 4
*** CODE SEGMENT '?PR?OSTaskGetPrioTick?A?GGT_Kernel':
64: UINT32 OSTaskGetPrioTick(UINT32 Prio)
00000000 E1A02000 MOV R2,R0 ; Prio
00000004 ---- Variable 'Prio' assigned to Register 'R2' ----
66: if(0 == Prio)
00000004 E1A00002 MOV R0,R2 ; Prio
00000008 E3500000 CMP R0,#0x0000 ; Prio
0000000C 1A000001 BNE L_1 ; Targ=0x18
67: return(255);
00000010 E3A000FF MOV R0,#0xFF
00000014 EA000007 B L_2 ; Targ=0x38
00000018 L_1:
69: if(255 < Prio)
00000018 E1A00002 MOV R0,R2 ; Prio
0000001C E35000FF CMP R0,#0x00FF ; Prio
00000020 9A000001 BLS L_4 ; Targ=0x2C
70: return(1);
00000024 E3A00001 MOV R0,#0x1
00000028 EA000002 B L_2 ; Targ=0x38
0000002C L_4:
72: return(256 - Prio);
0000002C E1A01002 MOV R1,R2 ; Prio
00000030 E3A00C01 MOV R0,#0x100
00000034 E0400001 SUB R0,R0,R1 ; Prio
73: }
00000038 L_2:
00000038 E12FFF1E BX R14
0000003C ENDP ; 'OSTaskGetPrioTick?A'
*** CODE SEGMENT '?PR?OSTaskOrderByPrio?A?GGT_Kernel':
91: BOOL OSTaskOrderByPrio(void *pNode, void *pNodeIns)
00000000 ---- Variable 'pNodeIns' assigned to Register 'R1' ----
00000000 E1A02000 MOV R2,R0 ; pNode
00000004 ---- Variable 'pNode' assigned to Register 'R2' ----
93: if(((_pOSTask)pNodeIns)->PrioTick < ((_pOSTask)pNode)->PrioTick)
00000004 E1A00002 MOV R0,R2 ; pNode
00000008 E5902010 LDR R2,[R0,#0x10]
0000000C E1A00001 MOV R0,R1 ; pNodeIns
00000010 E5900010 LDR R0,[R0,#0x10]
00000014 E1500002 CMP R0,R2
00000018 2A000001 BCS L_6 ; Targ=0x24
94: return(1);
0000001C E3A00001 MOV R0,#0x1
00000020 EA000000 B L_7 ; Targ=0x28
00000024 L_6:
96: return(0);
00000024 E3A00000 MOV R0,#0x0
97: }
00000028 L_7:
00000028 E12FFF1E BX R14
0000002C ENDP ; 'OSTaskOrderByPrio?A'
*** CODE SEGMENT '?PR?OSTaskDataInit?A?GGT_Kernel':
114: void OSTaskDataInit(_pOSTask pTask)
00000000 E1A02000 MOV R2,R0 ; pTask
00000004 ---- Variable 'pTask' assigned to Register 'R2' ----
116: pTask->pNext = NULL;
00000004 E3A01000 MOV R1,#0x0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -