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.

[参考译文] 编译器/TMS570LS2.0216万:初学者STL和amp;字符串

Guru**** 2540720 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/577261/compiler-tms570ls20216-beginner-stl-string

部件号:TMS570LS2.0216万
主题中讨论的其他部件:HALCOGEN

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

大家好,

我在使用C++和STL方面遇到了困难。 我是嵌入式平台上使用SLT的新手。

我的第一次尝试只是使用字符串。 我编译了一个小的main。cpp:

#include <string>

void app_main (void){

std::字符串行;

 行=">Hallo\n";

 行+=" Weltwe geht's?!\n";

};

一切编译都很好,但是在第一次分配后,“LIN”没有包含有意义的数据,并且程序会执行“+=”。

我追溯到STL库中的某个位置...但我想我错过了什么?!

有人能帮忙吗?

顺祝商祺
Henrik。

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

    我假定您使用TI ARM编译器。

    我猜你没有足够的堆栈或堆栈。  就像实验一样,使堆栈和堆尽可能大。  更改链接程序选项--stack=size和--heap=size

    谢谢,此致,

    -George

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

    您好,George,

    感谢提示。

    是的,我正在使用CCSv7中的TI ARM工具作为从网站下载的最新版本。

    我将堆栈和堆增加到0x2000 (默认值为0x800) ,但使用了相同的beaviour。

    我走进去,发现“new_.cpp”(第51行)中的malloc调用是一个原因...但我认为我做了一些错误-不知道是什么。

    要更具体地了解我的设置:

    #我正在使用TMS570LS20 USB板

    #我只使用C进行了几次测试-一切都很完美(例如 我可以通过串行建立连接,并使用主机上的终端程序命令程序切换LED)

    #现在我设置了一个没有main的新项目-用HalCoGen生成HAL并插入我自己的<app_main()>

    #我自己的主菜单如下所示:

    #一切都很好

    #使用F6步进程序不从 第17行返回

    #停止程序将显示以下信息:

    有什么想法吗?

    此致
    Henrik。

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

    [抱歉-我的照片消失了-它们在RTF编辑器中可见]

    app_main.cpp (新行编号!)

    01 #include "app_main.HPP"
    02 #include <string>

    03 void app_main (void)
    04{
    05   标准::字符串行;
    06   行="Hello";
    07   如果(line="Hello"){
    08       行+="世界,您好吗?\n";
    09   }
    10   while (true);
    11 }

    该方案一直持续到 第08行。 在执行第08行时,程序如所述进行了刷新。

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

    所有<string>操作在发布编译器之前都经过了很好的测试。  这就是为什么我继续关注配置错误作为问题根源的原因。

    我不熟悉HalCoGen。  它是否支持C++?  还是仅C?  如果它支持C++,是否需要特殊的配置步骤?  考虑在 Hercules设备论坛中开始新的主题。  或者,如果您愿意,我可以将此主题移至该论坛。

    谢谢,此致,

    -George

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

    是的,我几乎认为故障在我这边-但在哪里?
    我做了一些测试,发现每次添加16个字符,程序都会被冲刷。

    我应该提供什么(以及如何)来获取更多提示?
    我是唯一使用std::string的用户吗?
    是否有人可以提供一个效果良好的项目,以便我可以复制和检查该项目?

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

    正如George假设的那样:存在配置错误!
    由于某种原因,我的HalCoGen未生成.sysmem条目。 我一加入就觉得一切都很好。

    但为什么在使用长度超过15个字符的字符串时会出现错误?

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

    您好,

    但为什么在使用长度超过15个字符的字符串时会出现错误?

    [/引述]

    要回答该问题:大多数字符串实现使用优化,其中短字符串存储在字符串对象中,以避免堆分配。 仅当字符串变大时才请求堆上的存储。 这很可能是为什么在您输入16个字符(最有可能是17个字符,因为_yer_字符串包含空终止以方便实现c_str())之前一切都正常工作的原因。

    Markus