I'm totally confused as to what you're trying to to do? - but you seem to be making it vastly more complicated than it need be?. But there seems to be zero reason for writing to non-volatile memory?.
If I'm using two PIC's (or one PIC, and say an ESP32 etc.) I simply connect them via a two wire serial (RS232 style) interface.
Both devices are sat looking to receive serial data, and doing anything else that needs doing in the meantime - one could be updating the display, the other could be reading sensors. So the master could send a command to the slave, asking for a specific reading (for example battery voltage), the slave returns the value, and the master processes it (if needed) and displays it accordingly. Likewise, the slave may discover an event that the master needs to know about - like the battery is below acceptable voltage, and it can then send a command to the master informing it of the issue, and the master can take appropriate action, such as shutting the unit down.
A big advantage of this type of connection (other than it's simplicity) if that you can test each part individually using a terminal program on a PC.
One of my current two processor projects uses a PIC and an ESP32 with a SIM800 modem - the commands received from the ESP32 are these:
C:
// list of incoming commands to search for
#define NumCommands 13
char master_list[NumCommands][10] = {
"READING=",
"SIGNAL=",
"NETWORK",
"APNOK",
"BATTERY=",
"SHUTDOWN=",
"NETFAIL",
"APNFAIL",
"ESP32=",
"OK",
"REPLY",
"IMEI=",
"ERROR="
};
Some are single words (NETWORK, OK etc.), while ones that end in '=' have values, one or more, delimited with commas, attached to them. Once a full command (terminated by CR/LF) is received, the data is parsed and processed accordingly.
The serial ports are all interrupt driven, and use a circular buffer large enough to hold more than the largest anticipated data, so there's no issue with it missing any commands.
The slave operates in a similar manner, with a list of available commands to look for.
The PIC part does display, keyboard reading, and battery charging (including the actual buck PWM charging generation), the ESP32 does all the modem related stuff. Oh, and the PIC also stores any altered settings in EEPROM, so that next time you turn it ON, it comes on set to how you left it - it's a nice feature of most PIC's.