我正在使用 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){
}
}
提前谢谢您。
你想做的事情是不可能用
PROGMEM
实现的。
PROGMEM
是一个编译器指令,可防止使用 RAM
存储常量值。相反,程序每次需要时都会直接从闪存读取它(我在这里忽略优化)
参见数据表
上的6.2内存映射0x3800 – 0x3FFF
范围内PROGMEM
常数值将存储在 0x8000 – 0xBFFF
范围如果你想存储程序运行期间计算的数据,你将不得不使用: