We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hello,
I am working on a project based on a C8051F353 from Silabs. This project needs some non-volatile variables to be stored, using internal Flash. I manage to read, write, and erase data to flash BUT: -a write needs an erase, and erase can't be performed on less than a page All data can be kept, by reading the concerned page, modify the requested data, erasing the page, and write the modified copy.
Since I have declared my non-volatile data into the main program as global variables with "code" prefix, this data is located into program in Flash. When I want to write to this data, I am so erasing and rewriting page of running program, which results in reset of device.
I would like to be able to place non-volatile data into a specific page appart from code, into flash. So that I won't affect program when updating data. I think the use of SEGMENTS would be the best for me, but I can't manage to place a specific segment in a specific page, but just at the end of code.
I somebody have a solution, or can give me a direction to fix this problem.
Thank you in advance.
you do not want to do that because that may lead to losing the config data when upgrading the code It is not a problem for me since the device should be programmed just one time, and we have parameters in a database. The non-volatile parameters are modified by code via UART communication, and without updating the code.
Placing them to the last page (I think about using absolute location using ^0x1dFF as adress to specify the last adress of the last page) seems to be the best idea.
How am I sure that the code won't overwrite this dataspace? Will the linker inform me about that?
Thank you Erik.
the device should be programmed just one time famous last words
Placing them to the last page (I think about using absolute location using ^0x1dFF as adress to specify the last adress of the last page) seems to be the best idea. beware of the special bits in the last page, refer to the flash map in the datasheet. Look up page size vs. start of config area.
How am I sure that the code won't overwrite this dataspace? Will the linker inform me about that? the linker has a parameter "size of CODE memory" again, I do not know how to initialize it in the IDE. This, will keep the code out of the last bit of memory.
Erik
beware of the special bits in the last page You're right. I noticed few time after my post that my flash was write protected. The last byte of the last page is a security byte and any erase request on this page generates a reset. So I mustn't use the last page for my non volatile variables.
I'm going to look for the size of code parameters.
Thnak you.