diff options
author | Paul Selkirk <paul@psgd.org> | 2017-05-06 13:07:59 -0400 |
---|---|---|
committer | Paul Selkirk <paul@psgd.org> | 2017-09-07 18:11:01 -0400 |
commit | b2858c0eabeb2aba36ad7b5a964d52e51711c8df (patch) | |
tree | 608954d9d84342594c1bc998d8d652095af869ca /libraries/libprof/profil.c | |
parent | 358d038067b10330011ef4e6596ae37842d516fe (diff) |
Correct offset to get the PC.
A previous version of this code ran over the RTOS, where threads used the
Process Stack, while the SysTick interrupt used the Main Stack. Now
everything's on the main stack, so we need to account for 2 extra words
that SysTick_Handler pushes on the stack at entry.
Diffstat (limited to 'libraries/libprof/profil.c')
-rw-r--r-- | libraries/libprof/profil.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/libraries/libprof/profil.c b/libraries/libprof/profil.c index 07761dd..004af77 100644 --- a/libraries/libprof/profil.c +++ b/libraries/libprof/profil.c @@ -30,7 +30,7 @@ extern void set_SysTick_hook(void (*hook)(void)); /* sample the current program counter */ static void SysTick_hook(void) { - size_t pc = (size_t)((uint32_t *)__get_MSP())[5]; + size_t pc = (size_t)((uint32_t *)__get_MSP())[7]; if (pc >= prof.lowpc && pc < prof.highpc) { size_t idx = PROFIDX (pc, prof.lowpc, prof.scale); prof.counter[idx]++; |