From: <rr...@ih...> - 2017-06-08 12:49:43
|
Kusti, As I understand what you want to do, I would set a break point and the beginning and end of the interrupt routines. Using the GUI interface, this is easily done by clicking on the diamond to the left of the instruction. (a second press will clear the breakpoint) in the source browser window. On the entry break you can either note the simulation time (this is in instruction cycles). Hit run again and you can then note the simulation time and take the difference. You could also use the stopwatch as suggested by Pete. It can be opened from the main window. The stopwatch and be zeroed on the first breakpoint and then read on the second. > Also would be great if I could create a breakpoint if a timing > violation is detected... You can do this using asserts. if you look at regression/wdt/wdt_16f88.asm from either a SVN download or on the SourceForge code listing, look at what is done with cycleCounter. Regards, Roy Rankin ----- Original Message ----- From: "Pete Restall" To: Cc: Sent:Tue, 06 Jun 2017 18:19:32 +0100 Subject:Re: [gpsim-devel] Seeking guidance Hello, Kusti. Sounds like 'stopwatch' is what you want: **gpsim> help stopwatch $00000000 A timer for monitoring and controlling the simulation. The units are in simulation cycles. stopwatch.rollover - specifies rollover value. stopwatch.direction - specifies count direction. stopwatch.enable - enables counting if true. **gpsim> And you can even embed this into your assembler, something like: .direct "c", "stopwatch" ; Should work anywhere .command "stopwatch" ; Only if 'coff.inc' is included I can never remember which instruction they 'attach' to in the COFF object (the one above or the one below ?) so I usually surround such statements with a 'nop', but that will skew your timings. But it's easy enough for you to figure out. You should be able to use assertions for your timing violations. In assembler, for example, something like: .direct "c", "symbol startTime=stopwatch" ; Do stuff here... .direct "c", "symbol stopTime=stopwatch" .direct "a", "(stopTime - startTime) < 10, 'Took too long !'" The '.direct "a"' statement also has a shortcut '.assert' if you include 'coff.inc'. I had trouble getting the short versions to work, however, so I just defined macros for them myself. I've also not tested the above, btw - it's just from memory, but it won't be far wrong. Also check out the 'log' command for tracing. Over and above manually reading the file, this can be quite powerful if you put a bit of work into it. For example, I recently did a project where I experimented with trying to leverage gpsim as an (automated) testing framework. Some tests I wrote needed to ensure that a delta-sigma bitstream generated from an interrupt would produce a given voltage with an RC LPF (LCD contrast). I logged the port changes to a text file and then used a simple C utility to extract the bit toggles and run them through an RC filter and check the output was in range: https://github.com/pete-restall/Cluck2Sesame/tree/master/src/fi rmware-tests/Platform/Lcd/Contrast The 'help' command in gpsim is your friend. It's a bit more up-to-date than the documentation, which is here: http://gpsim.sourceforge.net/gpsim.html.LyXconv/gpsim.html I hope this helps. Regards, Pete Restall -----Original Message----- From: eazycnc To: gps...@li... Subject: [gpsim-devel] Seeking guidance Date: Mon, 5 Jun 2017 22:11:31 +0300 Hope it is ok to ask here before I invest a lot of time on this. I would like to simulate a piece of code to infer exact timing of some details. The code is for PIC18F45K50, which is not supported by gpsim but I can easily compile it for 18F4550 which is. So that should not be problem. The code is self contained i.e. needs no external stimulus so that should be fine too. I suppose the timers are implemented and work? In my code I have one hi-priority interrupt and I use an other lo- priority interrupt as sw-interrupt. The main level loop feeds commands to the lo-priority interrupt which in turn feeds the hi-priority interrupt. Now I want to observe the high priority interrupt times (enter/exit) as well as the lo-priority interrupt enter/exit times (in cpu clock cycles). I suppose this is possible but having gone through the manual I'm not sure what would be the best way to this, especially as the issue I'm trying to track is no common so I may have to run the simulation for some time. Also would be great if I could create a breakpoint if a timing violation is detected... So any guidance would be highly appreciated. Oh, the code start (in the actual device) at 0x0800 because there is bootloader at 0x0000, from the manual I could not comprehend on first reading if I can set the PC to given address and start there. Of course I can insert a jump at 0x0000 to 0x0800 to circumvent this issue. wbr Kusti --------------------------------------------------------------------- --------- Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ gpsim-devel mailing list gps...@li... https://lists.sourceforge.net/lists/listinfo/gpsim-devel ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ gpsim-devel mailing list gps...@li... https://lists.sourceforge.net/lists/listinfo/gpsim-devel |