This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR5043:MSP430运行时堆栈分析

Guru**** 2380660 points
Other Parts Discussed in Thread: MSP430FR5043
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1184420/msp430fr5043-msp430-runtime-stack-analysis

器件型号:MSP430FR5043

您好、TI、  

我目前正在项目中使用 MSP430FR5043 MCU。 我想在我的代码中执行运行时堆栈分析。 因此、我使用 IAR 嵌入式工作平台编写了以下代码。

我想填充整个堆栈的一些随机工作、并且需要在 while 循环的末尾进行检查、以确保堆栈内存不应在90%标记后发生变化。

//要检查的最后10%条目。
#define entries TO_CHECK_After 230

#pragma="CSTACK"

//立即将堆栈填充到 main 中。
静态 init_stack ()
  uint16_t   * p_begin  =__segure_begin ("CSTACACK");
  uint16_t const * const p_end =__段_end ("CSTACACK");

  while (p_begin!= p_end)
  {
    *P_BEGIN = 0xDEADu
    ++p_begin
  }

//在 main 中的循环末尾验证栈。
静态 verify_stack ()
  uint16_t const * const p_begin =_段_begin ("CSTACACK");

  uint16_t const * p_check_from = p_begin + entes_TO_CHECK_after
  uint16_t const * const p_end  =__段_end ("CSTACACK");

  while (p_check_from!= p_end)
  {
    TAF_ASSERT (0xDEADu!=* p_check_from);
    +p_check_from
  }
int main()
  init_stack();
  ///板初始化
  //应用程序初始化
  while (1)
 {
   。
   。
   。
   verify_stack();
  }
  返回0;


如果有上述任何其他情况、我需要了解更好的实施。 请告诉我 上面的代码是否最合适?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在典型的嵌入式应用中、起始堆栈地址将位于 SRAM 的顶部。 底部由用于管理堆的符号 sbrk 确定。 (malloc()和朋友)您的程序对该堆栈段毫不关心,并且很乐意将数据推送到堆栈外部。 在这种情况下、管理堆的代码将检查分配的内存是否会将 sbrk 扩展到堆栈指针之上、但我不会对其进行计数。

    通过检查源代码、您可以公平地了解所需的堆栈空间大小。 计算自动变量所需的空间大小、为每个函数调用添加更多空间(返回地址加上保存的寄存器以及可能不适合寄存器的参数)。 通过代码查找最深的调用树、或者至少查找需要最大空间的树。 (您可以使用类似于 Linux 程序 cflow 的内容来生成调用图。)  如果看起来有问题、请尝试找到可以节省参数空间的位置。 避免递归函数。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢你的帮助。 我认为我的运行时堆栈是在链接器文件中指定的 C_stack 段。 需要在定位图开始时写入、并在内部 while 循环结束时读取、以检查程序是否存在相同的字节或占用了相同的字节?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    很抱歉、我们无法及时为您的问题提供支持。 如果您仍需要帮助、请发布或打开新主题。