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

📄 dbcmd.c

📁 基于东南大学开发的SEP3203的ARM7中的所有驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
    }

    cnt = sprintf(tmpbuf.buf,"PRI ADDRESS   QUEUE\n");
    tmpbuf.size = cnt;

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

        if(chk_prtbuf(80) < 0) break;

        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"%d   %08x  ", i,&g_sReadyQueue[i-1]);
        tmpbuf.size += cnt;
                                                  /* print queue list */
        print_queue((T_NODE*)&g_sReadyQueue[i-1]);
    }

    tmpbuf.size ++;                     /* ++ is null */
    return (int*)&tmpbuf;
}

//***********************************************************************
//  2.2 Queue List Data (call tmo)
//  This function is called from db33.This iprint_tmo command prints 
//  ROS33 timeout queue list data.
//***********************************************************************
int *iprint_tmo(int arg1, int arg2, int arg3)
{
    T_NODE* pTskcb;
    T_TSKCB* pTskcb2;
    int i;
    int iniflg, waitflg;
    char statchar[5];

    cnt = sprintf(tmpbuf.buf,"TIMEOUT(ADR:%08x)", &g_sTimeOutTsk);
    tmpbuf.size = cnt;

    pTskcb = ((T_NODE*)&g_sTimeOutTsk)->pNxt;     /* get next address */
    iniflg = 0;

    while(pTskcb != (T_NODE*)&g_sTimeOutTsk){     /* if next is head */
        i = 0;                                    /* search task(i) */
        while((T_NODE*)&g_sTskcb[i] != (T_NODE*)((char*)pTskcb -8)){
            i++;
            if(i == TSK_NUM){
                i = 0;                            /* not found(illegal) */
                break;
            }
        }
        if(iniflg == 0){                          /* display head task */
            cnt = sprintf(tmpbuf.buf+tmpbuf.size," task%d", i+1);
            tmpbuf.size += cnt;
            iniflg = 1;
        }else{                                    /* display continue task */
            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"->task%d", i+1);
            tmpbuf.size += cnt;
        }

        pTskcb2 = (T_TSKCB*)((char*)pTskcb - 8);  /* get task address */

        print_status(STID_TSK, pTskcb2);          /* get wait status(waichar) */

        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"(%s)", waichar);
        tmpbuf.size += cnt;

        pTskcb = pTskcb->pNxt;                    /* get next address */
    }
    cnt = sprintf(tmpbuf.buf+tmpbuf.size,"\n");
    tmpbuf.size += cnt;

    tmpbuf.size ++;                     /* ++ is null */
    return (int*)&tmpbuf;
}

//***********************************************************************
//  2.3 Queue List Data (call rdh)
//  This function is called from db33.This iprint_rdh command prints 
//  ROS33 handler ready queue list data.
//***********************************************************************
int *iprint_rdh(int arg1, int arg2, int arg3)
{

    cnt = sprintf(tmpbuf.buf,"READYHNDLER(ADR:%08x)", &g_sReadyHndr);
    tmpbuf.size = cnt;
                                                  /* print queue list */
    print_hndrque((T_NODE*)&g_sReadyHndr);

    tmpbuf.size ++;                     /* ++ is null */
    return (int*)&tmpbuf;
}

//***********************************************************************
//  2.4 Queue List Data (call tmh)
//  This function is called from db33.This iprint_tmh command prints 
//  ROS33 timer handler queue list data.
//***********************************************************************
int *iprint_tmh(int arg1, int arg2, int arg3)
{

    cnt = sprintf(tmpbuf.buf,"TIMEHNDLER(ADR:%08x)", &g_sTimeHndr);
    tmpbuf.size = cnt;
                                                  /* print queue list */
    print_hndrque((T_NODE*)&g_sTimeHndr);

    tmpbuf.size ++;                     /* ++ is null */
    return (int*)&tmpbuf;
}

