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.

[参考译文] Starterware/EK-TM4C1294XL:包含 C++库会导致 PC 甚至在进入 main 之前跳转到故障 ISR

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/602998/starterware-ek-tm4c1294xl-inclusion-of-c-libraries-causes-the-pc-to-jump-to-fault-isr-even-before-entry-to-main

器件型号:EK-TM4C1294XL

工具/软件:Starterware

您好!

在一个需要处理字符串并将字节写入 EEPROM 的简单非 RTOS 程序中、我想将我的 C 程序转换为 C++。

因此、我包含了#include

但是在启动调试器时、程序没有进入 main。

我在入门部分进行了调试。 我发现、在用户定义结构和变量时、prgram 崩溃进入故障 ISR。  

但是在删除 iostream 的包含时、这种行为消失了、程序执行正确。

因此、我不知道为什么我将堆栈大小增加到1024、并随意将堆大小设置为100000。

现在程序工作正常!

请帮助我了解问题以及迁移到 C++的正确方法

谢谢你

此致

帕维特拉

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    我发现另一篇与此类似的文章、其中当在启动中添加 iostream 时、程序在到达 main 之前挂起。 解决方案还是增加堆栈大小和堆。 至于为什么添加 iostream 会导致堆栈溢出、我不知道、需要进行一些调查。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Pavitra Ramanjama">因此我包含了#include [/报价]

    EEEP! 这有点像决定将装运箱中的物品装入汽车。 iostream 不是一个小的附加项。

    Robert

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

    [引用 USER="Pavitra Ramanjama]...所以我不知道为什么我将堆栈大小增加到1024并任意将堆大小设置为100000。

    现在程序工作正常![/quot]查看了的内存要求 使用 TM4C129NCPDT 将 TI v17.3.0编译器与以下简单测试程序结合使用:

    #include 
    
    int main (void)
    {
    std:::cout <<"Hello World"<< std::endl;
    
    返回0;
    } 

    若要查找栈使用情况、链接器会使用初始值填充栈、然后使用存储器浏览器查找最大使用情况。

    若要查找使用 RM48L952ZWT 中提到的未记录运行时库 memmap()函数的堆用法:如何进行堆分析 (但进行了修改以将堆用法存储在全局变量中以供调试器检查、而不是调用 printf)

    使用测试程序、结果为:

    a)进入 main()时,最大栈大小为416字节,使用了7300字节的堆。

    b)使用 std:::cout 后、最大栈大小仍然为416字节、使用了7564字节的堆。

    这就给出了使用 iostream 所需的堆栈和堆的概念、但实际使用可能更多地取决于使用的功能。

    为了便于参考、该项目随附 在 e2e.ti.com/.../TM4C1294_5F00_io_5F00_stream.zip 上

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

    [引用 user="Robert Adsett72]iostream 不是一个小的加法、实际上、我的上述简单示例使用了125373字节的闪存、其中 92220字节来自 编译器运行时库 rtsv7M4_T_le_v4SPD16_eabi.lib 中的单个 unified_locale.obj 目标文件

    在 "考虑拆分 unified_locale.cpp 以节省代码空间"的主题上存在尚未解决的编译器缺陷 CodeGen-1458。