From 7ab9587813182740b7a5abe56618d895a5442efa Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Wed, 17 Nov 2021 18:40:36 +0100 Subject: improve libmsp430 / LD_LIBRARY_PATH handling --- README.md | 8 ++++---- bin/msp430-etv | 37 ++++++++++++++++++++++++++----------- 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: @@ -278,6 +282,12 @@ def main(): type=str, 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", @@ -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), -- cgit v1.2.3