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.

[参考译文] MSP430FR2676:如何设置合适的堆栈大小

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1065023/msp430fr2676-how-to-set-a-proper-stack-size

器件型号:MSP430FR2676

大家好、

上图显示了上图中客户应用工程的堆栈空间使用情况:

1. main 函数 main 占用126个字节的空间;

ADC_ISR 是一个 ADC 中断、需要28个字节的执行空间;

3.__TI_auto_init_noinit_nopinit_hold_wdt 占用20个字节;

4._TI_decompress_none 占用20个字节;

5.__TI_decompress_lzss 占用32个字节;中止占用4个字节;

其中 ADC_ISR 可随时触发 main 中断、因此最小栈空间应大于126+28=154字节。

因此、客户有2个问题可能需要您的帮助:

1._TI_auto_init_noinit_npress_hold_wdt、__TI_decompress_none、__TI_decompress_lzss、abort 分别有什么作用? 它们何时运行? 是否有必要计算它们以计算最小堆栈使用量?

2.如果启用了2个中断、最小堆栈加上2个中断函数之和、还是2个中断函数中较大的一个?

您可以帮助检查此案例吗? 谢谢。

此致、

樱桃

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

    初始化例程在调用 main 之前运行、因此不应添加到所需的栈大小。

    中断服务例程在中断被禁用时启动、因此除非您在 ISR 内明确启用中断、否则嵌套中断的机会是零。 因此(2)的答案取决于您的代码。

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

    尊敬的 David:

    感谢您的支持。

    [引用 userid="496057" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/MSP-low-power-microcontroller-forum/1065023/msp430fr2676-how-to-set-a-proc-stack-size"]__TI_decompress_abort_abort_none[_decom_abort_abort]

    这3是否也会在初始化例程中调用?

    谢谢、此致、

    樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="496057" url="~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/MSP-low-power-microcontroller-forum/1065023/msp430fr2676-How--to-set-a-prof-stack-size/3940880#3940880"prisot/init/prise/prise/prisot/prise/pring3)这些例程是否也是调用例程中的引用?]

    _TI_decompress_none 和 _TI_decompress_lzss 在初始化时由编译器运行时库启动代码调用、以初始化全局变量。

    ABORT 处理异常程序终止、如果调用 ABORT、则只在循环中旋转。 如果出现以下任一情况、则可以调用中止:

    1. main()函数将返回。 如果 main()返回 exit(),则在调用 abort()时调用。 在嵌入式应用程序中,预计不会返回 main(),但可能会返回单元测试程序。
    2. 运行时 exit()或 abort()由应用程序直接调用,或者在应用程序调用的运行时库函数中出现错误时调用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    切斯特、您好!

    感谢您回答问题!

    伊斯天