summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2021-11-17 18:40:36 +0100
committerDaniel Friesel <derf@finalrewind.org>2021-11-17 18:40:36 +0100
commit7ab9587813182740b7a5abe56618d895a5442efa (patch)
tree01e7846fe4e96b43e5f539b83b59410e35db4893
parentbec6d9914cbcfd97f14068be5ca3dbb2052187e7 (diff)
improve libmsp430 / LD_LIBRARY_PATH handling
-rw-r--r--README.md8
-rwxr-xr-xbin/msp430-etv37
2 files changed, 30 insertions, 15 deletions
diff --git a/README.md b/README.md
index b37bf74..06de351 100644
--- a/README.md
+++ b/README.md
@@ -30,10 +30,10 @@ EnergyTrace performs measurements in intervals of about 270 µs. Each line
contains data for one measurement interval. Measurement data consists of for
readings:
-* Timestamps (µs) since start of the measurement,
-* Mean current (nA) over the last ten to thousand intervals,
-* Mean voltage (mV) with details unknown, and
-* Cumulative energy (nJ) since start of the measurement.
+1. Timestamps (µs) since start of the measurement,
+2. Mean current (nA) over the last ten to thousand intervals,
+3. Mean voltage (mV) with details unknown, and
+4. Cumulative energy (nJ) since start of the measurement.
Note that the EnergyTrace hardware and firmware only measures time, voltage,
and energy. Current readings are calculated by the MSP430 client library. Power
diff --git a/bin/msp430-etv b/bin/msp430-etv
index e39bfc8..e2492df 100755
--- a/bin/msp430-etv
+++ b/bin/msp430-etv
@@ -168,12 +168,16 @@ class PELT:
return changepoints
-def measure_data(filename, duration, energytrace_cmd="energytrace"):
+def measure_data(
+ filename, duration, libmsp430_path=None, energytrace_cmd="energytrace"
+):
# libmsp430.so must be available
- if not "LD_LIBRARY_PATH" in os.environ:
- os.environ[
- "LD_LIBRARY_PATH"
- ] = "{}/var/projects/msp430/MSP430Flasher_1.3.15".format(os.environ["HOME"])
+ if libmsp430_path is None:
+ libmsp430_path = "/opt/msp430/MSP430Flasher_1.3.20"
+ if "LD_LIBRARY_PATH" in os.environ:
+ os.environ["LD_LIBRARY_PATH"] += f":{libmsp430_path}"
+ else:
+ os.environ["LD_LIBRARY_PATH"] = libmsp430_path
# https://ess.cs.uos.de/git/df/energytrace-util must be available
if which(energytrace_cmd) is None:
@@ -279,6 +283,12 @@ def main():
help="Export analysis results (e.g. changepoints) to JSON file",
)
parser.add_argument(
+ "--libmsp430-path",
+ metavar="DIRECTORY",
+ type=str,
+ help="Path to directory containing libmsp30.so",
+ )
+ parser.add_argument(
"--skip",
metavar="N",
type=float,
@@ -355,10 +365,15 @@ def main():
log_data = f.read()
elif args.with_hardware_states:
log_data = measure_data(
- args.save, args.duration, energytrace_cmd="energytracepp"
+ args.save,
+ args.duration,
+ libmsp430_path=args.libmsp430_path,
+ energytrace_cmd="energytracepp",
)
else:
- log_data = measure_data(args.save, args.duration)
+ log_data = measure_data(
+ args.save, args.duration, libmsp430_path=args.libmsp430_path
+ )
lines = log_data.split("\n")
data_count = sum(map(lambda x: len(x) > 0 and x[0] != "#", lines))
@@ -523,7 +538,7 @@ def main():
)
smooth_power = running_mean(power_from_energy, 10)
- if args.pelt:
+ if args.pelt is not None:
power_changepoints = detect_changepoints(
data[1:, 0] * 1e-6, power_from_energy, num_samples=args.pelt
)
@@ -581,7 +596,7 @@ def main():
if args.json_export:
extra_data = dict()
- if args.pelt:
+ if args.pelt is not None:
extra_data["power_changepoints"] = power_changepoints
extra_data["current_changepoints"] = current_changepoints
export_json(args.json_export, extra_data)
@@ -674,7 +689,7 @@ def main():
label="mean(I, 10)",
markersize=1,
)
- if args.pelt:
+ if args.pelt is not None:
plt.vlines(
plot_changepoints_vlines(current_changepoints),
np.min(Y),
@@ -701,7 +716,7 @@ def main():
label="mean(P, 10)",
markersize=1,
)
- if args.pelt:
+ if args.pelt is not None:
plt.vlines(
plot_changepoints_vlines(power_changepoints),
np.min(Y),