【发布时间】:2015-07-23 19:35:44
【问题描述】:
MSP430G2553 只有 512 字节的 RAM 和 16KB 的 FLASH 存储器。在这个微控制器上,所有静态/全局变量都分配在 .bss 部分下的 RAM 中。所有局部变量都分配在 .stack 部分下的 RAM 中。所有动态分配的内存变量 (malloc) 都在 RAM 中的 .sysmem 部分下分配。
我需要此 MSP430 来跟踪通过 wifi 连接的设备。我有一个这样的结构:
struct dev
{
char type[20];
char ipAddress[13];
char name[20];
char status[1];
};
该结构为每个设备占用 54 字节的内存。我计划有 20 多个设备连接到这个 MSP430,并且需要有 20 个这样的结构。 20 x 54 字节 = 1080 字节。这对于 512 字节的 ram 来说显然太大了。
由于我有 16KB 的内存要使用,有什么方法可以将这些结构写入 FLASH 中?我对FLASH的理解是只读的变量。这些结构显然会被分配,所以它是读写的,我不确定是否可能。
当所有需要读写操作的变量都存储在 RAM 中时,我不太明白为什么 TI 会制造具有 16 KB FLASH 和只有 512 字节 RAM 的设备。好像很浪费空间。
我尝试在链接器文件中将这些部分 .bss/.stack/.sysmem 更改为 FLASH 并且 MSP430 不会像这样运行。我还尝试更改 RAM 和链接器文件的大小,并更改内存位置,再增加 512 个字节,但它也不会像这样运行。
我这里有什么选择吗?
【问题讨论】:
-
对所有内容进行编码,您不必将所有内容都保存为字符串,除了名称。
-
为什么需要20个字节来定义类型?
char类型可以引用256种不同的类型,具体可以在ROM(或FLASH代码)中详述,但应将该字段放在status字段旁边,或者将struct打包。无论如何char status[1]有什么意义? -
@Olaf 是同一个人使用
char status[1]; -
@WeatherVane:很公平:-}。 PC 程序员变得赤裸裸。
-
...或者在指定芯片之前没有弄清楚他的系统要求的人。
标签: c flash memory struct msp430