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

📄 qspy.cpp

📁 事件驱动程序设计很好的框架
💻 CPP
📖 第 1 页 / 共 3 页
字号:
                       b);                print();                if (l_matFile != (FILE *)0) {                    fprintf(l_matFile, "%3d %10u %10u %4u\n",                            m_rec, t, a, b);                }            }            break;        }        case QS_QF_PUBLISH: {            t = getUint(l_tstampSize);            a = getUint(l_sigSize);            b = getUint(1);            if (OK()) {                sprintf(l_line, "%010u PUBLISH: "                       "Evt(Sig=%s, Pool=%1u, Ref=%2u)\n",                       t,                       l_sigDict.get(a, 0),                       (uint32_t)(b >> 6), (uint32_t)(b & 0x3F));                print();                if (l_matFile != (FILE *)0) {                    fprintf(l_matFile, "%3d %10u %4u %10u\n",                            m_rec, t, a,                            (uint32_t)(b >> 6), (uint32_t)(b & 0x3F));                }            }            break;        }        case QS_QF_NEW: {            t = getUint(l_tstampSize);            a = getUint(l_evtSize);            c = getUint(l_sigSize);            if (OK()) {                sprintf(l_line, "%010u NEW    : Evt(Sig=%s, size=%5u)\n",                       t,                       l_sigDict.get(c, 0),                       a);                print();                if (l_matFile != (FILE *)0) {                    fprintf(l_matFile, "%3d %10u %4u %4u\n",                            m_rec, t, a, c);                }            }            break;        }        case QS_QF_GC_ATTEMPT:        case QS_QF_GC: {            t = getUint(l_tstampSize);            a = getUint(l_sigSize);            b = getUint(1);            if (OK()) {                sprintf(l_line,                       "%010u %s : Evt(Sig=%s, Pool=%1d, Ref=%2d)\n",                       t,                       (m_rec == QS_QF_GC_ATTEMPT ? "GC-ATT" : "GC    "),                       l_sigDict.get(a, 0),                       (uint32_t)(b >> 6), (uint32_t)(b & 0x3F));                print();                if (l_matFile != (FILE *)0) {                    fprintf(l_matFile, "%3d %10u %4u %3u %3u\n",                            m_rec, t, a,                            (uint32_t)(b >> 6), (uint32_t)(b & 0x3F));                }            }            break;        }        case QS_QF_TICK: {            a = getUint(l_tevtCtrSize);            if (OK()) {                sprintf(l_line, "           TICK   : Ctr=%10u\n", a);                print();                if (l_matFile != (FILE *)0) {                    fprintf(l_matFile, "%3d %10u\n", m_rec, a);                }            }            break;        }        case QS_QF_TIMEEVT_ARM:        case QS_QF_TIMEEVT_DISARM: {            t = getUint(l_tstampSize);            a = getUint(l_objPtrSize);            b = getUint(l_objPtrSize);            c = getUint(l_tevtCtrSize);            d = getUint(l_tevtCtrSize);            if (OK()) {                sprintf(l_line, "%010u TE.%s: Obj=%s Act=%s "                       "nTicks=%4u Interval=%4u\n",                       t,                       (m_rec == QS_QF_TIMEEVT_ARM ? "ARM " : "DARM"),                       l_objDict.get(a),                       l_objDict.get(b),                       c, d);                print();                if (l_matFile != (FILE *)0) {                    fprintf(l_matFile, "%3d %10u %10u %10u %10u %10u\n",                            m_rec, t, a, b, c, d);                }            }            break;        }        case QS_QF_TIMEEVT_AUTO_DISARM: {            a = getUint(l_objPtrSize);            b = getUint(l_objPtrSize);            if (OK()) {                sprintf(l_line, "           TE.ADRM: Obj=%s Act=%s\n",                       l_objDict.get(a),                       l_objDict.get(b));                print();                if (l_matFile != (FILE *)0) {                    fprintf(l_matFile, "%3d %10u %10u\n",                            m_rec, a, b);                }           }            break;        }        case QS_QF_TIMEEVT_DISARM_ATTEMPT: {            t = getUint(l_tstampSize);            a = getUint(l_objPtrSize);            b = getUint(l_objPtrSize);            if (OK()) {                sprintf(l_line, "%010u TE.DATT: Obj=%s Act=%s\n",                       t,                       l_objDict.get(a),                       l_objDict.get(b));                print();                if (l_matFile != (FILE *)0) {                    fprintf(l_matFile, "%3d %10u %10u %10u\n",                            m_rec, t, a, b);                }            }            break;        }        case QS_QF_TIMEEVT_REARM: {            t = getUint(l_tstampSize);            a = getUint(l_objPtrSize);            b = getUint(l_objPtrSize);            c = getUint(l_tevtCtrSize);            d = getUint(l_tevtCtrSize);            e = getUint(1);            if (OK()) {                sprintf(l_line, "%010u TE.RARM: Obj=%s Act=%s "                       "nTicks=%4u Interval=%4u WasArmed=%1u\n",                       t,                       l_objDict.get(a),                       l_objDict.get(b),                       c, d, e);                print();                if (l_matFile != (FILE *)0) {                    fprintf(l_matFile, "%3d %10u %10u %10u %10u %10u %1u\n",                            m_rec, t, a, b, c, d, e);                }            }            break;        }        case QS_QF_TIMEEVT_POST: {            t = getUint(l_tstampSize);            a = getUint(l_objPtrSize);            b = getUint(l_sigSize);            c = getUint(l_objPtrSize);            if (OK()) {                sprintf(l_line, "%010u TE.POST: Obj=%s Sig=%s Act=%s\n",                       t,                       l_objDict.get(a),                       l_sigDict.get(b, c),                       l_objDict.get(c));                print();                if (l_matFile != (FILE *)0) {                    fprintf(l_matFile, "%3d %10u %10u %4u %10u\n",                            m_rec, t, a, b, c);                }            }            break;        }        case QS_QF_INT_LOCK:        case QS_QF_INT_UNLOCK: {            t = getUint(l_tstampSize);            a = getUint(1);            if (OK()) {                sprintf(l_line, "%010u %s: "                       "IntLockNest=%2d\n",                       t,                       (m_rec == QS_QF_INT_LOCK ? "QF_intL" : "QF_intU"),                       a);                print();                if (l_matFile != (FILE *)0) {                    fprintf(l_matFile, "%3d %10u %3u\n",                            m_rec, t, a);                }           }            break;        }        case QS_QF_ISR_ENTRY:        case QS_QF_ISR_EXIT: {            t = getUint(l_tstampSize);            a = getUint(1);            b = getUint(1);            if (OK()) {                sprintf(l_line, "%010u %s: "                       "IsrNest=%2u, CurrPrio=%3u\n",                       t,                       (m_rec == QS_QF_ISR_ENTRY ? "QF_isrE" : "QF_isrX"),                       a, b);                print();                if (l_matFile != (FILE *)0) {                    fprintf(l_matFile, "%3d %10u %3u %3u\n",                            m_rec, t, a, b);                }            }            break;        }        // QK records ........................................................        case QS_QK_MUTEX_LOCK:        case QS_QK_MUTEX_UNLOCK: {            t = getUint(l_tstampSize);            a = getUint(1);            b = getUint(1);            if (OK()) {                sprintf(l_line, "%010u %s: "                       "OrgPrio=%2u, CurrPrio=%3u\n",                       t,                       (m_rec == QS_QK_MUTEX_LOCK ? "QK_muxL" : "QK_muxU"),                       a, b);                print();                if (l_matFile != (FILE *)0) {                    fprintf(l_matFile, "%3d %10u %3u %3u\n",                            m_rec, t, a, b);                }            }            break;        }        case QS_QK_SCHEDULE: {            t = getUint(l_tstampSize);            a = getUint(1);            b = getUint(1);            if (OK()) {                sprintf(l_line, "%010u QK_sche: "                       "prio=%2u, pin=%3u\n",                       t, a, b);                print();                if (l_matFile != (FILE *)0) {                    fprintf(l_matFile, "%3d %10u %3u %3u\n",                            m_rec, t, a, b);                }            }            break;        }        // Miscallaneous QS records ..........................................        case QS_SIG_DICTIONARY: {            a = getUint(l_sigSize);            b = getUint(l_objPtrSize);            s = getStr();            if (OK()) {                l_sigDict.put(a, b, s);                sprintf(l_line, "           Sig Dic: %08X,Obj=%08X ->%s\n",                       a, b, s);                print();                if (l_matFile != (FILE *)0) {                    fprintf(l_matFile, "%3d %s=[%4u %10u];\n",                        m_rec, getMatDict(s), a, b);                }            }            break;        }        case QS_OBJ_DICTIONARY: {            a = getUint(l_objPtrSize);            s = getStr();            if (OK()) {                l_objDict.put(a, ((s[0] == '&') ? s + 1 : s));                sprintf(l_line, "           Obj Dic: %08X->%s\n",                       a, s);                print();                if (l_matFile != (FILE *)0) {                    fprintf(l_matFile, "%3d %s=%10u;\n",                            m_rec, getMatDict(s), a);                }            }            break;        }        case QS_FUN_DICTIONARY: {            a = getUint(l_funPtrSize);            s = getStr();            if (OK()) {                l_funDict.put(a, ((s[0] == '&') ? s + 1 : s));                sprintf(l_line, "           Fun Dic: %08X->%s\n",                       a, s);                print();                if (l_matFile != (FILE *)0) {                    fprintf(l_matFile, "%3d %s=%10u;\n",                            m_rec, getMatDict(s), a);                }            }            break;        }        case QS_ASSERT: {            t = getUint(l_tstampSize);            a = getUint(2);            s = getStr();            if (OK()) {                sprintf(l_line, "%010u !ASSERT: File=%s Line=%4hu\n",                       t, s, a);                print();                if (l_matFile != (FILE *)0) {                    fprintf(l_matFile, "%3d %10u %4u %s\n",                            m_rec, t, a, s);                }            }            break;        }        // User records ......................................................        default: {            if (m_rec >= QS_USER) {                parseUser();            }            else {                sprintf(l_line, "           ???    : Rec=%3u, Len=%3d\n",                       (unsigned)m_rec, (int)m_len);                print();            }            break;        }    }}//............................................................................#define QS_FRAME            ((uint8_t)0x7E)#define QS_ESC              ((uint8_t)0x7D)#define QS_GOOD_CHKSUM      ((uint8_t)0xFF)#define QS_ESC_XOR          0x20#define QS_MAX_RECORD_SIZE  256void qsParse(uint8_t const *buf, size_t nBytes) {    static uint8_t esc;    static uint8_t seq;    static uint8_t chksum;    static uint8_t record[QS_MAX_RECORD_SIZE];    static uint8_t *pos = record;                // position within the record    while (nBytes-- != 0) {        uint8_t b = *buf++;        if (esc) {            esc = (uint8_t)0;            b ^= QS_ESC_XOR;        }        else {            if (b == QS_FRAME) {                if ((chksum == QS_GOOD_CHKSUM) && (pos >= &record[3])) {                    if ((uint8_t)(seq + 1) != record[0]) {                        sprintf(l_line, "*** Dropped %3u records\n",                               (unsigned)((record[0] - seq - 1) & 0xFF));                        print();                    }                    seq = record[0];                    QSpyRecord qrec(record[1],                                    &record[2],                                    (uint32_t)(pos - record - 3));                    qrec.parse();                }                else {                    sprintf(l_line, "*** Incorrect record past seq=%3u\n",                           (unsigned)seq);                    print();                }                                          // get ready for the next record ...                chksum = (uint8_t)0;                pos = record;                continue;            }            else if (b == QS_ESC) {                esc = (uint8_t)1;                continue;            }        }        chksum = (uint8_t)(chksum + b);        if (pos < &record[sizeof(record)]) {            *pos++ = b;        }        else {            sprintf(l_line, "Error, record too long\n");            print();            chksum = (uint8_t)0;            pos = record;            esc = (uint8_t)0;        }    }}

⌨️ 快捷键说明

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