色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > UCOS操作系統(tǒng)堆棧淺談

          UCOS操作系統(tǒng)堆棧淺談

          作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
          //*********************************************************************************
          //* 函數(shù)名 :TaskStart
          //* 返回值 :N/A
          //* 參數(shù) :void *p_arg
          //* 函數(shù)說明:創(chuàng)建TaskStart任務(wù)
          //* 作 者:啊呆
          //********************************************************************************
          static void TaskStart(void *p_arg)
          {
          #if OS_CRITICAL_METHOD == 3
          OS_CPU_SR cpu_sr;
          #endif
          // prevent compiler warning
          p_arg = p_arg;
          // install uC/OS-IIs clock tick ISR
          OS_ENTER_CRITICAL();
          IRQSetVect(TMR1_VEC, OSTickISR);
          OSSetTickRate(lc_clk_get_freq(CLK_SYS_SEL), OS_TICKS_PER_SEC);
          OS_EXIT_CRITICAL();
          // initialize uC/OS-IIs statistics
          OSStatInit();
          TaskStartCreateTasks();
          for (;;)
          {
          // clear the context switch counter
          OSCtxSwCtr = 0;
          // wait one second
          OSTimeDly(OS_TICKS_PER_SEC);
          }
          }
          //*******************************************************************************
          //* 函數(shù)名 :TaskStartCreateTasks
          //* 返回值 :N/A
          //* 參數(shù) :N/A
          //* 函數(shù)說明:創(chuàng)建任務(wù)
          //* 作 者:啊呆
          //******************************************************************************
          static void TaskStartCreateTasks(void)
          {
          //初始化,創(chuàng)建每個任務(wù)對應(yīng)需要的信號量
          init_buzzer_proc();
          init_ModeEXE_proc();
          init_ctrlmsg_get_proc();
          init_twoChRec_proc();
          InitStackMark();
          //創(chuàng)建任務(wù)
          OSTaskCreate(buzzer_proc, (void *)0, &BuzzerStk[BUZZER_STK_SIZE-1], TASK_3_PRIO);
          OSTaskCreate(ctrlmsg_get_proc, (void *)0, &CtrlmsgStk[CTRLMSG_STK_SIZE-1], TASK_5_PRIO);
          OSTaskCreate(stordev_mount_proc, (void *)0, &StorDevStk[STORDEV_MOUNT_STK_SIZE-1], TASK_6_PRIO);
          OSTaskCreate(mode_switch_proc, (void *)0, &ModeSwitchStk[MODE_SWITCH_STK_SIZE-1], TASK_7_PRIO);
          OSTaskCreate(ModeEXE_proc, (void *)0, &ModeExeStk[MODE_EXE_STK_SIZE-1], TASK_11_PRIO);
          }
          //**************************************************************************
          //* 函數(shù)名 :InitStackMark
          //* 返回值 :N/A
          //* 參數(shù) :N/A
          //* 函數(shù)說明:初始化堆棧棧頂
          //* 作 者:啊呆
          //**************************************************************************
          void InitStackMark(void)
          {
          //初始化每個堆棧棧頂
          BuzzerStk[0]=0x5153;
          BuzzerStk[1]=0xAA55;
          CtrlmsgStk[0]=0x5153;
          CtrlmsgStk[1]=0xAA55;
          StorDevStk[0]=0x5153;
          StorDevStk[1]=0xAA55;
          ModeSwitchStk[0]=0x5153;
          ModeSwitchStk[1]=0xAA55;
          ModeExeStk[0]=0x5153;
          ModeExeStk[1]=0xAA55;
          }
          //*****************************************************************************
          //* 函數(shù)名 : CheckStkOverFlow
          //* 返回值 :BOOLEAN
          //* 參數(shù) :INT8U TaskName
          //* 函數(shù)說明:初檢測堆棧溢出
          //* 作 者:啊呆
          //******************************************************************************
          BOOLEAN CheckStkOverFlow(INT8U TaskName)
          {
          //判斷是否堆棧溢出
          if(TaskName==buzzer)
          {
          if(BuzzerStk[0]==0x5153 && BuzzerStk[1]==0xAA55)
          return FALSE;
          }
          else if(TaskName==ctrlmsg)
          {
          if(CtrlmsgStk[0]==0x5153 && CtrlmsgStk[1]==0xAA55)
          return FALSE;
          }
          else if(TaskName==stordev_mount)
          {
          if(StorDevStk[0]==0x5153 && StorDevStk[1]==0xAA55)
          return FALSE;
          }
          else if(TaskName==mode_switch)
          {
          if(ModeSwitchStk[0]==0x5153 && ModeSwitchStk[1]==0xAA55)
          return FALSE;
          }
          else if(TaskName==ModeEXE)
          {
          if(ModeExeStk[0]==0x5153 && ModeExeStk[1]==0xAA55)
          return FALSE;
          }
          return TRUE;
          }
          上一頁 1 2 下一頁

          關(guān)鍵詞: UCOS操作系統(tǒng)堆

          評論


          技術(shù)專區(qū)

          關(guān)閉