📄 qspy.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Product: QSPY Matlab interface.% Last Updated for Version: 4.0.00% Date of the Last Update: Apr 07, 2008%% Q u a n t u m L e a P s% ---------------------------% innovating embedded systems%% Copyright (C) 2002-2008 Quantum Leaps, LLC. All rights reserved.%% This software may be distributed and modified under the terms of the GNU% General Public License version 2 (GPL) as published by the Free Software% Foundation and appearing in the file GPL.TXT included in the packaging of% this file. Please note that GPL Section 2[b] requires that all works based% on this software must also be made publicly available under the terms of% the GPL ("Copyleft").%% Alternatively, this software may be distributed and modified under the% terms of Quantum Leaps commercial licenses, which expressly supersede% the GPL and are specifically designed for licensees interested in% retaining the proprietary status of their code.%% Contact information:% Quantum Leaps Web site: http://www.quantum-leaps.com% e-mail: info@quantum-leaps.com%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% the string Q_FILE must be definedfid = fopen(Q_FILE, 'r');if fid == -1 error('file not found')endQ_STATE = []; % sate entry/exit, init, tran, internal tran, ignoredQ_EQUEUE = []; % QEQueueQ_MPOOL = []; % QMPoolQ_NEW = []; % new/gcQ_ACTIVE = []; % active add/remove, subscribe/unsubscribeQ_PUB = []; % publish/publish attemptQ_TIME = []; % time event arm/disarm/rearm, clock tickQ_INT = []; % interrupt locking/unlockingQ_ISR = []; % ISR entry/exitQ_MUTEX = []; % QK mutex locking/unlockingQ_SCHED = []; % QK scheduler activityQ_TOT = 0; % total number of records processedwhile feof(fid) == 0 line = fgetl(fid); Q_TOT = Q_TOT+1; rec = sscanf(line, '%d', 1); % extract the record number switch rec % discriminate based on the record number % QEP records case 0 % QS_QEP_STATE_EMPTY case 1 % QS_QEP_STATE_ENTRY Q_STATE(size(Q_STATE,1)+1,:) = ... [NaN 1 sscanf(line, '%*u %u %u')' NaN 1]; case 2 % QS_QEP_STATE_EXIT Q_STATE(size(Q_STATE,1)+1,:) = ... [NaN 2 sscanf(line, '%*u %u %u')' NaN 1]; case 3 % QS_QEP_STATE_INIT Q_STATE(size(Q_STATE,1)+1,:) = ... [NaN 3 sscanf(line, '%*u %u %u %u')' 1]; case 4 % QS_QEP_INIT_TRAN tmp = sscanf(line, '%*u %u %u %u')'; Q_STATE(size(Q_STATE,1)+1,:) = ... [tmp(1) 3 tmp(2) NaN tmp(3) 1]; case 5 % QS_QEP_INTERN_TRAN Q_STATE(size(Q_STATE,1)+1,:) = ... [sscanf(line, '%*u %u %u %u %u')' NaN 1]; case 6 % QS_QEP_TRAN Q_STATE(size(Q_STATE,1)+1,:) = ... [sscanf(line, '%*u %u %u %u %u %u')' 1]; case 7 % QS_QEP_IGNORED Q_STATE(size(Q_STATE,1)+1,:) = ... [sscanf(line, '%*u %u %u %u %u')' NaN 0]; case 8 % QS_QEP_RESERVED1 case 9 % QS_QEP_RESERVED0 % QF records case 10 % QS_QF_ACTIVE_ADD tmp = sscanf(line, '%*u %u %u %u')'; Q_ACTIVE(size(Q_ACTIVE,1)+1,:) = [tmp(1) NaN tmp(2) tmp(3) 1]; case 11 % QS_QF_ACTIVE_REMOVE tmp = sscanf(line, '%*u %u %u %u')'; Q_ACTIVE(size(Q_ACTIVE,1)+1,:) = [tmp(1) NaN tmp(2) tmp(3) -1]; case 12 % QS_QF_ACTIVE_SUBSCRIBE Q_ACTIVE(size(Q_ACTIVE,1)+1,:) = ... [sscanf(line, '%*u %u %u %u')' NaN 1]; case 13 % QS_QF_ACTIVE_UNSUBSCRIBE Q_ACTIVE(size(Q_ACTIVE,1)+1,:) = ... [sscanf(line, '%*u %u %u %u')' NaN -1]; case 14 % QS_QF_ACTIVE_POST_FIFO tmp = sscanf(line, '%*u %u %u %u %u %u %u %u')'; Q_EQUEUE(size(Q_EQUEUE,1)+1,:) = ... [tmp(1) tmp(3) (tmp(6)+1) (tmp(7)+1) tmp(2) tmp(4) tmp(5) 0 1]; case 15 % QS_QF_ACTIVE_POST_LIFO tmp = sscanf(line, '%*u %u %u %u %u %u %u %u')'; Q_EQUEUE(size(Q_EQUEUE,1)+1,:) = ... [tmp(1) tmp(3) (tmp(6)+1) (tmp(7)+1) tmp(2) tmp(4) tmp(5) 1 1]; case 16 % QS_QF_ACTIVE_GET tmp = sscanf(line, '%*u %u %u %u %u %u %u')'; Q_EQUEUE(size(Q_EQUEUE,1)+1,:) = ... [tmp(1) tmp(3) (tmp(6)+1) NaN tmp(2) tmp(4) tmp(5) 0 -1]; case 17 % QS_QF_ACTIVE_GET_LAST tmp = sscanf(line, '%*u %u %u %u %u %u')'; Q_EQUEUE(size(Q_EQUEUE,1)+1,:) = ... [tmp(1) tmp(3) NaN NaN tmp(2) tmp(4) tmp(5) 0 -1]; case 18 % QS_QF_EQUEUE_INIT tmp = sscanf(line, '%*u %u %u')'; Q_EQUEUE(size(Q_EQUEUE,1)+1,:) = ... [NaN tmp(1) NaN (tmp(2)+1) NaN NaN NaN 0 0]; case 19 % QS_QF_EQUEUE_POST_FIFO tmp = sscanf(line, '%*u %u %u %u %u %u %u %u')'; Q_EQUEUE(size(Q_EQUEUE,1)+1,:) = ... [tmp(1) tmp(3) (tmp(6)+1) (tmp(7)+1) tmp(2) tmp(4) tmp(5) 0 1]; case 20 % QS_QF_EQUEUE_POST_LIFO tmp = sscanf(line, '%*u %u %u %u %u %u %u %u')'; Q_EQUEUE(size(Q_EQUEUE,1)+1,:) = ... [tmp(1) tmp(3) (tmp(6)+1) (tmp(7)+1) tmp(2) tmp(4) tmp(5) 1 1]; case 21 % QS_QF_EQUEUE_GET tmp = sscanf(line, '%*u %u %u %u %u %u %u')'; Q_EQUEUE(size(Q_EQUEUE,1)+1,:) = ... [tmp(1) tmp(3) (tmp(6)+1) 0 tmp(2) tmp(4) tmp(5) 0 -1]; case 22 % QS_QF_EQUEUE_GET_LAST tmp = sscanf(line, '%*u %u %u %u %u %u')'; Q_EQUEUE(size(Q_EQUEUE,1)+1,:) = ... [tmp(1) tmp(3) 0 0 tmp(2) tmp(4) tmp(5) 0 -1]; case 23 % QS_QF_MPOOL_INIT Q_MPOOL(size(Q_MPOOL,1)+1,:) = ... [NaN sscanf(line, '%*u %u %u')' NaN 0]; case 24 % QS_QF_MPOOL_GET Q_MPOOL(size(Q_MPOOL,1)+1,:) = ... [sscanf(line, '%*u %u %u %u %u')' -1]; case 25 % QS_QF_MPOOL_PUT Q_MPOOL(size(Q_MPOOL,1)+1,:) = ... [sscanf(line, '%*u %u %u %u')' NaN +1]; case 26 % QS_QF_PUBLISH_ATTEMPT Q_PUB(size(Q_PUB,1)+1,:) = [sscanf(line, '%*u %u %u %u %u')' 0]; case 27 % QS_QF_PUBLISH Q_PUB(size(Q_PUB,1)+1,:) = sscanf(line, '%*u %u %u %u %u %u')'; case 28 % QS_QF_NEW tmp = sscanf(line, '%*u %u %u %u')'; Q_NEW(size(Q_NEW,1)+1,:) = [tmp(1) tmp(3) NaN NaN tmp(2) 1]; case 29 % QS_QF_GC_ATTEMPT Q_NEW(size(Q_NEW,1)+1,:) = ... [sscanf(line, '%*u %u %u %u %u')' NaN 0]; case 30 % QS_QF_GC Q_NEW(size(Q_NEW,1)+1,:) = ... [sscanf(line, '%*u %u %u %u %u')' NaN -1]; case 31 % QS_QF_TICK Q_TIME(size(Q_TIME,1)+1,:) = ... [NaN NaN NaN NaN sscanf(line, '%*u %u') NaN 0]; case 32 % QS_QF_TIMEEVT_ARM tmp = sscanf(line, '%*u %u %u %u %u %u')'; Q_TIME(size(Q_TIME,1)+1,:) = ... [tmp(1) tmp(2) NaN tmp(3) tmp(4) tmp(5) 1]; case 33 % QS_QF_TIMEEVT_AUTO_DISARM tmp = sscanf(line, '%*u %u %u')'; Q_TIME(size(Q_TIME,1)+1,:) = [NaN tmp(1) NaN tmp(2) NaN NaN -1]; case 34 % QS_QF_TIMEEVT_DISARM_ATTEMPT tmp = sscanf(line, '%*u %u %u %u')'; Q_TIME(size(Q_TIME,1)+1,:) = [tmp(1) tmp(2) NaN tmp(3) NaN NaN 0]; case 35 % QS_QF_TIMEEVT_DISARM tmp = sscanf(line, '%*u %u %u %u %u %u')'; Q_TIME(size(Q_TIME,1)+1,:) = ... [tmp(1) tmp(2) NaN tmp(3) tmp(4) tmp(5) -1]; case 36 % QS_QF_TIMEEVT_REARM tmp = sscanf(line, '%*u %u %u %u %u %u %u')'; Q_TIME(size(Q_TIME,1)+1,:) = ... [tmp(1) tmp(2) NaN tmp(3) tmp(4) tmp(5) (1-tmp(6))]; case 37 % QS_QF_TIMEEVT_POST Q_TIME(size(Q_TIME,1)+1,:) = ... [sscanf(line, '%*u %u %u %u %u')' NaN NaN 0]; case 38 % QS_QF_TIMEEVT_PUBLISH Q_TIME(size(Q_TIME,1)+1,:) = ... [sscanf(line, '%*u %u %u %u')' NaN NaN NaN 0]; case 39 % QS_QF_INT_LOCK Q_INT(size(Q_INT,1)+1,:) = [sscanf(line, '%*u %u %u')' 1]; case 40 % QS_QF_INT_UNLOCK Q_INT(size(Q_INT,1)+1,:) = [sscanf(line, '%*u %u %u')' -1]; case 41 % QS_QF_ISR_ENTRY Q_ISR(size(Q_ISR,1)+1,:) = [sscanf(line, '%*u %u %u %u')' 1]; case 42 % QS_QF_ISR_EXIT Q_ISR(size(Q_ISR,1)+1,:) = [sscanf(line, '%*u %u %u %u')' -1]; case 43 % QS_QF_RESERVED6 case 44 % QS_QF_RESERVED5 case 45 % QS_QF_RESERVED4 case 46 % QS_QF_RESERVED3 case 47 % QS_QF_RESERVED2 case 48 % QS_QF_RESERVED1 case 49 % QS_QF_RESERVED0 % QK records case 50 % QS_QK_MUTEX_LOCK Q_MUTEX(size(Q_MUTEX,1)+1,:) = [sscanf(line, '%*u %u %u %u')' 1]; case 51 % QS_QK_MUTEX_UNLOCK Q_MUTEX(size(Q_MUTEX,1)+1,:) = [sscanf(line, '%*u %u %u %u')' -1]; case 52 % QS_QK_SCHEDULE Q_SCHED(size(Q_SCHED,1)+1,:) = sscanf(line, '%*u %u %u %u')'; case 53 % QS_QK_RESERVED6 case 54 % QS_QK_RESERVED5 case 55 % QS_QK_RESERVED4 case 56 % QS_QK_RESERVED3 case 57 % QS_QK_RESERVED2 case 58 % QS_QK_RESERVED1 case 59 % QS_QK_RESERVED0 % Miscallaneous QS records case 60 % QS_SIG_DICTIONARY eval(line(5:end)); case 61 % QS_OBJ_DICTIONARY eval(line(5:end)); case 62 % QS_FUN_DICTIONARY eval(line(5:end)); case 63 % QS_ASSERT, case 64 % QS_RESERVED5, case 65 % QS_RESERVED4, case 66 % QS_RESERVED3, case 67 % QS_RESERVED2, case 68 % QS_RESERVED1, case 69 % QS_RESERVED0, % User records % . . . endend% cleanup ...fclose(fid);clear fid;clear line;clear rec;clear tmp;% display status information ...Q_TOTwhos
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -