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.

[参考译文] 编译器:C++的案例?

Guru**** 2604115 points
Other Parts Discussed in Thread: MSP430FR5969

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/628962/compiler-case-for-c

主题中讨论的其他部件:MSP430FR5969

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

我知道这是其中一个不好的问题。

我一直在用C语言编写代码,因为我怀疑你们中的许多人也是这样做的。 我一直在想,我使用许多全局结构来存储缓冲区,设置等。 这些也可以转换为类和对象,尽管显然需要跳过一些特殊的圈,以使类进入FRAM,并且仍然包含一些私有变量。 类中的类。 我看到的主要好处是使代码更易于管理,将各种函数集成为方法。 我不打算做多态主义等   

C++ 11似乎正在慢慢研磨到CC,除此之外,TI C++编译器是否能够生成良好优化的代码? 我是否可以在不破坏内容和/或消耗更多RAM/FRAM的情况下,将表现良好的C99代码编译为C++ 2003?

我为MSP430FR5969写这篇文章,它具有2kB ram和64KB FRAM。

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

    遗憾的是,TI没有涉及此主题的宣传材料。  尽管如此,我们欢迎社会上的其他人士分享他们的经验。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您的代码仍然是有效的C代码,则如果您将其编译为C++,编译器将生成几乎相同的代码。 只有少数几个点的C++不是C的严格超集,如果C99代码编译和链接时没有错误,您可能没有遇到任何这些差异。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我花了一些时间来查看C99与C++的常见问题,似乎有一个主要的功能指针问题。 否则,它是相当安全的。 我想您可以重写问题(更重要的是“坏”)“TI C++编译器是否有任何优点?”。 写作让我的指尖燃烧 如果您不相信MSP430系列能够生成良好的代码,我想您不会拥有它。

    不管怎样,我提到了必须让他们上幼儿班才能进入FRAM,但我想这不是真的,因为FRAM是以RW随机存取存储器开始的。 使用Flash执行相同的操作将完全不同。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我可以放心地告诉您,TI C/C++编译器在C++模式下编译C代码的能力与在C模式下编译C代码的能力一样好。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    CPP "Hello World"不适用于MSP430FR5969 RAM/FAM。 我想这回答了我的问题,即C++是否会给我的MSP430项目带来好处。  

    pfft.(气动量)  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当你说‘CPP‘Hello world’,你是不是说你在使用cout? cout是通过深度嵌套模板实现的,这对任何编译器都是一个巨大的挑战。 您可以尝试使用优化级别-O4来查看它是否可以消除额外的代码。

    许多程序员使用C++不是为了实现面向对象的功能,而是为了通过更强的类型检查来实现“更好的C”。 如果您坚持使用更简单的C++功能,则不会出现C++开销。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的,这正是我所做的。 你必须编译hello world,它在规则中说明了这一点。

    我尝试了-O4,它确实减少了内存分配,但还不够。 请注意尝试为MPS430FR5969编译此文件?

    #include <iostream>
    main()
    std::cout <<"Hello World!\n";}
    
    

    编译器(链接器)的实际内容是:

    说明资源路径位置类型
    <a href="processors.wiki.ti.com/.../1.0099万">程序将不适合可用内存。对".cinit"区域大小0x66进行定位失败。 可用内存范围:lnk_msp430fr5969.cmd /test line 152 C/C++问题
    <a href="processors.wiki.ti.com/.../1.0099万">程序无法插入可用内存。对".const"大小0x2698部分进行定位失败。 可用内存范围:lnk_msp430fr5969.cmd /test line 161 C/C++问题
    <a href="processors.wiki.ti.com/.../1.0099万">程序无法插入可用内存。对".text"区域大小0x17d88进行定位失败。 可用内存范围:lnk_msp430fr5969.cmd /test line 168 C/C++问题 

    而这个.cinit和.const肯定应该已经安装到FRAM中。 最后的.text是一种非常令人厌恶的想法。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    前面的讨论是关于在C++模式下编译C99程序,而不是编译C++风格的“Hello world”。 我坚持我的主张:如果您的代码仍然是有效的C代码,如果您将它编译为C++,编译器将生成几乎相同的代码。

    在嵌入式设备上使用C++时,一定要避免使用cout等。 这并不意味着您不能使用某些C++功能来获得优势。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [Quote user="Olli Mannisto")最后的.text是一种非常讨厌的想法。  使用std::cout时,大的.text可能与未解决的缺陷 代码Gen-1458 的原因相同,“考虑拆分unified_locale.cpp以节省代码空间”。 在 TI ARM编译器上提出CodeGen-1458时,我怀疑相同的问题也适用于共享通用运行时库代码的TI MSP430编译器。

    例如,对于TI ARM v 17.3 0编译器,使用std::cout 的Cortex-M4“hello world”示例需要12.5373万字节的闪存,其中9.222万字节来自编译器运行时库rtsv7M4_T_le_v4SPD16_eabi.lib中的单个un特性 化_locale.obj对象文件。

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

    好像是这样的。 这是一个很小的错误报告,我们认为,所推荐的论坛主题已经死了。 我想没有解决方法吗?  

    不管怎样,“你好世界”已经过去了,你会很尴尬的。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    “不管怎样,“你好世界”倒了,让人尴尬…… "
    不是嵌入式,"非托管"系统,这几乎是意料之中的,这就是为什么传统的"你好,世界!" 对于嵌入式处理器,"闪烁"。

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

    是的,好吧... 它仍将是C++编程手册/指南的第一个示例。 我想对于那些开始超通气的CS专业人士来说,这是一个很好的现实检查,他们认为使用C++作为“C++”来使用类来改进模块化等等。 RAII? 不,谢谢。

    当然,wrt LED指示灯是闪烁的,但是C++不会在该指示灯上显示方向,除非您将对象设为“LED”并将其设为“闪烁”方法。

    printf对于调试过程非常有用。 有时调试器不是WYSIWYG。 我不知道其他C++标准库(或标准模板库)是否有与iostream类似的问题。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "printf对于调试过程非常有用"

    当然,这也是TI为使其工作而在机罩下进行如此多调试程序魔力的原因。