From 63320f6a8cd388a07531e731c7ce3161bb2ed8c7 Mon Sep 17 00:00:00 2001 From: donker <donker@astron.nl> Date: Thu, 7 Oct 2021 22:08:00 +0200 Subject: [PATCH] repair bug in reading in mmap --- src/tools/mmap.cpp | 46 +++++++++++++++++----------------------------- 1 file changed, 17 insertions(+), 29 deletions(-) diff --git a/src/tools/mmap.cpp b/src/tools/mmap.cpp index 0363e98b..ef44e520 100644 --- a/src/tools/mmap.cpp +++ b/src/tools/mmap.cpp @@ -121,7 +121,7 @@ CMMap mmap_to_regmap(istringstream& iss) string val_str; bool same_mask; bool same_field_name; - // char sep; + char sep; iss.getline(line, sizeof(line)); iss.getline(line, sizeof(line)); @@ -188,55 +188,43 @@ CMMap mmap_to_regmap(istringstream& iss) } /* Code to remove sscanf */ - // strs >> mm_mask_hi; - // strs >> sep; - // strs >> mm_mask_lo; - strs >> val_str; // get mm_mask hi/lo - sscanf(val_str.c_str(), "%d:%d", &mm_mask_hi, &mm_mask_lo); + strs >> mm_mask_hi; + strs >> sep; + strs >> mm_mask_lo; mask = 0; for (int i=mm_mask_lo; i<=mm_mask_hi; i++) { - mask |= (1<<i); + mask |= (1 << i); } if (!same_mask) { mm_info.mm_mask = mask; } mm_info.shift = mm_mask_lo; - /* Code to remove sscanf */ - // if (strs.peek() != "-") { - // sep = strs.get() - // mm_info.user_mask = mm_info.mm_mask; - // mm_info.span = mm_info.n_fields; - // } - // else { - // strs >> user_mask_hi; - // strs >> sep; - // strs >> user_mask_lo; - // mask = 0; - // for (int i=mm_mask_lo; i<=mm_mask_hi; i++) { - // mask |= (1<<i); - // } - // mm_info.user_mask = mask; - // mm_info.span = (uint)(((user_mask_hi - user_mask_lo + 1) * mm_info.n_fields) / (mm_mask_hi - mm_mask_lo + 1)); - // } - strs >> val_str; // get user_mask hi/lo - uint32_t span; + strs >> val_str; // get user_mask if (val_str != "-") { - sscanf(val_str.c_str(), "%d:%d", &user_mask_hi, &user_mask_lo); + stringstream ss(val_str); + ss >> user_mask_hi; + ss >> sep; + ss >> user_mask_lo; mask = 0; for (int i=mm_mask_lo; i<=mm_mask_hi; i++) { mask |= (1<<i); } mm_info.user_mask = mask; - span = (uint)(((user_mask_hi - user_mask_lo + 1) * mm_info.n_fields) / (mm_mask_hi - mm_mask_lo + 1)); } else { mm_info.user_mask = mm_info.mm_mask; + } + + uint32_t span; + if (mm_info.radix == "char8") { + span = mm_info.n_fields / sizeof(uint32_t); + } + else { span = mm_info.n_fields; } mm_info.span += span; - strs >> val_str; // get peripheral_span if (val_str != "-") { if (mm_info.n_peripherals > 1 || mm_info.n_ports > 1) { -- GitLab