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

📄 os_cpu_c.lst

📁 一个分选系统的软件:用SmallRtos操作系统
💻 LST
📖 第 1 页 / 共 2 页
字号:
 161          ** 全局变量: 无
 162          ** 调用模块: 无
 163          ** 
 164          ** 作 者: 陈明计
 165          ** 日 期: 2002年12月2日
 166          **-------------------------------------------------------------------------------------------------------
 167          ** 修改人:
 168          ** 日 期:
 169          **-------------------------------------------------------------------------------------------------------
 170          ********************************************************************************************************/
 171          
 172          void OSIdle(void)
 173          {
 174   1          uint8 temp;
 175   1          while(1)
 176   1          {
 177   2              temp++;
 178   2              if(temp==100)
C51 COMPILER V7.06   OS_CPU_C                                                              12/21/2004 15:11:28 PAGE 4   

 179   2              {
 180   3                  temp=0;
 181   3      //            P32=!P32;
 182   3              }
 183   2              _nop_();//_PCON = PCON | 0x01;                     /* CPU进入休眠状态 */
 184   2          }
 185   1      }
 186          
 187          /*********************************************************************************************************
 188          ** 函数名称: OSStart
 189          ** 功能描述: Small RTOS 51初始化函数,调用此函数后多任务开始运行,首先执ID为0的任务
 190          ** 输 入: 无
 191          ** 输 出 : 无
 192          ** 全局变量: OSTsakStackBotton,SP
 193          ** 调用模块: 无
 194          ** 
 195          ** 作 者: 陈明计
 196          ** 日 期: 2002年2月22日
 197          **-------------------------------------------------------------------------------------------------------
 198          ** 修改人: 陈明计
 199          ** 日 期: 2002年12月2日
 200          **-------------------------------------------------------------------------------------------------------
 201          ** 修改人: 陈明计
 202          ** 日 期: 2002年12月30日
 203          **-------------------------------------------------------------------------------------------------------
 204          ** 修改人:
 205          ** 日 期:
 206          **-------------------------------------------------------------------------------------------------------
 207          ********************************************************************************************************/
 208                  void OSStart(void)
 209                  
 210          {
 211   1          uint8 idata *cp;
 212   1          uint8 i;
 213   1          
 214   1          cp = STACK;
 215   1          
 216   1          OSTsakStackBotton[0] = STACK;
 217   1          OSTsakStackBotton[OS_MAX_TASKS + 1] = (uint8 idata *)(IDATA_RAM_SIZE % 256);
 218   1          
 219   1          /* 初始化优先级最高的任务堆栈,使返回地址为任务开始地址 */
 220   1          *cp++ = ((uint16)(TaskFuction[0])) % 256;
 221   1          SP = (uint8) cp;
 222   1          *cp = ((uint16)(TaskFuction[0])) / 256;
 223   1      
 224   1          /* 初始化优先级最低的任务堆栈 */
 225   1          cp = (uint8 idata *)(IDATA_RAM_SIZE - 1) ;
 226   1          *cp-- = 0;
 227   1          *cp-- =  ((uint16)(OSIdle)) / 256;
 228   1          OSTsakStackBotton[OS_MAX_TASKS] = cp;
 229   1          *cp-- =  ((uint16)(OSIdle)) % 256;
 230   1          
 231   1          /* 初始化其它优先级的任务堆栈 */
 232   1          for(i = OS_MAX_TASKS - 1; i > 0; i--)
 233   1          {
 234   2              *cp-- = 0;
 235   2              *cp-- =  ((uint16)(TaskFuction[i])) / 256;
 236   2              OSTsakStackBotton[i] = cp;
 237   2              *cp-- =  ((uint16)(TaskFuction[i])) % 256;
 238   2          }
 239   1          /* 允许中断 */
 240   1          Os_Enter_Sum = 1;
C51 COMPILER V7.06   OS_CPU_C                                                              12/21/2004 15:11:28 PAGE 5   

 241   1          OS_EXIT_CRITICAL();
 242   1          /* 函数返回优先级最高的任务 */
 243   1      }
 244          
 245          /*********************************************************************************************************
 246          ** 函数名称: OSTickISR
 247          ** 功能描述: 系统时钟中断服务函数
 248          ** 输 入: 无
 249          ** 输 出 : 无
 250          ** 全局变量: 无
 251          ** 调用模块: OS_IBT_ENTER,(UserTickTimer),OSTimeTick,OSIntExit
 252          ** 
 253          ** 作 者: 陈明计
 254          ** 日 期: 2002年2月22日
 255          **-------------------------------------------------------------------------------------------------------
 256          ** 修改人: 陈明计
 257          ** 日 期: 2002年10月23日
 258          **-------------------------------------------------------------------------------------------------------
 259          ** 修改人:
 260          ** 日 期:
 261          **-------------------------------------------------------------------------------------------------------
 262          ********************************************************************************************************/
 263          #if EN_OS_INT_ENTER >0 
              #pragma disable                                        /* 除非最高优先级中断,否则,必须加上这一句        
             -         */
              #endif
 266                  void OSTickISR(void) interrupt OS_TIME_ISR
 267          
 268          {
 269   1          ////////////////////////////////////
 270   1          uint16 data temp;
 271   1          temp=0xEDFF;
 272   1          temp+=TL0;
 273   1          temp+=TH0*256;
 274   1          TH0 = (uint8)(temp>>8);
 275   1          TL0 = (uint8)(temp);
 276   1      //    TH0 =  0xED;
 277   1      //    TL0 =  0xFF;
 278   1          ////////////////////////////////////
 279   1      #if TICK_TIMER_SHARING >1 
                  static uint8 TickSum = 0;
              #endif
 282   1      
 283   1      #if EN_USER_TICK_TIMER > 0 
 284   1          UserTickTimer();                                    /* 用户函数                                       
             -          */
 285   1      #endif
 286   1      
 287   1      #if TICK_TIMER_SHARING >1 
                  TickSum = (TickSum + 1) % TICK_TIMER_SHARING;
                  if (TickSum != 0)
                  {
                      return;
                  }
              #endif
 294   1      
 295   1      #if EN_OS_INT_ENTER > 0 
                  OS_INT_ENTER();                                     /* 中断开始处理                                   
             - */
              #endif
 298   1          
 299   1      
C51 COMPILER V7.06   OS_CPU_C                                                              12/21/2004 15:11:28 PAGE 6   

 300   1      #if EN_TIMER_SHARING > 0
 301   1          OSTimeTick();                                       /* 调用系统时钟处理函数                           
             - */
 302   1      #else
                  OSIntSendSignal(TIME_ISR_TASK_ID);                  /* 唤醒ID为TIME_ISR_TASK_ID的任务                 
             -*/
              #endif
 305   1          
 306   1          OSIntExit();                                        /* 中断结束处理                                   
             -          */
 307   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    244    ----
   CONSTANT SIZE    =     24    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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