I am working with a pair of Link2 development boards and MCUXpresso IDE V11.7.1. I'm using the newlib semihost library, which has stdio functionality. I've had no issues using fwrite() to write data to a binary file, so that I can monitor and plot values with an external program while debugging. I'm now trying to go the other way, but I can't get fread() to work. I've reduced the code to the simplest example I can think of, and it still doesn't read the file:
#include <stdio.h>
int main (void)
{
FILE *fp;
uint16_t writeData[5] = {1, 2, 3, 4, 5};
uint16_t readData[5] = {0, 0, 0, 0, 0};
uint16_t nData;
// write to file
fp = fopen("testFile.dat", "wb");
nData = fwrite(&writeData, sizeof(uint16_t), 5, fp);
fclose(fp);
// read from file
fp = fopen("testFile.dat", "rb");
nData = fread(&readData, sizeof(uint16_t), 5, fp);
fclose(fp);
}
I'm stepping through the code line-by-line. after writing the file, nData = 5 and the file contents are as expected "01 00 02 00 03 00 04 00 05 00" (observed using Windows PowerShell command format-hex "testFile.dat"). After reading the file, nData = 0 and readData is not changed.
I've checked if (fp = NULL) after calling fopen(), that's not the issue. I've tried calling ferror(fp) after each line in the read section, it always returns 0. I've also had no luck with the agruments readData, &readData[0], and readData[0] (doesn't make sense/seem necessary respectively, but I've seen these variations in some examples). The "required supporting OS subroutines" are the same for both fread() and fwrite(), so that's not the issue either.
Any suggestions?