单片机:msp430fr2111 编译器:CCS v8.3.0 因为我最近在写一个关于msp430fr2111单片机的程序,写着写着,系统就提示我爆了FRAM内存。最后检查出来是因为一串有小数的计算公式捣的鬼:get = get/65535.0*4.096*10000; 可能因为是小数占的位数太多了,就提示了爆内存。之后我想了其他方式解决。可是系统一直会在我这一行算法提示一行信息:recommend moving them to RAM during run time or not using as there are processing/power intensive.
因为以前都是单纯地写程序,没考虑过内存的分配问题。求大佬指点一下。
此帖出自
小平头技术问答
你的所谓“内存分配"问题比较笼统和难以回答。这个是编程常规问题,与编译器也并无大的关联。
单片机的存储空间大概就分为两类,ROM(FLASH)类和RAM类,FRAM虽然比较特殊根据配置既可做ROM也可以做RAM,但是不影响讨论。
ROM用来存放指令、常量数据、变量的初始化值等内容。
RAM用来存放变量,函数调用时寄存器内容的临时保存。变量还分为全局变量和静态变量,一直存在于RAM中,自动变量在函数调用时分配,函数结束后就释放了。手动申请内存malloc一般在小容量单片机中很少用。
现在你的问题是,貌似ROM和RAM有点分不清,在单片机领域一般内存就是指RAM,但是你的描述,应该是ROM不够的问题。另外
这句提示,其实跟内存够不够并无关系,这个只是低功耗一些建议。
所以你要清晰脑海里的内存是指什么,通常C语言的语句和字面量是占用ROM的,变量占用RAM,但是变量的非0初始化值也会存放在ROM中。函数的嵌套调用会消耗RAM,但是函数调用消耗内存的问题在编译时一般检测不出来,在程序运行的时候才能出现。调用库函数肯定会占用ROM,同时浮点数的操作,对于单片机来讲,会比占用存储空间,因此小容量单片机尽量不要有浮点数的运算和(尤其)打印(printf类函数的%f格式符)。
一周热门 更多>