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

📄 dbcmd.c

📁 最近在國外網站抓到的作業系統 以Arm為基礎去開發的
💻 C
📖 第 1 页 / 共 5 页
字号:
    }
    tmpbuf.size ++;                     /* ++ is null */
    return (int*)&tmpbuf;
}

//***********************************************************************
//  4.1 Message Data (call mbxmsg)
//  This function is called from db33.This iprint_mbxmsg command prints 
//  ROS33 message data in mailbox.
//***********************************************************************
int *iprint_mbxmsg(int arg1, int arg2, int arg3)
{
    T_MLBXCB* pMlbxcb;
    T_MSG* pMsgwk;
    UB msgwk;
    int i, j, k, size;

    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;
    }

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

        if(chk_prtbuf(160) < 0) break;

        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"*** MBXID = %d ***\n", i);
        tmpbuf.size += cnt;

        pMlbxcb = (T_MLBXCB*)&g_sMlbxcb[i-1];

        if(pMlbxcb->pMsg == 0){                   /* nothing message */
            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"(NONE)\n");
            tmpbuf.size += cnt;
        }else{
            pMsgwk = pMlbxcb->pMsg;               /* next message address */
            j = 1;

            do{
                cnt = sprintf(tmpbuf.buf+tmpbuf.size,"msg=%d (%08x):", j, pMsgwk);
                tmpbuf.size += cnt;

                size = 10;                        /* print massege(10byte) */
                for( k = 0; k < size; k++){
                    msgwk = (UB)pMsgwk->msgcont[k];
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size," %02x", msgwk);
                    tmpbuf.size += cnt;
                }
                cnt = sprintf(tmpbuf.buf+tmpbuf.size,"\n");
                tmpbuf.size += cnt;

                pMsgwk = pMsgwk->pNxt;            /* next message addres */
                j++;

            }while(pMsgwk != 0);                  /* if end data(0) */
        }
        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"\n");
        tmpbuf.size += cnt;
    }
    tmpbuf.size ++;                     /* ++ is null */
    return (int*)&tmpbuf;
}

