PIC32are MPS and do not have hardfaults.  That is a Cortex-M thing.  So DSidranes tip does not apply and up_hardfault should not exist for PIC32.  I spend too much time with ARMs and a forget about the rest of the world.

So nevermind... sorry.

On 2/21/2021 5:11 PM, Nathan Hartman wrote:
On Sun, Feb 21, 2021 at 11:18 AM Gregory Nutt <spudan...@gmail.com> wrote:
A breakpoint on up_assert should catch any early crashes as you
describe.  There is a cool debug tip here if you hit the breakpoint:
*https://nuttx.events/wp-content/uploads/2019/11/DSidrane_nx2019.pdf*
Unfortunately that appears to be a broken link now.

However, the cool debug tip that Greg is referring to is, I think, the
following... (I have this written in my notes from a previous
hard-fault debugging session.) Note that it is applicable to ARM --
you may need to adjust for MIPS.

* Set up breakpoints at up_hardfault() and up_assert().

* When the breakpoint is reached, set the PC (program counter
   register) equal to the LR (holds the return address for a function
   call).

* Switch to assembly view.

* Single-step (by assembly instructions) to the "bx lr" instruction
   in do_irq(). That should take you to the line of code where the hard
   fault occurred.

A few more thoughts:

On ARM platforms, one of the common causes of hard faults is
forgetting to turn on the clocking to a peripheral and then trying to
access that peripheral.

I haven't worked with PIC32 in a few years but I seem to recall that
any hard faults I experienced there were caused by unaligned accesses.

Hope this helps,
Nathan

Reply via email to