Dear Ozone expert,
I am debugging an application running on an nRF52840 Nordic chip with FreeRTOS embedded OS. I would like to locate where some memory corruption is occurring.
I have roughly located conditions happening before and after the corruption itself : so I know that the memory corruption is occurring after some function before_corruption() has been called and has returned, and before I call some SW triggered breakpoint on which the Ozone trace stops.
So, I have all the instruction trace when the corruption occurs, and I also know at which memory address the corruption is.
However, I don't know how I can use Ozone to find where that address was accessed causing the corruption.
Is there some way to run some playback of the instruction trace so as to find where the corruption occurred.
Also, I am pretty sure that the aggressor is not a FreeRTOS task, so it may be something like an ISR, a DMA write, or Nodic SoftDevice (not meaning that Nordic SoftDevice is bogus, but that my application at some point of time has wrongly configured it.
Any kind of help is most welcome.
I am debugging an application running on an nRF52840 Nordic chip with FreeRTOS embedded OS. I would like to locate where some memory corruption is occurring.
I have roughly located conditions happening before and after the corruption itself : so I know that the memory corruption is occurring after some function before_corruption() has been called and has returned, and before I call some SW triggered breakpoint on which the Ozone trace stops.
So, I have all the instruction trace when the corruption occurs, and I also know at which memory address the corruption is.
However, I don't know how I can use Ozone to find where that address was accessed causing the corruption.
Is there some way to run some playback of the instruction trace so as to find where the corruption occurred.
Also, I am pretty sure that the aggressor is not a FreeRTOS task, so it may be something like an ISR, a DMA write, or Nodic SoftDevice (not meaning that Nordic SoftDevice is bogus, but that my application at some point of time has wrongly configured it.
Any kind of help is most welcome.
The post was edited 1 time, last by vincentb1: I am trying to use data sampling, but that is not really easy : I know in advance that the corruption will happen at a couple of possible addresses. However, I don't know in advance which value is going to be overwritten, and on top of that the corruption condition does not last very long, so I need a rather high sampling frequency (I could catch it @10kHz, and the corruption lasted only 5ms, but I made one trial at 500Hz and I did not catch it). If I use a too high data sampling frequency, it seems that the instruction trace is not complete. ().