首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSP430 Ram溢出

MSP430 Ram溢出
EN

Stack Overflow用户
提问于 2015-07-23 19:35:44
回答 4查看 2K关注 0票数 0

MSP430G2553只有512个字节的内存,但是有16 of的闪存。在此微控制器上,所有静态/全局变量都在.bss部分下分配到内存中。所有局部变量都在内存中分配到.stack部分下。所有动态分配的内存变量(malloc)都在.sysmem部分下的内存中分配。

我需要这个MSP430通过wifi来跟踪连接的设备。我有这样一个结构:

代码语言:javascript
复制
struct dev
{
    char type[20];
    char ipAddress[13];
    char name[20];
    char status[1];
};

这个结构占用每个设备54个字节的内存。我计划让20+设备连接到这个MSP430上,并且需要有20个这样的结构。20x54个字节= 1080字节。对于512字节的ram来说,这显然太大了。

由于我有16 of的内存可使用,有没有办法将这些结构写入闪存?我对闪存的理解是只有只读的变量。这些结构显然会被分配,所以它是读-写的,我不确定它是否可能。

我不太明白为什么TI会制造一个拥有16 KB闪存和512字节RAM的设备,而所有需要读写操作的变量都存储在RAM中。好像是在浪费空间。

我尝试将这些部分更改为..bss/..stack/..sysmem,使其在链接器文件中闪现,MSP430不会像这样运行。我还试图改变RAM的大小和链接器文件中的内存位置,并添加另一个512字节,但它也不会像这样运行。

我在这里有什么选择吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-07-23 20:16:14

是的,你可以把数据写入闪存。当您想要更改数据时,唯一的问题就出现了。只能擦除大小为512字节的扇区。因此,您可以从闪存中提取两个闪存扇区,并为每个扇区中的10个设备存储数据。闪存可以像RAM一样读取,所以您不需要某种交换代码,只需用指针对每个设备条目进行寻址。最后一个问题是闪存有一个擦除周期的限制,这里大约有10000个周期。因此,随着时间的推移,您还可能需要编写代码来将数据分发到不同的扇区,这取决于预期更改的数量和所需的服务持久性。

票数 2
EN

Stack Overflow用户

发布于 2015-07-23 19:42:47

您可以将常量数据存储在闪存/程序内存中。如果您知道一些变量/数组在初始化后实际上不会改变,那么您可以在代码中将它们声明为static const,编译器会将它们放在.text部分中,这部分通常会用到闪存。如果您有不适合内存的动态数据..井。除非你能想到优化(比如在不同的时间为不同的事情重用相同的空间),否则你就完了。当然,如果您的部分对FLASH编写具有编程权限,则可以使用FLASH实现某种“交换”功能。但其实并没有那么简单。

为此:

我不太明白为什么TI会制造一个拥有16 KB闪存和512字节RAM的设备,而所有需要读写操作的变量都存储在RAM中。好像是在浪费空间。

你正在得到你所付的钱。每个微系统都有一个特定的应用范围。如果这个特定的微环境对您的应用程序不好,那么它可能不在这个范围内。

票数 2
EN

Stack Overflow用户

发布于 2015-07-23 20:35:20

在这个结构里你可以腾出一些额外的空间。

类型type字段可能不需要是char数组。您可以在所有可能的类型中使用一组符号常量。

IP地址也不需要作为字符串存储。假设是IPv4,您只需要四个字节。

status不需要大小为1的数组,一个简单的char就足够了。

现在你有了这样的东西:

代码语言:javascript
复制
struct dev
{
    uint32_t ipAddress;   // 4 bytes
    char name[20];        // 20 bytes
    char type;            // 1 byte
    char status;          // 1 byte
};                        // 2 bytes padding, total = 28 bytes

它仍然不足以容纳其中的20个到512字节的内存,但它比你拥有的更好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31596580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档