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.

[参考译文] 编译器/msp430g2553:IAR版本6.40

Guru**** 2595805 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/642548/compiler-msp430g2553-iar-version-6-40

部件号:MSP430G2553

工具/软件:TI C/C++编译器

大家好。

我已通过IAR 6.40 版本对MSP430进行编程。
我在代码中有一条错误消息,在执行工作期间执行了多次:


void lcd_ShowLong(签名长val,无符号char Xcoord,无符号char Ycoord,布尔isClearToEndOfLine )

 unsigned char resMas[lcdColCount];
 unsigned char *res =&resMas[0];//致命错误
...
}


,一次它会导致显示标题为“驱动程序”的错误消息:“致命错误:Plain Pointer ShrAssisn Session aborted!”。
调试日志显示“堆栈'粘性'(当前内存:0x396)的堆栈指针超出堆栈范围(内存0x3B0到内存0x408)”,因此我已将堆栈大小(常规选项->堆栈/堆->“堆栈大小”和“Data16堆大小”)增加到100,这没有任何影响。

请帮助!

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

    在这种设计下,如果在运行时不对当前可用的堆栈数量选中lcdColCount,则 将永远面临着吹扫堆栈的风险。

    我建议最好使resMas[]成为一个可 在编译时确定大小的静态函数,或者如果您愿意的话,也可以在函数中使用malloc() ( 我不知道 IAR编译器处理 函数的能力如何 )。 或者,在任何情况下,都不需要占用大量堆栈空间。

    那么islcdColcount实际上是一个const,或者在任何情况下都是一个永远不会有很大的值?

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

    lcdColCount是定义常量:
    #define lcdColCount 16.

    我已经将代码转换为:

    void lcd_ShowLong(签名长val,无符号char Xcoord,无符号char Ycoord,布尔isClearToEndOfLine )

    #define lcdColCount_tmp 16.
    unsigned char resMas[lcdColCount_tmp];
    unsigned char *res =&resMas[0];//致命错误也是

    ...

    }

    -结果也是相同的致命错误信息[带有标题“Driver”和文本“Fatal Error: Plain Pointer ShrAssisn Session aborted!"]。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您尚未解决根本问题。
    提示:关键字'static'