-
Notifications
You must be signed in to change notification settings - Fork 403
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Unable to write large File #119
Comments
I cannot find which spiffs_page_data_check you refer to, probably because you're running an older version. From the logs it looks like you create an empty file, then moves the offset to 6, and finally writes the 15516 bytes. spiffs cannot handle offset moving beyond file end so you should have got an error from the lseek in the first place. -10015 is a fatal error and indicates a broken file structure, i.e. "it should not happen" :) |
Ok, this is interresting. I'm using version 3.6 which is the last released version of SPIFFS. I thought that seeking over the file's end might be the problem so I created a Test where I seeked to position 6 in a newly created File and wrote 10 Bytes. This worked. Obviously seek is not failing in my case and even returnes the correct number of bytes I wanted to skip (in my case 6) The failing function call resides on line 1312 in file spiffs_nucleus.c in function spiffs_object_append. A Quick test showed that creating the file without skipping any bytes worked. Is it possible to fix the seek command so that it returns the correct number of skipped bytes? This would allow to detect that the file is not long enough and then e.g. zero out the missing bytes. BTW: Thanks for the quick response! |
Ah, you've found a bug! The seek function returns error when seeking beyond end, which is expected. But for for virgin files that have never been written to, seek just passes through and skips all verification. There are problems having a fully posix-compliant seek in spiffs wrt the nature of spi flashes and the spiffs structure. If one really wants gaps in files, as in your case, I'd recommend writing six bytes worth of 0xFF instead of seeking. Adding gaps will put a lot of extra complexity in the code. Thanks for finding this! I'll add a report for this and fix it when I find the time. Cheers / Peter |
I've been poking around with spiffs for a while now and everything seemed to work properly so far.
Now I try to integrate spiffs into our product and can't write a large (15516 bytes) file. It's somewhat special that I try to write this amount of data with an offset of 6 bytes.
But when I checked this does indeed work when using a smaller file size.
The Error I get is -10015 which I get because I pass the maximum value of data_page (0xFFFF) in spiffs_page_data_check on line 1324 of spiffs_nucleus.c.
Unfortunately I haven't been able to figure out it's calculation. Some insight into the calculation of this data_page would be much appreciated.
SPIFFS outputs the following on mount:
mount trace
And when I try to write my Data, I get the following output:
read/write trace
This resembles reading a File called "00" which contains data on the available files and then trying to write 15516 Bytes.
The text was updated successfully, but these errors were encountered: