15.8.7 STM 読み出しコードのサンプル

以下に STM オブジェクトの読み出しのサンプルを示す Java コードを示します。これは Jython でも実装されることがあります。
この場合、STMTraceReader オブジェクトは ISTMObjectReceiver インタフェース自体を実装します。つまり、コードはオブジェクトをクラスとして STMChannelReader read メソッドに渡し、STMObject を受け取ることができます。
サンプルコードにより、すべてのマスタおよびチャネルと一致するパラメータセットを持つ STMSourceMatcherRange オブジェクトが作成されます。
STPv2 パケットプロトコルは、デコーダがバイナリデータストリームをパケットの開始点に同期させることのできる SYNC パケットを出力します。任意のデータストリームをデコードするときは、デコーダは STPv2 パケットのデコードを開始する前に、ストリームに同期する必要があります。ストリームが同期されると、連続するデータがデコードされていれば再同期の必要はありません。
デコーダが STPv2 パケットストリームでエラーを処理するには、以下の 2 つの方法があります。
/**
 * Class to read STM trace data and to get it processed into a
 * text stream.
 */
public class STMTraceReader implements ISTMObjectReceiver {
    /**
     * The trace device - ETB or DSTREAM or .....
     */
    private ITraceCapture traceDevice;
    /**
     * A list of STMObjects that gets generated for us
     */
    private List<STMObject> stmObjects;

[snip – other attribute declarations]

    public void decodeSTMTrace() {
        STMSourceMatcherRange stmSourceMatcher = new STMSourceMatcherRange(0, 128, 0, 65535);
        STMChannelReader stmChannelReader = new STMChannelReader(
            "STM Example",
            this.traceDevice,
            stmSourceMatcher);
        ISourceReader reader = this.traceDevice.borrowSourceReader(
            "STM Reader", this.stmStreamID);
        if (reader != null) {
            try {
[snip - code to figure out if trace is contiguous from last read.]
                if (!traceDataIsContiguous) {
                    stmChannelReader.reSync();
                }
[snip - code to figure out how much trace to read and from where.Also assign values to nextPos[] and readSize.]
                this.stmObjects.clear();
                try {
                    stmChannelReader.read(nextPos[0], readSize, this, nextPos, reader);
                } catch (DTSLException e) {
                    System.out.println("Caught DTSLException during STPv2 decode:");
                    System.out.println(e.getLocalizedMessage());
                    stmChannelReader.reSync();
                }
            }
            catch (DTSLException e) {
                System.out.println("DTSLException:");
                e.printStackTrace();
            }
            finally {
                /* Must return the trace reader to DTSL so that it knows we have finished reading
                 */
                this.traceDevice.returnSourceReader(reader);
            }
        }
    }
    
    /* (non-Javadoc)
     * @see com.arm.debug.dtsl.decoders.stm.stmobjects.ISTMObjectReceiver#write(com.arm.debug.dtsl.decoders.stm.stmobjects.STMObject)
     */
    @Override
    public boolean write(STMObject stmObject) {
        this.stmObjects.add(stmObject);
        return true;
    }		
非機密扱いPDF file icon PDF 版ARM DUI0446WJ
Copyright © 2010-2015 ARM.All rights reserved.