diff --git a/MSP430_Flasher.cpp b/MSP430_Flasher.cpp index 7c713bc..178860e 100644 --- a/MSP430_Flasher.cpp +++ b/MSP430_Flasher.cpp @@ -55,6 +55,7 @@ /*****************************************************************************/ #include "StdUseCase.h" +#include /*****************************************************************************/ /* VARIABLES */ @@ -104,6 +105,20 @@ int main(int argc, char* argv[]) return RetState; } +static double tstamp, tstamp_old, tstamp_begin; +static void elapsed_time(char code) +{ + struct timeval time; + tstamp_old = tstamp; + //tstamp = clock(); + gettimeofday(&time, NULL); + tstamp = (double)time.tv_sec + (double)time.tv_usec*1e-6; + if (!code) { + return; + } + printf(" %c:%d msec ", code, (int)((double)(tstamp-tstamp_old)*1000)); +} + //***************************************************************************// //! \brief Main Flasher routine //! \param[in] argc Number of arguments in the argument string @@ -115,6 +130,8 @@ int main(int argc, char* argv[]) //! STATUS_ERROR: The initialization failed. int Flasher(int argc, char* argv[], sDefOptions_t* sOpt, sRTE_t* RTE) { + elapsed_time(0); + tstamp_begin = tstamp; int RetState = 0; //==ENABLE LOG===============================================================// @@ -144,11 +161,13 @@ int Flasher(int argc, char* argv[], sDefOptions_t* sOpt, sRTE_t* RTE) StdUseCase_ReadFWVersion(); StdUseCase_ReadHWVersion(); + elapsed_time('v'); //==POWER UP AND CONFIGURE===================================================// StdUseCase_PowerUp(&g_sOpt); StdUseCase_Configure(&g_sOpt); + elapsed_time('s'); //==GET DEVICE UNDER JTAG CONTROL============================================// @@ -159,14 +178,18 @@ int Flasher(int argc, char* argv[], sDefOptions_t* sOpt, sRTE_t* RTE) { StdUseCase_EemInit(); } + elapsed_time('c'); //==ERASE MEMORY (optional)==================================================// + StdUseCase_Erase(&g_sOpt); + elapsed_time('e'); //==PROGRAM & VERIFY / READ OUT DEVICE MEMORY================================// StdUseCase_ReadWrite(&g_sOpt, &g_RTE); + elapsed_time('p'); //==RESET DEVICE=============================================================// @@ -187,6 +210,8 @@ int Flasher(int argc, char* argv[], sDefOptions_t* sOpt, sRTE_t* RTE) //==DISPLAY INITIALIZATION RESULTS===========================================// + tstamp = tstamp_begin; + puts("\n"); elapsed_time('>'); StdUseCase_DisplayResults(argc, argv, &g_sOpt); //==RUN TO BREAKPOINT(S)=====================================================// @@ -195,7 +220,6 @@ int Flasher(int argc, char* argv[], sDefOptions_t* sOpt, sRTE_t* RTE) } //===========================================================================// - return (RetState); } diff --git a/Makefile b/Makefile index 57dec9a..3c6476f 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ CC=g++ -CFLAGS=-std=c++0x -I./Inc +CFLAGS=-std=c++11 -I./Inc -m32 LDFLAGS=-L../ -lmsp430 SOURCES=MSP430_Flasher.cpp Support.cpp StdUseCase.cpp OBJECTS=$(SOURCES:.cpp=.o) diff --git a/StdUseCase.cpp b/StdUseCase.cpp index 24c39ec..f48bece 100644 --- a/StdUseCase.cpp +++ b/StdUseCase.cpp @@ -40,9 +40,12 @@ /*****************************************************************************/ #include "StdUseCase.h" +#include #ifndef WIN32 #include +#include +#include #endif using namespace std; @@ -207,6 +210,20 @@ bool Event::wait(unsigned int msTimeout) /* FUNCTIONS */ /*****************************************************************************/ +static double tstamp, tstamp_old, tstamp_begin; +static void elapsed_time(char code) +{ + struct timeval time; + tstamp_old = tstamp; + //tstamp = clock(); + gettimeofday(&time, NULL); + tstamp = (double)time.tv_sec + (double)time.tv_usec*1e-6; + if (!code) { + return; + } + printf(" (%d ms) ", (int)((double)(tstamp-tstamp_old)*1000)); +} + /*****************************************************************************/ //! \brief This function initializes the debug interface. //! \param[in] sOpt Pointer to the default options @@ -691,6 +708,7 @@ void StdUseCase_GetDevice(sDefOptions_t* sOpt) { char c = 0; int k = 0; + elapsed_time(0); int targetID = DEVICE_UNKNOWN; if(sOpt->pcDeviceName != NULL && (strcmp(sOpt->pcDeviceName, "Unknown") != 0)) @@ -806,6 +824,7 @@ void StdUseCase_GetDevice(sDefOptions_t* sOpt) } } } + elapsed_time(' '); } /*****************************************************************************/ @@ -924,6 +943,7 @@ void StdUseCase_DisplayResults(int argc, char* argv[], sDefOptions_t* sOpt) //! \param[in] sOpt Pointer to the option struct void StdUseCase_Erase(sDefOptions_t* sOpt) { + elapsed_time(0); // if memory should be erased without writing afterwards if(sOpt->pcFile == NULL && (inst_state & ERASE_NO_WRITE) && strcmp(sOpt->pcEraseType, "ERASE_TOTAL") && strcmp(sOpt->pcEraseType, "ERASE_USER_CODE")) { @@ -961,6 +981,7 @@ void StdUseCase_Erase(sDefOptions_t* sOpt) } } } + elapsed_time(' '); } /*****************************************************************************/ @@ -1119,10 +1140,12 @@ void StdUseCase_ReadWrite(sDefOptions_t* sOpt, sRTE_t* RTE) } } + elapsed_time(0); Print_N_Log(REPORT_MSG,"* Loading file into device..."); - + fflush(stdout); // program target code into MSP430 memory without verify Ret_ProgramFile = MSP430_ProgramFile(sOpt->pcFile, lEraseType, false); + elapsed_time(' '); if(Ret_ProgramFile != STATUS_OK) { @@ -1166,6 +1189,7 @@ void StdUseCase_ReadWrite(sDefOptions_t* sOpt, sRTE_t* RTE) StdUseCase_Exit(EXIT_CONFIGURE, 0); } } + elapsed_time(' '); } /*****************************************************************************/