STM32F103C8T6使用C ++ string std

问题描述 投票:0回答:2

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

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


std::string a;

int main(void)
{


    for(;;);
}

有没有办法在这个微控制器上修复它?

c++ string std stm32
2个回答
1
投票

STM32F103C8T6仅具有64 KB的闪存。你的程序不合适。

看看linker output,看看你需要多少钱。如果可能,您可以获得B版本。 您还可以看看是否可以启用removal of unused objects。由于可能存在您甚至不需要的字符串库的功能。

stm32f103c8t6

*我猜你正在使用GNU-ARM。


1
投票

我认为这个问题已经在这里得到了很多回答,但我想在更高层次的观点中提出几个词,这可能有助于其他一些人沿着同样的道路走下去。

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

你可以设置一个malloc(),所以有一个C ++ new / delete但是大多数时候你都想构建你的代码,所以旁边没有动态分配。不仅因为它们增加了更多的代码空间,而且最终只会使用更多有限的20kb RAM。只是要进行动态分配,你必须有一些最小的链表或类似的来维护RAM等的块。

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

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

对于廉价的低成本微控制器项目,其中一个技术是缩小。当然,这取决于您项目的范围。对于具有许多功能的复杂功能,您可能很难在64kb闪存ROM空间中安装所有内容。

其他一些选择是获得一个蜂窝式微控制器和/或添加一个I2C EEPROM以获得更多的代码空间(您可能需要进出RAM来运行代码使用)。

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

© www.soinside.com 2019 - 2024. All rights reserved.