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

📄 dbcmd.c

📁 基于东南大学开发的SEP3203的ARM7中的所有驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
    return (int*)&tmpbuf;
}

//***********************************************************************
//  3.2 Control Block Data (call cyc)
//  This function is called from db33.This iprint_cyc command prints 
//  ROS33 cyclic handler control block data.
//***********************************************************************
int *iprint_cyc(int arg1, int arg2, int arg3)
{
    T_HNDRCB* pHndrcb;
    int i;
    char actchar[4];

    rtncode = chk_param(arg1, arg2, CYCHNDR_NUM);

    if(rtncode < 0){
        cnt = sprintf(tmpbuf.buf,"NONE\n");
        tmpbuf.size = cnt+1;      /* +1 is null */
        return (int*)&tmpbuf;
    }

    if(rtncode == 0){
        cnt = sprintf(tmpbuf.buf,"NO  PC       ACT  CYCLETIME      ENTRYTIME     ST\n");
        tmpbuf.size = cnt;

        for(i = stano; i <= endno; i++){

            if(chk_prtbuf(100) < 0) break;

            pHndrcb = (T_HNDRCB*)&g_sCycHndrcb[i-1];

            if(pHndrcb->fpPC == 0){         /* not def_cyc */
                cnt = sprintf(tmpbuf.buf+tmpbuf.size,"%-3d (NONE)\n", i);
                tmpbuf.size += cnt;
            }else{
                switch(pHndrcb->cycact){          /* get actchar */
                case TCY_OFF:        strcpy(actchar, "OFF"); break;
                case TCY_ON:         strcpy(actchar, "ON "); break;
                }

                cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                        "%-3d %08x %s  %04x %08x  %04x %08x  %u\n", i, pHndrcb->fpPC,
                        actchar, pHndrcb->Iniutime, pHndrcb->Iniltime, pHndrcb->utime,
                        pHndrcb->ltime, pHndrcb->ubHndrStat);
                tmpbuf.size += cnt;
            }
        }
        tmpbuf.size ++;                     /* ++ is null */
        return (int*)&tmpbuf;
    }

    tmpbuf.size = 0;           /* init size */
    for(i = stano; i <= endno; i++){

        if(chk_prtbuf(256) < 0) break;

        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"*** CYCNO = %d\n", i);
        tmpbuf.size += cnt;
        pHndrcb = (T_HNDRCB*)&g_sCycHndrcb[i-1];

        if(pHndrcb->fpPC == 0){             /* not def_cyc */
            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"(NONE)\n");
            tmpbuf.size += cnt;
        }else{
            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"hndrcb adr. :%08x\n", pHndrcb);
            tmpbuf.size += cnt;

            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"handler pc  :%08x\n",
                      pHndrcb->fpPC);
            tmpbuf.size += cnt;

            switch(pHndrcb->cycact){              /* get actchar */
            case TCY_OFF:        strcpy(actchar, "OFF"); break;
            case TCY_ON:         strcpy(actchar, "ON "); break;
            }
            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"cycact      :%s\n", actchar);
            tmpbuf.size += cnt;

            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"cycle time  :%04x %08x\n",
                      pHndrcb->Iniutime, pHndrcb->Iniltime);
            tmpbuf.size += cnt;

            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"entry time  :%04x %08x\n",
                      pHndrcb->utime, pHndrcb->ltime);
            tmpbuf.size += cnt;

            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"def status  :%u\n",
                      pHndrcb->ubHndrStat);
            tmpbuf.size += cnt;
        }
        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"\n");
        tmpbuf.size += cnt;
    }
    tmpbuf.size ++;                     /* ++ is null */
    return (int*)&tmpbuf;
}

//***********************************************************************
//  3.3 Control Block Data (call alm)
//  This function is called from db33.This iprint_alm command prints 
//  ROS33 alarm handler control block data.
//***********************************************************************
int *iprint_alm(int arg1, int arg2, int arg3)
{
    T_HNDRCB* pHndrcb;
    int i;
    char modchar[4];

    rtncode = chk_param(arg1, arg2, ALMHNDR_NUM);

    if(rtncode < 0){
        cnt = sprintf(tmpbuf.buf,"NONE\n");
        tmpbuf.size = cnt+1;      /* +1 is null */
        return (int*)&tmpbuf;
    }

    if(rtncode == 0){
        cnt = sprintf(tmpbuf.buf,
                  "NO  PC       TMMODE  ALARMTIME      ENTRYTIME     ST\n");
        tmpbuf.size = cnt;

        for(i = stano; i <= endno; i++){

            if(chk_prtbuf(100) < 0) break;

            pHndrcb = (T_HNDRCB*)&g_sAlmHndrcb[i-1];

            if(pHndrcb->fpPC == 0){         /* not def_alm */
                cnt = sprintf(tmpbuf.buf+tmpbuf.size,"%-3d (NONE)\n", i);
                tmpbuf.size += cnt;
            }else{
 
                switch(pHndrcb->tmmode){          /* get tmmpde char */
                case TTM_ABS:        strcpy(modchar, "ABS"); break;
                case TTM_REL:        strcpy(modchar, "REL"); break;
                }

                cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                       "%-3d %08x   %s   %04x %08x  %04x %08x  %u\n", i, pHndrcb->fpPC,
                       modchar, pHndrcb->Iniutime, pHndrcb->Iniltime, pHndrcb->utime,
                       pHndrcb->ltime, pHndrcb->ubHndrStat);
                tmpbuf.size += cnt;
            }
        }
        tmpbuf.size ++;                     /* ++ is null */
        return (int*)&tmpbuf;
    }

    tmpbuf.size = 0;           /* init size */
    for(i = stano; i <= endno; i++){

        if(chk_prtbuf(256) < 0) break;

        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"*** ALMNO = %d\n", i);
        tmpbuf.size += cnt;
        pHndrcb = (T_HNDRCB*)&g_sAlmHndrcb[i-1];

        if(pHndrcb->fpPC == 0){             /* not def_alm */
            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"(NONE)\n");
            tmpbuf.size += cnt;
        }else{
            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"hndrcb adr. :%08x\n", pHndrcb);
            tmpbuf.size += cnt;
            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"handler pc  :%08x\n",
                      pHndrcb->fpPC);
            tmpbuf.size += cnt;

            switch(pHndrcb->tmmode){              /* get tmmode char */
            case TTM_ABS:        strcpy(modchar, "ABS"); break;
            case TTM_REL:        strcpy(modchar, "REL"); break;
            }
            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"time mode   :%s\n", modchar);
            tmpbuf.size += cnt;

            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"alarm time  :%04x %08x\n",
                      pHndrcb->Iniutime, pHndrcb->Iniltime);
            tmpbuf.size += cnt;

            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"entry time  :%04x %08x\n",
                      pHndrcb->utime, pHndrcb->ltime);
            tmpbuf.size += cnt;

            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"def status  :%u\n",
                      pHndrcb->ubHndrStat);
            tmpbuf.size += cnt;
        }
        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"\n");
        tmpbuf.size += cnt;
    }
    tmpbuf.size ++;                     /* ++ is null */
    return (int*)&tmpbuf;
}

//***********************************************************************
//  3.4 Control Block Data (call mbx)
//  This function is called from db33.This iprint_mbx command prints 
//  ROS33 mail box control block data.
//***********************************************************************
int *iprint_mbx(int arg1, int arg2, int arg3)
{
    T_MLBXCB* pMlbxcb;
    int i;
    char msgmark[2];
    char msgchar[13];

    rtncode = chk_param(arg1, arg2, MLBX_NUM);

    if(rtncode < 0){
        cnt = sprintf(tmpbuf.buf,"NONE\n");
        tmpbuf.size = cnt+1;      /* +1 is null */
        return (int*)&tmpbuf;
    }

    if(rtncode == 0){
        cnt = sprintf(tmpbuf.buf,"ID  MSG QUEUE\n");
        tmpbuf.size = cnt;

        for(i = stano; i <= endno; i++){

            if(chk_prtbuf(80) < 0) break;

            pMlbxcb = (T_MLBXCB*)&g_sMlbxcb[i-1];
            if(pMlbxcb->pMsg == 0){               /* set message mark(-,*) */
                strcpy(msgmark, "-");
            }else{
                strcpy(msgmark, "*");
            }

            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"%-3d  %s  ", i, msgmark);
            tmpbuf.size += cnt;

            print_queue((T_NODE*)&g_sMlbxcb[i-1]);
        }
        tmpbuf.size ++;                     /* ++ is null */
        return (int*)&tmpbuf;
    }

    tmpbuf.size = 0;           /* init size */
    for(i = stano; i <= endno; i++){

        if(chk_prtbuf(256) < 0) break;

        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"*** MBXID = %d\n", i);
        tmpbuf.size += cnt;
        pMlbxcb = (T_MLBXCB*)&g_sMlbxcb[i-1];

        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"mlbxcb adr. :%08x\n", pMlbxcb);
        tmpbuf.size += cnt;
        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"wait queue  :");
        tmpbuf.size += cnt;

        print_queue((T_NODE*)&g_sMlbxcb[i-1]);

        pMlbxcb = (T_MLBXCB*)&g_sMlbxcb[i-1];
        if(pMlbxcb->pMsg == 0){                   /* set message char */
            strcpy(msgchar, "NONE MESSAGE");
        }else{
            strcpy(msgchar, "MESSAGE");
        }

        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"msg list    :%s\n", msgchar);
        tmpbuf.size += cnt;

        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"\n");
        tmpbuf.size += cnt;
    }
    tmpbuf.size ++;                     /* ++ is null */
    return (int*)&tmpbuf;
}