//***********************************************************************
//  4.2 Message Data (call mbfmsg)
//  This function is called from db33.This iprint_mbfmsg command prints 
//  ROS33 message data in message buffer.
//***********************************************************************
int *iprint_mbfmsg(int arg1, int arg2, int arg3)
{
    T_MSGBUFCB* pMsgbufcb;
    T_MSG* pMsgwk;
    T_TSKCB* pTskcb;
    VP bufst;
    VP bufend;
    VP head;
    VP tail;
    UB msgwk;
    int i, j, k, temp, msgsz;

    rtncode = chk_param(arg1, arg2, MSGBUF_NUM);

    if(rtncode < 0){
        cnt = sprintf(tmpbuf.buf,"NONE\n");
        tmpbuf.size = cnt+1;      /* +1 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,"*** MBFID = %d ***\n", i);
        tmpbuf.size += cnt;

        pMsgbufcb = (T_MSGBUFCB*)&g_sMsgbufcb[i-1];

        bufst = pMsgbufcb->bufst;
        bufend = pMsgbufcb->bufend;
                                                    /* nothing message */
        if((pMsgbufcb->ubEmpty == 1) &&
            (pMsgbufcb->pNxtSndTsk == (UW*)&(pMsgbufcb->pNxtSndTsk))){ 

            cnt = sprintf(tmpbuf.buf+tmpbuf.size,"(NONE)\n");
            tmpbuf.size += cnt;
        }else{

            if(pMsgbufcb->ubEmpty == 0){

                head = pMsgbufcb->head;
                tail = pMsgbufcb->tail;

                j = 1;
                do{
                                                  /* get message size in head(4byte) */
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,"msg=%d (%08x):", j, head);
                    tmpbuf.size += cnt;

                    temp = *(unsigned char*)head++;
                    if(head >= bufend) head = bufst;
                    msgsz = temp;

                    temp = *(unsigned char*)head++;
                    if(head >= bufend) head = bufst;
                    temp <<= 8;
                    msgsz |= temp;

                    temp = *(unsigned char*)head++;
                    if(head >= bufend) head = bufst;
                    temp <<= 16;
                    msgsz |= temp;

                    temp = *(unsigned char*)head++;
                    if(head >= bufend) head = bufst;
                    temp <<= 24;
                    msgsz |= temp;

                    cnt = sprintf(tmpbuf.buf+tmpbuf.size," size=%04x:", msgsz);
                    tmpbuf.size += cnt;
                    k = msgsz;
                    while(k--){                       /* print message */
                        msgwk = *((char*)head)++;
                        cnt = sprintf(tmpbuf.buf+tmpbuf.size," %02x", msgwk);
                        tmpbuf.size += cnt;
                        if(head >= bufend) head = bufst;
                    }
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size,"\n");
                    tmpbuf.size += cnt;
                    j++;

                }while(head != tail);                 /* if next point is tail */
            }

            pTskcb = (T_TSKCB*)pMsgbufcb->pNxtSndTsk;

            if(pTskcb != (T_TSKCB*)&(pMsgbufcb->pNxtSndTsk)){
                cnt = sprintf(tmpbuf.buf+tmpbuf.size,"(send waiting message)\n");
                tmpbuf.size += cnt;
            }

            while(pTskcb != (T_TSKCB*)&(pMsgbufcb->pNxtSndTsk)){

                j = 0;                            /* search task number(taski) */
                while(&g_sTskcb[j] != pTskcb){
                    j++;
                    if(j == TSK_NUM){
                        break;
                    }
                }

                cnt = sprintf(tmpbuf.buf+tmpbuf.size,"task%d (%08x):",
                          j+1, pTskcb->pMsgbuf);
                tmpbuf.size += cnt;

                msgsz = pTskcb->msgsize;          /* get message size */

                cnt = sprintf(tmpbuf.buf+tmpbuf.size," size=%04x:", msgsz);
                tmpbuf.size += cnt;

                head = pTskcb->pMsgbuf;
                k = msgsz;
                while(k--){                       /* print message */
                    msgwk = *((char*)head)++;
                    cnt = sprintf(tmpbuf.buf+tmpbuf.size," %02x", msgwk);
                    tmpbuf.size += cnt;
                }
                cnt = sprintf(tmpbuf.buf+tmpbuf.size,"\n");
                tmpbuf.size += cnt;

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

//***********************************************************************
//  5.1 OS trace command (call statrc)
//  This function is called from db33.This itrace_statrc command start 
//  ROS33 OS trace.
//***********************************************************************
int *itrace_statrc(int arg1, int arg2, int arg3)
{
    init_ros_dbg_logging();

    cnt = sprintf(tmpbuf.buf,"*** OS TRACE START ***\n");
    tmpbuf.size = cnt+1;      /* +1 is null */

    return (int*)&tmpbuf;
}

//***********************************************************************
//  5.2 OS trace command (call endtrc)
//  This function is called from db33.This itrace_endtrc command end   
//  ROS33 OS trace.
//***********************************************************************
int *itrace_endtrc(int arg1, int arg2, int arg3)
{
    UINT max_size, head_cnt, tail_cnt, full_flg;
    UINT* start_adr, end_adr;
    UINT log_data_num;

    end_ros_dbg_logging();

    ros_dbg_bufinfo(&start_adr, &end_adr);

    cnt = sprintf(tmpbuf.buf,"*** OS TRACE END *** (buffer_adr:%08x-%08x)\n",
        start_adr, end_adr-1);
    tmpbuf.size = cnt;

    ros_dbg_loginfo(&max_size, &head_cnt, &tail_cnt, &full_flg);

    if((head_cnt > max_size) || (tail_cnt > max_size)){    /* illegal */
        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"NONE\n");
        tmpbuf.size += cnt;

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

    if(full_flg > 0){
        log_data_num = max_size;        /* buffer full */
        head_cnt++;                     /* count up head_cnt */

        if(tail_cnt == 0){
            tail_cnt = max_size;        /* set tail_cnt = max_size */
        }
    }else{
        log_data_num = tail_cnt;

        if(tail_cnt > 0){
            head_cnt++;                 /* count up head_cnt */
        }
    }

    cnt = sprintf(tmpbuf.buf+tmpbuf.size,"logging_data_num :%d\n",log_data_num);
    tmpbuf.size += cnt;

    cnt = sprintf(tmpbuf.buf+tmpbuf.size,"head_cnt         :%d\n",head_cnt);
    tmpbuf.size += cnt;

    cnt = sprintf(tmpbuf.buf+tmpbuf.size,"tail_cnt         :%d\n",tail_cnt);
    tmpbuf.size += cnt;

    cnt = sprintf(tmpbuf.buf+tmpbuf.size,"full_flg         :%d\n",full_flg);
    tmpbuf.size += cnt;

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

//***********************************************************************
//  5.3 OS trace command (call dsptrc)
//  This function is called from db33.This itrace_dsptrc command display
//  ROS33 OS trace data.
//***********************************************************************
int *itrace_dsptrc(int arg1, int arg2, int arg3)
{
    UINT max_size, head_cnt, tail_cnt, full_flg;
    UINT* start_adr, end_adr;
    UINT log_data_num, blknum;
    UINT blk_data, tim, type, tid_func;
    int i, loop;
    char funcchar[12];

    ros_dbg_bufinfo(&start_adr, &end_adr);

    cnt = sprintf(tmpbuf.buf,"*** DISPLAY LOGGING DATA *** (buffer_adr:%08x-%08x)\n",
        start_adr, end_adr-1);
    tmpbuf.size = cnt;

    ros_dbg_loginfo(&max_size, &head_cnt, &tail_cnt, &full_flg);

    if((head_cnt > max_size) || (tail_cnt > max_size)){    /* illegal */
        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"NONE\n");
        tmpbuf.size += cnt;

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

    if(full_flg > 0){
        log_data_num = max_size;        /* buffer full */
        head_cnt++;                     /* count up head_cnt */

        if(tail_cnt == 0){
            tail_cnt = max_size;        /* set tail_cnt = max_size */
        }
    }else{
        log_data_num = tail_cnt;

        if(tail_cnt > 0){
            head_cnt++;                 /* count up head_cnt */
        }
    }

    cnt = sprintf(tmpbuf.buf+tmpbuf.size,"logging_data_num :%d\n",log_data_num);
    tmpbuf.size += cnt;

    cnt = sprintf(tmpbuf.buf+tmpbuf.size,"head_cnt         :%d\n",head_cnt);
    tmpbuf.size += cnt;

    cnt = sprintf(tmpbuf.buf+tmpbuf.size,"tail_cnt         :%d\n",tail_cnt);
    tmpbuf.size += cnt;

    cnt = sprintf(tmpbuf.buf+tmpbuf.size,"full_flg         :%d\n",full_flg);
    tmpbuf.size += cnt;

    if(arg1 == 0){
        stano = head_cnt;               /* all display(head -> tail) */
        endno = tail_cnt;
    }else{
        if(arg2 == 0){
            stano = arg1;               /* start block only */
            endno = arg1;
        }else{
            stano = arg1;               /* start block -> end block */
            endno = arg2;
        }
    }

    if((stano <= 0) || (stano > max_size) || 
        ((full_flg == 0) && (stano > tail_cnt))){    /* illegal block */
        cnt = sprintf(tmpbuf.buf+tmpbuf.size,"NONE\n");
        tmpbuf.size += cnt;

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

    if(full_flg == 0){
        if((endno > tail_cnt) || (endno < stano)){
            endno = tail_cnt;
        }
    }else{
        if(endno > max_size){
            endno = max_size;
        }
   

⌨️ 快捷键说明

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