From a49331f94a8422de8062b2e28de573083804aa8a Mon Sep 17 00:00:00 2001 From: dreamsourcelabTAI Date: Sat, 17 Jun 2023 14:48:21 +0800 Subject: [PATCH] fix: got the block size is error --- DSView/pv/data/logicsnapshot.cpp | 2 +- DSView/pv/data/logicsnapshot.h | 4 ++++ DSView/pv/storesession.cpp | 18 +++++++++++++++++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/DSView/pv/data/logicsnapshot.cpp b/DSView/pv/data/logicsnapshot.cpp index 12912ca9..435c0773 100644 --- a/DSView/pv/data/logicsnapshot.cpp +++ b/DSView/pv/data/logicsnapshot.cpp @@ -1351,7 +1351,7 @@ uint64_t LogicSnapshot::get_block_size(int block_index) return LeafBlockSamples / 8; } else if (block_index == 0){ - samples = min(_ring_sample_count+_loop_offset, + samples = min(_ring_sample_count + (_loop_offset % (uint64_t)LeafBlockSamples), (uint64_t)LeafBlockSamples) - (_loop_offset % (uint64_t)LeafBlockSamples); return samples/8; } diff --git a/DSView/pv/data/logicsnapshot.h b/DSView/pv/data/logicsnapshot.h index 6804bf2e..91741301 100644 --- a/DSView/pv/data/logicsnapshot.h +++ b/DSView/pv/data/logicsnapshot.h @@ -146,6 +146,10 @@ public: return _able_free; } + inline uint64_t get_loop_offset(){ + return _loop_offset; + } + private: bool get_sample_unlock(uint64_t index, int sig_index); bool get_sample_self(uint64_t index, int sig_index); diff --git a/DSView/pv/storesession.cpp b/DSView/pv/storesession.cpp index 2c1b788b..eb94a865 100644 --- a/DSView/pv/storesession.cpp +++ b/DSView/pv/storesession.cpp @@ -226,6 +226,15 @@ void StoreSession::save_logic(pv::data::LogicSnapshot *logic_snapshot) _unit_count = logic_snapshot->get_ring_sample_count() / 8 * to_save_probes; num = logic_snapshot->get_block_num(); + /* + dsv_info("total-bytes:%llu, total-sample:%llu, loop-offset:%llu, blocks:%d", + _unit_count, + logic_snapshot->get_ring_sample_count(), + logic_snapshot->get_loop_offset(), + num + ); + */ + for(auto s : _session->get_signals()) { int ch_type = s->get_type(); @@ -264,7 +273,14 @@ void StoreSession::save_logic(pv::data::LogicSnapshot *logic_snapshot) QFile::remove(_file_name); return; } - _units_stored += size; + _units_stored += size; + + //dsv_info("read-bytes:%llu, block-size:%llu, block-index:%d-%d", _units_stored, size, ch_index, i); + + if (_units_stored > _unit_count){ + dsv_err("Read block data error!"); + assert(false); + } if (need_malloc) free(buf);