久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

自己寫單片機操做系統(tǒng)3-任務(wù)創(chuàng)建和調(diào)度

作者:huqin   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年01月31日   【字體:
如果存在兩個或以上的任務(wù)調(diào)度就需要將棧保CPU的寄存器了。這個地方就是各個MCU不同的地方了。
這個要看MCU進入中斷的流程才能知道棧需要怎么保護。

OS_STK* InitStkBuff(VOID_FUN_PTR task,OS_STK* pstk)
{
   pstk--;        
    *pstk = (U16)(((U32)task) >> 8);    存要執(zhí)行的函數(shù)
    pstk--;                                
    *pstk = 0xFFFF; //IY        存y寄存器
    (pstk)--;
    *pstk = 0x1111; //IX        存x寄存器
    pstk--;
    *pstk = 0xAA;//A;            存A
    ((U8*)pstk)--;        A和B都是8位的在寄存器中是一起放在一個16位中的、
    *pstk = 0xBB; //B        存B
    ((U8*)pstk)--; //在中斷中需要多保存一次page頁,所以需要留一個空間出來
   return pstk;
}
 void CreatTask(VOID_FUN_PTR task,OS_STK *pStk,U8 stkSize,U8 osPior)
{
 OsTaskObjTbl[osPior].Task = task;
 OsTaskObjTbl[osPior].TaskSp = pStk;
 OsTaskObjTbl[osPior].stkSize = stkSize;
 OsTaskObjTbl[osPior].taskDly = 0;
 OsTaskObjTbl[osPior].taskState = TASK_STATE_READY;
 OsTaskObjTbl[osPior].nextTask = IdelTask;
 OsTaskObjTbl[osPior].TaskSp = InitStkBuff(task,pStk);       將修改后的sp給到任務(wù)的sp中
}
 任務(wù)調(diào)度函數(shù)

void Os_Schel(void)
{
 U8 i;
 OldTask = HeadTask;
 for(i = 0;i < TASK_SIZE;i++)
 {
  if(OsTaskObjTbl[i].taskState == TASK_STATE_READY) 直接查看任務(wù)的狀態(tài),是否已經(jīng)就緒
  {
   HeadTask = &OsTaskObjTbl[i];
   break;
  }
 }
 if(i == TASK_SIZE)
 {
  HeadTask = IdelTask;
 }
 
 OS_TASK_SW();啟動軟件中斷進入中斷調(diào)度
}
__interrupt VectorNumber_Vswi void OSCtxSw(void)   //4為SWI中斷
{
    DisableInterrupts;              //關(guān)中斷
  // PTP = 0xAA;
   asm{
        ldaa $30                    //保存頁面寄存器,單片機16位最大的flash只能是64k。但是128k需要通過頁面寄存器切換
        psha
        STS Sp_bf            將當(dāng)前的sp賦值給sp_bf
       }
        OldTask->TaskSp = Sp_bf;    保存sp-bf
    Sp_bf = HeadTask->TaskSp;   取出sp的地址。
   asm{ 
        LDS Sp_bf                將sp-bf給SP  
        pula
        staa $30                  將頁面寄存器恢復(fù)
       }
    EnableInterrupts;             //開中斷   
}
這樣一個任務(wù)就調(diào)度出來了、
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 国产黄色片在线观看 | 亚洲欧美视频 | 国产日韩在线播放 | 精品国产99久久久久久宅男i | 亚洲综合成人网 | 亚洲精品第一页 | 欧美一级做性受免费大片免费 | 久久久久久综合 | 亚洲 欧美 激情 另类 校园 | 久在线 | 国产欧美激情 | 97精品超碰一区二区三区 | 日韩欧美精品在线 | 久久伊人精品 | 一级看片免费视频 | 亚洲第一在线 | 人人射人人干 | 欧美色噜噜 | 三年中文在线观看免费大全中国 | 97色综合 | 性做久久久久久久免费看 | 亚洲午夜在线 | 黄色免费观看视频 | 91免费在线视频 | 国产黄色免费 | 国产精品xxx在线观看 | 欧美日韩一区二区三区四区 | 精品国产乱码久久久久久88av | 免费成人结看片 | 国产乱码精品一区二区三 | 国产精品国产三级国产 | 国产激情小视频 | 蜜桃久久久 | 国产乱叫456在线 | 女人高潮特级毛片 | 夜夜躁狠狠躁日日躁av | 91女人18毛片水多国产 | 在线综合网 | 久久精品免费观看 | www久久久久 | 五月婷婷综合在线 |