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

📄 ggt_kernel.lst

📁 ARM下的多任务操作系统源码:GogotoOS
💻 LST
📖 第 1 页 / 共 5 页
字号:
  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 + -