//***********************************************************************
//  3.5 Control Block Data (call sem)
//  This function is called from db33.This iprint_sem command prints 
//  ROS33 semaphore control block data.
//***********************************************************************
int *iprint_sem(int arg1, int arg2, int arg3)
{
    T_SMPHCB* pSmphcb;
    int i;

    rtncode = chk_param(arg1, arg2, SMPH_NUM);

    if(rtncode < 0){
        cnt = sprintf(tmpbuf.buf,"NONE\n");
        tmpbuf.size = cnt+1;      /* +1 is null */
        return (int*)&tmpbuf;
    }

    if(rtncode == 0){
        cnt = sprintf(tmpbuf.buf,"ID  MAX CNT QUEUE\n");
        tmpbuf.size = cnt;

        for(i = stano; i <= endno; i++){

            if(chk_prtbuf(80) < 0) break;

            pSmphcb = (T_SMPHCB*)&g_sSmphcb[i-1];

            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"%-3d %-3u %-3u ",
                      i, pSmphcb->ubSmphMax, pSmphcb->ubSmphCnt);
            tmpbuf.size += cnt;

            print_queue((T_NODE*)&g_sSmphcb[i-1]);
        }
        tmpbuf.size ++;                     /* ++ is null */
        return (int*)&tmpbuf;
    }

    tmpbuf.size = 0;           /* init size */
    for(i = stano; i <= endno; i++){

        if(chk_prtbuf(256) < 0) break;

        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"*** SEMID = %d\n", i);
        tmpbuf.size += cnt;
        pSmphcb = (T_SMPHCB*)&g_sSmphcb[i-1];

        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"smphcb adr. :%08x\n", pSmphcb);
        tmpbuf.size += cnt;
        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"wait queue  :");
        tmpbuf.size += cnt;

        print_queue((T_NODE*)&g_sSmphcb[i-1]);

        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"max counter :%u\n",
                  pSmphcb->ubSmphMax);
        tmpbuf.size += cnt;

        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"sem counter :%u\n",
                  pSmphcb->ubSmphCnt);
        tmpbuf.size += cnt;

        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"\n");
        tmpbuf.size += cnt;
    }
    tmpbuf.size ++;                     /* ++ is null */
    return (int*)&tmpbuf;
}

//***********************************************************************
//  3.6 Control Block Data (call flg)
//  This function is called from db33.This iprint_flg command prints 
//  ROS33 eventflag control block data.
//***********************************************************************
int *iprint_flg(int arg1, int arg2, int arg3)
{
    T_FLGCB* pFlgcb;
    int i;
    int waimod;
    char flgchar[11];

    rtncode = chk_param(arg1, arg2, FLG_NUM);

    if(rtncode < 0){
        cnt = sprintf(tmpbuf.buf,"NONE\n");
        tmpbuf.size = cnt+1;      /* +1 is null */
        return (int*)&tmpbuf;
    }

    if(rtncode == 0){
        cnt = sprintf(tmpbuf.buf,"ID  QUEUE\n");
        tmpbuf.size = cnt;

        for(i = stano; i <= endno; i++){

            if(chk_prtbuf(80) < 0) break;

            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"%-3d ", i);
            tmpbuf.size += cnt;

⌨️ 快捷键说明

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