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

📄 os_cpu_c.lst

📁 基于51单片机UCOS移植
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V9.01   OS_CPU_C                                                              10/31/2012 17:19:07 PAGE 1   


C51 COMPILER V9.01, COMPILATION OF MODULE OS_CPU_C
OBJECT MODULE PLACED IN .\Output\OS_CPU_C.obj
COMPILER INVOKED BY: D:\keil c51完全版\an_zhuang_51\C51\BIN\C51.EXE uCOS-II\MCS-51\OS_CPU_C.C LARGE BROWSE INCDIR(.\ucos
                    --ii\inc\) DEBUG OBJECTEXTEND PRINT(.\Listing\OS_CPU_C.lst) OBJECT(.\Output\OS_CPU_C.obj)

line level    source

   1          /*
   2          *********************************************************************************************************
   3          *                                                uC/OS-II
   4          *                                          The Real-Time Kernel
   5          *
   6          *                          (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL
   7          *                                           All Rights Reserved
   8          *
   9          *
  10          *                                           uCOS_51 for MCS-51
  11          *
  12          * File : OS_CPU_C.C
  13          * By   : Jean J. Labrosse
  14          * Created by : QQ 591881218
  15          *********************************************************************************************************
  16          */
  17          
  18          #define  OS_CPU_GLOBALS
  19          
  20          #include "..\ucos_51\ucos-ii\inc\includes.h"
  21          
  22          /*
  23          *********************************************************************************************************
  24          *                                             初始化任务栈
  25          *
  26          * 描述       : 本函数为OSTaskCreate()和OSTaskCreateExt()函数所调用,用于任务栈的初始化。初始化后的任务栈
  27          *                          看起来像刚刚发生过一次中断并将所有的寄存器都保存进了堆栈的情形一样。
  28          *
  29          * 参数       : task             任务代码的指针。
  30          *
  31          *                          ppdata       当任务开始执行时传递给任务的参数的指针。
  32          *
  33          *                          ptos         分配给任务堆栈的栈顶指针。
  34          *
  35          *                          opt          用于设定OSTaskCreateExt()的选项,指定是否允许堆栈检验,是否将堆栈清零,是否进行
  36          *                                               浮点操作等。当用OSTaskCreate()函数调用时,设置为0。
  37          *
  38          * 返回值         : 返回栈顶指针
  39          * 
  40          * 注意       : 任务栈结构示意图(杨屹)
  41          *
  42          *                                    ---------- -
  43          *                 用户栈最高地址---->|        | |
  44          *                                    ---------- |
  45          *                                    |   ...  | 仿真堆栈空间
  46          *----------                          ---------- | 每任务一个
  47          *|OSTCBCur|               ?C_XBP---->|        | | KEIL自动处理
  48          *----------                          ---------- -
  49          *    |                               |空闲间隔|
  50          *    |     -----------------------   ----------                           ----------
  51          *    \---->|OSTCBCur->OSTCBStkPtr|   |?C_XBP低|                    SP---->|        |
  52          *          -----------------------   ----------                           ----------
  53          *                     |              |?C_XBP高|                           |        |
  54          *                     |              ---------- -                         ----------
C51 COMPILER V9.01   OS_CPU_C                                                              10/31/2012 17:19:07 PAGE 2   

  55          *                     |              |        | |                         |   .    |
  56          *                     |              ---------- |                         |   .    |
  57          *                     |              |        | |                         |   .    |
  58          *                     |              ---------- |                         ----------
  59          *                     |              |   .    |长度                       |        | +1
  60          *                     |              |   .    | |                         ----------
  61          *                     |              |   .    | |             OSStack---->|        | 0
  62          *                     |              ---------- |                         ----------
  63          *                     |              |        | |          OSStkStart---->| 不关心 | -1  低地址
  64          *                     |              ---------- -                         ----------
  65          *                     \------------->|  长度  | 低地址                   系统硬件堆栈
  66          *                                    ----------
  67          *                                     用户堆栈                       长度=SP-OSStkStart
  68          *********************************************************************************************************
  69          */
  70          void *OSTaskStkInit(void(*task)(void *pd), void *ppdata, void *ptos, INT16U opt) REENTRANT
  71          {
  72   1              OS_STK *stk;
  73   1              ppdata=ppdata;
  74   1              opt       =opt;                                         /* opt没被用到,保留此语句防止警告产生                  */
  75   1              stk       =(OS_STK *)ptos;                      /* 任务堆栈最低有效地址                                                 */
  76   1              *stk++=15;                                              /* 任务堆栈长度                                                                 */
  77   1              *stk++=(INT16U)task & 0xFF;             /* 任务代码地址低8位                                                    */
  78   1              *stk++=(INT16U)task >> 8;               /* 任务代码地址高8位                                                    */
  79   1              /* 处理器是按特定的顺序将寄存器存入堆栈的,所以用户在将寄存器存入堆栈的时候也要依照这一顺序 */
  80   1              *stk++=0x00;                                    /* PSW                                                                                  */
  81   1              *stk++=0x0A;                                    /* ACC                                                                                  */
  82   1              *stk++=0x0B;                                    /* B                                                                                    */
  83   1              *stk++=0x00;                                    /* DPL                                                                                  */
  84   1              *stk++=0x00;                                    /* DPH                                                                                  */
  85   1              *stk++=0x00;                                    /* R0                                                                                   */
  86   1              *stk++=0x01;                                    /* R1                                                                                   */
  87   1              *stk++=0x02;                                    /* R2                                                                                   */
  88   1              *stk++=0x03;                                    /* R3                                                                                   */      
  89   1              *stk++=0x04;                                    /* R4                                                                                   */
  90   1              *stk++=0x05;                                    /* R5                                                                                   */
  91   1              *stk++=0x06;                                    /* R6                                                                                   */
  92   1              *stk++=0x07;                                    /* R7                                                                                   */
  93   1              /* 不用保存SP,任务切换时根据用户堆栈长度计算得出                                                               */
  94   1              *stk++=(INT16U)(ptos+MAX_STK_SIZE) >> 8;        /* ?C_XBP 仿真堆栈指针高8位             */
  95   1              *stk++=(INT16U)(ptos+MAX_STK_SIZE) & 0xFF;      /* ?C_XBP 仿真堆栈低8位                         */
  96   1              return ((void *)ptos);  /* 返回最低地址,这里不用弹出栈顶指针是为了提高计算效率 */
  97   1      }
  98          
  99          /*********************************************** 钩子函数 ***********************************************/
 100          
 101          #if OS_CPU_HOOKS_EN
 102          /*
 103          *********************************************************************************************************
 104          *                                       OS INITIALIZATION HOOK
 105          *                                            (BEGINNING)
 106          *
 107          * Description: This function is called by OSInit() at the beginning of OSInit().
 108          *
 109          * Arguments  : none
 110          *
 111          * Note(s)    : 1) Interrupts should be disabled during this call.
 112          *********************************************************************************************************
 113          */
 114          #if OS_VERSION > 203
 115          void OSInitHookBegin (void)
 116          {
C51 COMPILER V9.01   OS_CPU_C                                                              10/31/2012 17:19:07 PAGE 3   

 117   1      }
 118          #endif
 119          
 120          /*
 121          *********************************************************************************************************
 122          *                                       OS INITIALIZATION HOOK
 123          *                                               (END)
 124          *
 125          * Description: This function is called by OSInit() at the end of OSInit().
 126          *
 127          * Arguments  : none
 128          *
 129          * Note(s)    : 1) Interrupts should be disabled during this call.
 130          *********************************************************************************************************
 131          */
 132          #if OS_VERSION > 203
 133          void OSInitHookEnd (void)
 134          {
 135   1      }
 136          #endif
 137          
 138          /*
 139          *********************************************************************************************************
 140          *                                          TASK CREATION HOOK
 141          *
 142          * Description: This function is called when a task is created.
 143          *
 144          * Arguments  : ptcb   is a pointer to the task control block of the task being created.

⌨️ 快捷键说明

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