From 61b84a08d23652e669e21b1b2e4b05f5a4270747 Mon Sep 17 00:00:00 2001 From: Niclas Finne Date: Fri, 13 May 2022 23:15:43 +0200 Subject: [PATCH 1/6] Updated tests to build with msp430-gcc 4.7.x --- tests/Makefile | 24 +++++------------------- tests/cputest.c | 35 ++++++++++++++++++++--------------- tests/timertest.c | 32 +++++++++++++++++++++----------- 3 files changed, 46 insertions(+), 45 deletions(-) diff --git a/tests/Makefile b/tests/Makefile index 65de3a1..4f626ee 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -1,17 +1,7 @@ -### Check if we are running under Windows - -ifndef WINDIR - ifdef OS - ifneq (,$(findstring Windows,$(OS))) - WINDIR := Windows - endif - endif -endif - .SUFFIXES: -#MCU=msp430x149 -MCU=msp430x1611 +#MCU=msp430f149 +MCU=msp430f1611 ### Compiler definitions CC = msp430-gcc @@ -21,8 +11,7 @@ AR = msp430-ar OBJCOPY = msp430-objcopy STRIP = msp430-strip BSL = msp430-bsl -CFLAGSNO = -I. -DWITH_ASCII \ - -Wall -mmcu=$(MCU) -g +CFLAGSNO = -I. -Wall -mmcu=$(MCU) -g CFLAGS += $(CFLAGSNO) -Os SOURCES := msp430setup.c @@ -33,7 +22,7 @@ OBJECTS := $(SOURCES:.c=.o) all: cputest.firmware timertest.firmware -%.firmware: %.co $(OBJECTS) +%.firmware: %.o $(OBJECTS) $(CC) -mmcu=$(MCU) -Wl,-Map=$(@:.firmware=.map) $(CFLAGS) -o $@ $^ %.ihex: %.firmware @@ -42,11 +31,8 @@ all: cputest.firmware timertest.firmware %.o: %.c $(CC) $(CFLAGS) -c $< -o $@ -%.co: %.c - $(CC) $(CFLAGS) -DAUTOSTART_ENABLE -c $< -o $@ - %.u: %.ihex msp430-jtag -eI $^ clean: - rm -f *~ *.lst *.map *.co *.o *.ihex *.firmware + rm -f *~ *.lst *.map *.o *.ihex *.firmware diff --git a/tests/cputest.c b/tests/cputest.c index ab05aff..36bac9b 100644 --- a/tests/cputest.c +++ b/tests/cputest.c @@ -79,13 +79,14 @@ static int caseID = 0; /*---------------------------------------------------------------------------*/ static int pos = 0; static unsigned int times[10]; -interrupt(TIMERB1_VECTOR) timerb1 (void) { - if (TBIV == 2) { - if (pos < 10) { - times[pos] = TBR; - pos++; - TBCCR1 = TBCCR1 + 100; - } +interrupt(TIMERB1_VECTOR) timerb1 (void) +{ + if(TBIV == 2) { + if(pos < 10) { + times[pos] = TBR; + pos++; + TBCCR1 = TBCCR1 + 100; + } } } /*---------------------------------------------------------------------------*/ @@ -259,13 +260,13 @@ static void testBitFields() { invert.green ^= 1; assertTrue(invert.green == 0); + assertTrue(pelle == 0x4711); } /*--------------------------------------------------------------------------*/ static int flag; -interrupt(UART0TX_VECTOR) - usart_tx_test0(void) +interrupt(UART0TX_VECTOR) usart_tx_test0 (void) { printf("*IRQ: Flags:%d %d\n", IFG1, UTCTL0); flag++; @@ -352,7 +353,7 @@ uint16_t test_calib_busywait_delta( int calib ) int8_t aclk_count = 2; uint16_t dco_prev = 0; uint16_t dco_curr = 0; - + set_dco_calib( calib ); while( aclk_count-- > 0 ) @@ -391,18 +392,18 @@ void busyCalibrateDco() for( calib=0,step=0x800; step!=0; step>>=1 ) { // if the step is not past the target, commit it - printf(" step: %d\n", step); - if((tmp = test_calib_busywait_delta(calib|step)) <= TARGET_DCO_DELTA ) + printf(" step: %d\n", step); + if((tmp = test_calib_busywait_delta(calib|step)) <= TARGET_DCO_DELTA ) { calib |= step; printf(" committed: tmp = %d\n", tmp); } } - + // if DCOx is 7 (0x0e0 in calib), then the 5-bit MODx is not useable, set it to 0 if( (calib & 0x0e0) == 0x0e0 ) calib &= ~0x01f; - + set_dco_calib( calib ); } @@ -429,5 +430,9 @@ main(void) busyCalibrateDco(); /* printf("PROFILE\n"); */ printf("EXIT\n"); - return 0; + + /* Short delay to allow serial output to finish */ + __delay_cycles(2000); + +return 0; } diff --git a/tests/timertest.c b/tests/timertest.c index 43daa6f..2567e9a 100644 --- a/tests/timertest.c +++ b/tests/timertest.c @@ -76,17 +76,17 @@ static int caseID = 0; #define RTIMER_ARCH_SECOND 4096 #define CLOCK_SECOND 128 -#define CLOCK_CONF_SECOND CLOCK_SECOND #define INTERVAL (RTIMER_ARCH_SECOND / CLOCK_SECOND) /*---------------------------------------------------------------------------*/ static int pos = 0; -static unsigned int ticka0 = 0; -static unsigned int count = 0; -static unsigned int seconds = 0; -static unsigned int last_tar = 0; +static volatile unsigned int ticka0 = 0; +static volatile unsigned int count = 0; +static volatile unsigned int seconds = 0; +static volatile unsigned int last_tar = 0; -interrupt(TIMERA1_VECTOR) timera1 (void) { +interrupt(TIMERA1_VECTOR) timera1 (void) +{ if(TAIV == 2) { eint(); do { @@ -99,7 +99,7 @@ interrupt(TIMERA1_VECTOR) timera1 (void) { } } - if(count % CLOCK_CONF_SECOND == 0) { + if(count % CLOCK_SECOND == 0) { ++seconds; } } while((TACCR1 - TAR) > INTERVAL); @@ -109,7 +109,8 @@ interrupt(TIMERA1_VECTOR) timera1 (void) { /*---------------------------------------------------------------------------*/ -interrupt(TIMERA0_VECTOR) timera0 (void) { +interrupt(TIMERA0_VECTOR) timera0 (void) +{ ticka0++; TACCR0 += 4; } @@ -132,6 +133,10 @@ static void testCase(char *description) { } static void testTimers() { + unsigned int counter = 0; + + testCase("Timers"); + dint(); /* Timer A1 */ /* Select ACLK 32768Hz clock, divide by 8 */ @@ -154,10 +159,11 @@ static void testTimers() { eint(); - while (ticka0 < 200) { - printf("Timer a0:%d \n", ticka0); + for(counter = 0; ticka0 < 100 && counter < 2000; counter++) { + printf("Timer a0:%d\n", ticka0); } - + assertTrue(ticka0 >= 100); + assertTrue(count > 10); } int @@ -170,5 +176,9 @@ main(void) testTimers(); printf("EXIT\n"); + + /* Short delay to allow serial output to finish */ + __delay_cycles(2000); + return 0; } From e8b7814777e96bb35df3eb160e519138ce0f103b Mon Sep 17 00:00:00 2001 From: Niclas Finne Date: Fri, 13 May 2022 23:16:51 +0200 Subject: [PATCH 2/6] Fail with error when test fails --- se/sics/mspsim/util/Test.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/se/sics/mspsim/util/Test.java b/se/sics/mspsim/util/Test.java index eca6e36..9edc0eb 100644 --- a/se/sics/mspsim/util/Test.java +++ b/se/sics/mspsim/util/Test.java @@ -67,7 +67,8 @@ public class Test implements USARTListener { lineBuffer.setLength(0); System.out.println("#|" + line); if (line.startsWith("FAIL:")) { - System.exit(0); + System.err.println("Tests failed!"); + System.exit(1); } else if (line.startsWith("EXIT")) { System.out.println("Tests succeded!"); System.exit(0); From b082842f5254ba5545be8a5205490c19a4904cc6 Mon Sep 17 00:00:00 2001 From: Niclas Finne Date: Fri, 13 May 2022 23:17:21 +0200 Subject: [PATCH 3/6] Add pre-built firmwares for tests --- firmware/sky/cputest.sky | Bin 0 -> 40123 bytes firmware/sky/timertest.sky | Bin 0 -> 28010 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 firmware/sky/cputest.sky create mode 100644 firmware/sky/timertest.sky diff --git a/firmware/sky/cputest.sky b/firmware/sky/cputest.sky new file mode 100644 index 0000000000000000000000000000000000000000..abe4a3f20a2f851d903d3927a2bbacddf73d70e7 GIT binary patch literal 40123 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 literal 0 HcmV?d00001 From e243d61215ce25589509f7ccbdce794d0e0248e5 Mon Sep 17 00:00:00 2001 From: Niclas Finne Date: Fri, 13 May 2022 23:18:12 +0200 Subject: [PATCH 4/6] Added targets for missing node types + target to run tests --- build.xml | 50 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/build.xml b/build.xml index 5152910..136884c 100644 --- a/build.xml +++ b/build.xml @@ -102,6 +102,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -110,19 +134,25 @@ - - - - - - - - - + + + - + + + + + + + From b1daf72d4b4afa91064f66b0e07d78984de4a48c Mon Sep 17 00:00:00 2001 From: Niclas Finne Date: Fri, 13 May 2022 23:19:05 +0200 Subject: [PATCH 5/6] Removed Makefile - use ant to build instead --- Makefile | 205 ------------------------------------------------------- 1 file changed, 205 deletions(-) delete mode 100644 Makefile diff --git a/Makefile b/Makefile deleted file mode 100644 index d409e4b..0000000 --- a/Makefile +++ /dev/null @@ -1,205 +0,0 @@ -############################################################### -# Makefile for mspsim -# -# Needed stuff in the PATH: -# java, javac (JDK 11 or newer) -# -# Under MS-DOS/Windows -# A GNU compatible Make (for example Cygwin's) -############################################################### - -############################################################### -# Settings -############################################################### -CC=javac -JAVA=java -JAR=jar -RM=rm -f - -############################################################### -# System dependent -############################################################### - -ifndef HOST_OS - ifeq ($(OS),Windows_NT) - HOST_OS := Windows - else - HOST_OS := $(shell uname) - endif -endif - -ifeq ($(HOST_OS),Windows) - # These setting are for Windows - SEPARATOR=; -else - # This settings are for UNIX - SEPARATOR=: -endif - - -############################################################### -# Arguments -############################################################### - -EMPTY := -SPACE := ${EMPTY} ${EMPTY} -LIBS := ${wildcard lib/*.jar} -BUILD := build -CLASSPATH=${subst ${SPACE},${SEPARATOR},$(BUILD)/ ${LIBS}} -CCARGS=-deprecation -Xlint:unchecked -source 11 -target 11 -classpath ".${SEPARATOR}${CLASSPATH}" -d $(BUILD) - -JAVAARGS=-classpath "${CLASSPATH}" - - -############################################################### -# SERVER OBJECTS -############################################################### - -ifndef FIRMWAREFILE -ESBFIRMWARE = firmware/esb/sensor-demo.esb -SKYFIRMWARE = firmware/sky/blink.sky -Z1FIRMWARE = firmware/z1/blink.z1 -WISMOTEFIRMWARE = firmware/wismote/blink.wismote -TYNDALLFIRMWARE = firmware/tyndall/blink.tyndall -EXP5438FIRMWARE = firmware/exp5438/testcase-bits.exp5438 -else -ESBFIRMWARE = ${FIRMWAREFILE} -SKYFIRMWARE = ${FIRMWAREFILE} -Z1FIRMWARE = ${FIRMWAREFILE} -WISMOTEFIRMWARE = ${FIRMWAREFILE} -TYNDALLFIRMWARE = ${FIRMWAREFILE} -EXP5438FIRMWARE = ${FIRMWAREFILE} -endif - -ifdef MAPFILE -MAPARGS := -map=$(MAPFILE) -endif - -CPUTEST := tests/cputest.firmware -TIMERTEST := tests/timertest.firmware - -SCRIPTS := ${addprefix scripts/,autorun.sc duty.sc} -BINARY := README.txt license.txt CHANGE_LOG.txt images/*.jpg images/*.png firmware/*/*.firmware ${SCRIPTS} - -PACKAGES := se/sics/mspsim ${addprefix se/sics/mspsim/,core chip cli config debug platform ${addprefix platform/,esb sky jcreate sentillausb z1 tyndall ti wismote} plugin profiler emulink net ui util extutil/highlight extutil/jfreechart} - -SOURCES := ${wildcard *.java $(addsuffix /*.java,$(PACKAGES))} - -OBJECTS := ${addprefix $(BUILD)/,$(SOURCES:.java=.class)} - -JARFILE := mspsim.jar - -############################################################### -# MAKE -############################################################### - -.PHONY: all compile jar help run runesb runsky test cputest $(CPUTEST) mtest - -all: compile - -compile: $(OBJECTS) - -jar: $(JARFILE) - -$(JARFILE): $(OBJECTS) - -@$(RM) JarManifest.txt - @echo >>JarManifest.txt "Manifest-Version: 1.0" - @echo >>JarManifest.txt "Sealed: true" - @echo >>JarManifest.txt "Main-Class: se.sics.mspsim.Main" - @echo >>JarManifest.txt "Class-path: ${LIBS}" - $(JAR) cfm $(JARFILE) JarManifest.txt images/*.jpg -C $(BUILD) . - -@$(RM) JarManifest.txt - -%.esb: jar - java -jar $(JARFILE) -platform=esb $@ $(ARGS) - -%.sky: jar - java -jar $(JARFILE) -platform=sky $@ $(ARGS) - -%.z1: jar - java -jar $(JARFILE) -platform=z1 $@ $(ARGS) - -%.exp5438: jar - java -jar $(JARFILE) -platform=exp5438 $@ $(ARGS) - -%.tyndall: jar - java -jar $(JARFILE) -platform=tyndall $@ $(ARGS) - -%.wismote: jar - java -jar $(JARFILE) -platform=wismote $@ $(ARGS) - -help: - @echo "Usage: make [all,compile,clean,run,runsky,runesb]" - -run: compile - $(JAVA) $(JAVAARGS) se.sics.mspsim.Main $(FIRMWAREFILE) $(MAPARGS) $(ARGS) - -runesb: compile - $(JAVA) $(JAVAARGS) se.sics.mspsim.platform.esb.ESBNode $(ESBFIRMWARE) $(MAPARGS) $(ARGS) - -runsky: compile - $(JAVA) $(JAVAARGS) se.sics.mspsim.platform.sky.SkyNode $(SKYFIRMWARE) $(MAPARGS) $(ARGS) - -runskyprof: compile - $(JAVA) -agentlib:yjpagent $(JAVAARGS) se.sics.mspsim.platform.sky.SkyNode $(SKYFIRMWARE) $(MAPARGS) $(ARGS) - -runtelos: compile - $(JAVA) $(JAVAARGS) se.sics.mspsim.platform.sky.TelosNode $(SKYFIRMWARE) $(MAPARGS) $(ARGS) -runz1: compile - $(JAVA) $(JAVAARGS) se.sics.mspsim.platform.z1.Z1Node $(Z1FIRMWARE) $(MAPARGS) $(ARGS) -runtyndall: compile - $(JAVA) $(JAVAARGS) se.sics.mspsim.platform.tyndall.TyndallNode $(TYNDALLFIRMWARE) $(MAPARGS) $(ARGS) -runwismote: compile - $(JAVA) $(JAVAARGS) se.sics.mspsim.platform.wismote.WismoteNode $(WISMOTEFIRMWARE) $(MAPARGS) $(ARGS) - -runexp5438: compile - $(JAVA) $(JAVAARGS) se.sics.mspsim.platform.ti.Exp5438Node $(EXP5438FIRMWARE) $(MAPARGS) $(ARGS) - -test: cputest - -cputest: $(CPUTEST) - $(JAVA) $(JAVAARGS) se.sics.mspsim.util.Test $(CPUTEST) - -timertest: $(TIMERTEST) - $(JAVA) $(JAVAARGS) se.sics.mspsim.util.Test $(TIMERTEST) - -$(CPUTEST): - (cd tests && $(MAKE)) -$(TIMERTEST): - (cd tests && $(MAKE)) - -mtest: compile $(CPUTEST) - @-$(RM) mini-test_cpu.txt - $(JAVA) $(JAVAARGS) se.sics.util.Test -debug $(CPUTEST) >mini-test_cpu.txt - - -############################################################### -# ARCHIVE GENERATION -############################################################### - -source: - zip -9 mspsim-source-`date '+%F'`.zip Makefile $(BINARY) $(addsuffix /*.java,$(PACKAGES)) tests/Makefile tests/*.c tests/*.h lib/*.* - - -############################################################### -# CLASS COMPILATION -############################################################### - -$(BUILD): - @mkdir $@ - -$(BUILD)/%.class : %.java $(BUILD) - $(CC) $(CCARGS) $< - - -############################################################### -# CLEAN (untrusted, use with great care!!!) -############################################################### - -.PHONY: clean - -clean: - -$(RM) -r $(BUILD) - -distclean: clean - -$(RM) -f $(JARFILE) From c1762b3a36d6bea4d40a9ec7c57ccc653a8e4b3e Mon Sep 17 00:00:00 2001 From: Niclas Finne Date: Fri, 13 May 2022 23:23:16 +0200 Subject: [PATCH 6/6] Updated README to use 'ant' instead of 'make' --- README.txt => README.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) rename README.txt => README.md (75%) diff --git a/README.txt b/README.md similarity index 75% rename from README.txt rename to README.md index 5483169..7044e71 100644 --- a/README.txt +++ b/README.md @@ -1,40 +1,39 @@ -* MSPSim version 0.9x +### MSPSim version 0.9x MSPSim is a Java-based instruction level emulator of the MSP430 series microprocessor and emulation of some sensor networking platforms. Supports loading of IHEX and ELF firmware files, and has some tools for monitoring stack, setting breakpoints, and profiling. -* System requirements +### System requirements -You need a recent Java to run MSPSim. Java SE 1.7 or newer is recommended. -The current version of MSPSim also requires make or ant for compiling. +You need a recent Java to run MSPSim. Java 11 or newer is recommended. +The current version of MSPSim also requires ant for compiling. -* Building MSPSim +### Building MSPSim You will build MSPSim by typing ->make +> ant -* Running examples +### Running examples Run the default example on the ESB node emulator by typing: ->make runesb +> ant runesb (here you can pass the PIR with the mouse and click on the user button to get reaction from the example application). - Run the default example on the Sky node emulator by typing: ->make runsky +> ant runsky (this is a leds-blinker only and does not react to any mouse movements or button clicks). +### Main Features -* Main Features - Instruction level emulation of MSP430 microprocessor - Supports loading of ELF and IHEX files - Easy to add external components that emulates external HW @@ -55,8 +54,9 @@ Run the default example on the Sky node emulator by typing: - Basic A/D subsystem (not complete) - Watchdog -* Limitations of the emulation (some of them) on version 0.9x -- currently the emulator runs as if it can use all memory as RAM +### Limitations of the emulation (some of them) on version 0.9x + +- Currently, the emulator runs as if it can use all memory as RAM (e.g. flash writes, etc not supported) -- no DMA implementation -- timer system not 100% emulated +- No DMA implementation +- Timer system not 100% emulated