//***********************************************************************
//  3.1 Control Block Data (call tsk)
//  This function is called from db33.This iprint_cyc command prints 
//  ROS33 task control block data.
//***********************************************************************
int *iprint_tsk(int arg1, int arg2, int arg3)
{
    T_TSKCB* pTskcb;
    FP  fpPCwk;
    UW  uwSPwk;
    UW  regwk[4];
    int i, j;

    rtncode = chk_param(arg1, arg2, TSK_NUM);

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

    if(rtncode == 0){             /* all display */
        cnt = sprintf(tmpbuf.buf,"TID PC       SP       STA WS   PRI WC TIMEOUT\n");
        tmpbuf.size = cnt;

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

            if(chk_prtbuf(100) < 0) break;

            pTskcb = (T_TSKCB*)&g_sTskcb[i-1];

            if(pTskcb->fpPC == 0){                /* not vcre_tsk */
                cnt = sprintf(tmpbuf.buf+tmpbuf.size,"%-3d (NONE)\n", i);
                tmpbuf.size += cnt;
            }else{

                print_status(STID_TSK, pTskcb);   /* get task,wait status */
                                                  /*     (tskchar,waichar) */
                if(taskflag < 2){                 /* case DMT,RUN */
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "%-3d -------- -------- %3s %-4s  %d  %2u %04x %08x\n",
                              i, tskchar, waichar, pTskcb->bPriority+1,
                          pTskcb->uhWupcnt, pTskcb->utime, pTskcb->ltime);
                    tmpbuf.size += cnt;
                }
                else{
                    uwSPwk = pTskcb->uwSP;        /* display SP */
                    if(pTskcb->ubIntinfo == 0)   /* get PC in stack */
                    {
                        fpPCwk = ((T_SAVEDREG_MIN*)uwSPwk)->pc;
                    }
                    else{
                        fpPCwk = ((T_SAVEDREG*)uwSPwk)->pc;
                    }
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "%-3d %08x %08x %3s %-4s  %d  %2u %04x %08x\n",
                              i, fpPCwk, uwSPwk, tskchar, waichar, pTskcb->bPriority+1,
                          pTskcb->uhWupcnt, pTskcb->utime, pTskcb->ltime);
                    tmpbuf.size += cnt;
                }

            }
        }
        tmpbuf.size ++;                     /* ++ is null */
        return (int*)&tmpbuf;
    }

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

        if(chk_prtbuf(512) < 0) break;

        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"*** TSKID = %d\n", i);
        tmpbuf.size += cnt;
        pTskcb = (T_TSKCB*)&g_sTskcb[i-1];

        if(pTskcb->fpPC == 0){                    /* not vcre_tsk */
            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"(NONE)\n");
            tmpbuf.size += cnt;
        }else{

            print_status(STID_TSK, pTskcb);       /* get task,wait status */
                                                  /*     (tskchar,waichar) */
            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"tskcb adr.  :%08x\n", pTskcb);

            tmpbuf.size += cnt;
            if(taskflag > 1){                     /* case RDY,SUS,WAI,WAS */
                uwSPwk = pTskcb->uwSP;            /* get PC in stack and display */
                if(pTskcb->ubIntinfo == 0){
                    fpPCwk = ((T_SAVEDREG_MIN*)uwSPwk)->pc;
                }else{
                    fpPCwk = ((T_SAVEDREG*)uwSPwk)->pc;
                }
                cnt = sprintf(tmpbuf.buf+tmpbuf.size,"pc          :%08x\n", fpPCwk);
                tmpbuf.size += cnt;
            }else{                                /* case DMT,RUN */
                cnt = sprintf(tmpbuf.buf+tmpbuf.size,"pc          :--------\n");
                tmpbuf.size += cnt;
            }

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

            if(taskflag > 1){                     /* case RDY,SUS,WAI,WAS */
                cnt = sprintf(tmpbuf.buf+tmpbuf.size,"sp          :%08x\n",
                          pTskcb->uwSP);
                tmpbuf.size += cnt;
            }else{                                /* case DMT,RUN */
                cnt = sprintf(tmpbuf.buf+tmpbuf.size,"sp          :--------\n");
                tmpbuf.size += cnt;
            }

            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"initial sp  :%08x\n",
                      pTskcb->uwIniSP);
            tmpbuf.size += cnt;

            if(taskflag > 1){                    /* case RDY,SUS,WAI,WAS */
                uwSPwk = pTskcb->uwSP;           /* display regster in stack */
                if(pTskcb->ubIntinfo == 0){      /* %r0-%r3 display */
                    for( j = 0; j < 4; j++){
                        regwk[j] = ((T_SAVEDREG_MIN*)uwSPwk)->r[j];
                    }
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "reg r0-r3   :%08x %08x %08x %08x\n",
                              regwk[0], regwk[1], regwk[2], regwk[3]);
                    tmpbuf.size += cnt;
                }else{                           /* %r0-%r15,%ahr,%alr display */
                    for( j = 0; j < 4; j++){
                        regwk[j] = ((T_SAVEDREG*)uwSPwk)->r[j];
                    }

                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "reg r0-r3   :%08x %08x %08x %08x\n",
                              regwk[0], regwk[1], regwk[2], regwk[3]);
                    tmpbuf.size += cnt;

                    for( j = 0; j < 4; j++){
                        regwk[j] = ((T_SAVEDREG*)uwSPwk)->r[j+4];
                    }
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "    r4-r7   :%08x %08x %08x %08x\n",
                              regwk[0], regwk[1], regwk[2], regwk[3]);
                    tmpbuf.size += cnt;

                    for( j = 0; j < 4; j++){
                        regwk[j] = ((T_SAVEDREG*)uwSPwk)->r[j+8];
                    }
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "    r8-r11  :%08x %08x %08x %08x\n",
                              regwk[0], regwk[1], regwk[2], regwk[3]);
                    tmpbuf.size += cnt;

                    for( j = 0; j < 4; j++){
                        regwk[j] = ((T_SAVEDREG*)uwSPwk)->r[j+12];
                    }
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "    r12-r15 :%08x %08x %08x %08x\n",
                              regwk[0], regwk[1], regwk[2], regwk[3]);
                    tmpbuf.size += cnt;

                    regwk[0] = ((T_SAVEDREG*)uwSPwk)->ahr;
                    regwk[1] = ((T_SAVEDREG*)uwSPwk)->alr;
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "    ahr,alr :%08x %08x\n",
                              regwk[0], regwk[1]);
                    tmpbuf.size += cnt;
                }
            }
            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"task status :%s\n", tskchar);
            tmpbuf.size += cnt;

            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"wait status :%s\n", waichar);
            tmpbuf.size += cnt;

            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"task pri    :%d\n",
                      pTskcb->bPriority+1);
            tmpbuf.size += cnt;

            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"initial pri :%d\n",
                      pTskcb->bIniPriority+1);
            tmpbuf.size += cnt;

            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"wakeup cnt  :%u\n",
                      pTskcb->uhWupcnt);
            tmpbuf.size += cnt;

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

            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"int info    :%u\n",
                      pTskcb->ubIntinfo);
            tmpbuf.size += cnt;

            if(taskflag > 3){                     /* case WAI,WAS */
                switch(pTskcb->ubWaitStat){       /* display waiting information */
                case TTW_FLG:
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "### EVENTFLAG INF\n");
                    tmpbuf.size += cnt;
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "flgptn point:%08x\n", pTskcb->pFlgptn);
                    tmpbuf.size += cnt;
                    break;
                case TTW_MBX:
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "### MAILBOX INF\n");
                    tmpbuf.size += cnt;
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "rcvmsg point :%08x\n", pTskcb->pMsg);
                    tmpbuf.size += cnt;
                    break;
                case TTW_SMBF:
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "### SND MSGBUF INF\n");
                    tmpbuf.size += cnt;
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "sndmsg adr. :%08x\n", pTskcb->pMsgbuf);
                    tmpbuf.size += cnt;
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "sndmsg size :%08x\n", pTskcb->msgsize);
                    tmpbuf.size += cnt;
                    break;
                case TTW_MBF:
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "### RCV MSGBUF INF\n");
                    tmpbuf.size += cnt;
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "rcvmsg point:%08x\n", pTskcb->pMsgbuf);
                    tmpbuf.size += cnt;
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "msgsiz point:%08x\n", pTskcb->msgsize);
                    tmpbuf.size += cnt;
                    break;
                case TTW_MPL:
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "### VARIABLE MEMBLK INF\n");
                    tmpbuf.size += cnt;
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "blkadr point:%08x\n", pTskcb->pMplblk);
                    tmpbuf.size += cnt;
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "blk size    :%08x\n", pTskcb->blksize);
                    tmpbuf.size += cnt;
                    break;
                case TTW_MPF:
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "### FIXED MEMBLK INF\n");
                    tmpbuf.size += cnt;
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "blkadr point:%08x\n", pTskcb->pMplblk);
                        tmpbuf.size += cnt;
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,
                              "blk size    :%08x\n", pTskcb->blksize);
                    tmpbuf.size += cnt;
                    break;
                }
            }
        }
        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"\n");
        tmpbuf.size += cnt;
    }
    tmpbuf.size ++;                     /* ++ is null */

⌨️ 快捷键说明

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