代码计算得到的float型结果可以保存在FLASH内存中吗?

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

我正在使用 Attiny1616 和 Microchip Studio。

我想将代码计算得到的float类型结果存储在FLASH存储器中。

我研究过 PROGMEM,但 PROGMEM 不支持浮点数据类型。

所以我尝试使用

snprintf
dtostrf
将float类型结果转换为char类型数据并保存,但没有成功。

这是我的 C 代码。

#include <avr/io.h>
#include <avr/pgmspace.h>
#include <stdio.h>
#include <stdlib.h>

int main(void) {

    const char test[] PROGMEM = "Hello, world!";

    char buf[5] = "";
    float cal_result = 10.83;
    
    //dtostrf(cal_result, 5, 2, buf);
    snprintf(buf, 6, "%f", cal_result);

    const char out[5] PROGMEM = {buf[0],buf[1],buf[2],buf[3],buf[4]};
    
        while(1){   
    }

}

提前谢谢您。

c avr avr-gcc progmem
1个回答
0
投票

你想做的事情是不可能用

PROGMEM
实现的。

PROGMEM
是一个编译器指令,可防止使用
RAM
存储常量值。相反,程序每次需要时都会直接从闪存读取它(我在这里忽略优化)

参见数据表

上的6.2内存映射
  • 变量将存储在
    0x3800 – 0x3FFF
    范围内
  • 一个
    PROGMEM
    常数值将存储在
    0x8000 – 0xBFFF
    范围

如果你想存储程序运行期间计算的数据,你将不得不使用:

  • eeprom(空间小,非常容易使用),请参阅avr/eeprom.h
  • flash(空间较大,使用困难(只能按页写入,写入次数有限),使用危险(一不小心就会把你的程序抹掉)
© www.soinside.com 2019 - 2024. All rights reserved.