How to Store Float Calculation Results in FLASH Memory on PIC16F877A Using MPLAB X IDE?

Hello everyone, I’m currently trying to work on a project with a PIC16F877A microcontroller using MPLAB X IDE, and I’ve run into a bit of a challenge. I need to store the results of floating-point calculations in the program memory (FLASH). I thought the __flash qualifier might be the solution, but it turns out it doesn't directly support float data types.
To get around this, I tried converting the float results into strings using sprintf and ftoa, hoping to store them in FLASH that way. Unfortunately, it hasn’t worked as expected.

This’s my code:
#include <xc.h>
#include <stdio.h>
#include <stdlib.h>

void main(void) {
    const char test[] __flash = "Hello, world!";

    char buf[8] = "";
    float cal_result = 25.67;

    // ftoa(cal_result, buf);
    sprintf(buf, "%.2f", cal_result);

    const char out[8] __flash = {buf[0], buf[1], buf[2], buf[3], buf[4], buf[5], buf[6], buf[7]};

    while(1) {
        // Main loop
    }
}

Does anyone have any suggestions on how I can successfully store float results in FLASH memory on this microcontroller? Or is there a better approach for managing this type of data?
Solution
Storing floats directly in FLASH on the PIC16F877A is tricky , consider scaling your float to an integer and store it in FLASH. This saves memory and avoids the complexities of storing non-supported data types directly.
Was this page helpful?