繁体   English   中英

使用C ++字符串标准的STM32F103C8T6

[英]STM32F103C8T6 using C++ string std

我在STM32F103C8T6中使用了C ++ Eclipse,其字符串类型来自std。 我收到如下错误:“区域ROM溢出5980bytes”。

#include "stm32f1xx.h"
#include <string>


std::string a;

int main(void)
{


    for(;;);
}

有什么办法可以解决这个微控制器?

STM32F103C 8 T6仅具有64 KB的闪存。 您的程序不合适。

查看链接器输出 ,了解您需要多少。 如果可能,您可以获得B版本。
您还可以查看是否可以启用未使用的对象删除 由于可能没有甚至不需要的字符串库函数。

stm32f103c8t6

*我在猜测您正在使用GNU-ARM。

我认为这个问题已经在这里得到了大多数回答,但是我想从更高的角度讲几句话,这可能有助于其他一些人走同样的道路。

当然,您可以将C ++用于微控制器项目,但您要避免使用大多数C ++范例。 想要成为“ C +”; 比面向对象编程(OOP)端更接近C。 特别要避免大多数实例化的事情,例如一般的C ++对象。 并避免占用代码内存的范式,例如模板等。

您可以设置一个malloc(),因此有一个C ++ new / delete,但是大多数时候您都希望结构化代码,因此几乎没有动态分配。 不仅因为这些增加了更多的代码空间,而且您最终将只使用更多有限的20kb RAM。 为了进行动态分配,您必须具有一些最小的链接列表或类似的列表来维护RAM等模块。

确实,实际上,您可能只想使用C ++令人信服的功能的一部分,例如放宽变量范围限制等。

您可能只想使用可以从ST网站和/或其他地方获得的最少的C库。

对于便宜的低成本微控制器项目,其技术之一就是缩小。 当然,取决于您的项目范围。 对于具有许多功能的复杂事物,可能很难将所有内容都放入64kb的ROM空间。

其他一些选择包括使用功能更强大的微控制器和/或添加I2C EEPROM,以获取更多代码空间(您可能必须为了执行代码使用而在RAM中进行分页和出页)。

作为一种策略,您可能只想利用堆栈(本地静态大小的字符数组)来使用和操作动态字符串,并使用旧的不错的C库类型,例如strcpy(),sprintf()等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM