如何在Arduino中转储堆栈

How do I dump my stack in Arduino?

本文关键字:转储 堆栈 Arduino      更新时间:2023-10-16

我正在寻找一种方法来转储我的arduino堆栈。我知道有一个堆栈指针(SP)可用,我现在尝试的是:

char* stack = (char*)SP;
int counter = 0;
strncpy(c, &stack[counter], 1);
while(counter < 200)
{
  counter++;
  strncat(c, &stack[counter], 1);
}
Serial.print(c);   

我没有得到任何像堆栈一样的东西,所以我不知道我做得是否正确。请帮忙!

uint8_t stackArray[30];
void createStackDump() 
{
  volatile uint8_t* mSP = (uint8_t*)SP;
  for (int i = 0; i < 30; i++) 
  {
    stackArray[i] = *mSP;
    mSP++;
  }
}

堆栈上的调用地址首先是LSB,因此LSB具有更高的堆栈地址。它们被向右移动1位。

uint8_t * tStackPtr = (uint8_t *) SP;
// We have 19 pushs and pops for this function so add 19+1
uint16_t tPC = *(tStackPtr + 20);
tPC <<= 8;
tPC |= *(tStackPtr + 21);
tPC <<= 1;
Serial.print(F("PC=0x"));
Serial.println(tPC, HEX);