1.6 KiB
Save and Load programs
When we have entered a program, we need to be able to save that program so that when the device is restarted, the program loads and runs.
The primary mechanism for this is the routine called jsfSaveToFlash found in jswrap_flash.c.
The signature for this is:
void jsfSaveToFlash(JsvSaveFlashFlags flags, JsVar *bootCode)
It assumes that the program will be saved starting at FLASH_SAVED_CODE_START. The first
word (4bytes) is the amount of boot code saved. The second word is the end address of
decompressed JS code. The boot code is saved at FLASH_SAVED_CODE_START+8. The saved
state starts at FLASH_SAVED_CODE_START + 8 + boot_code_length.
In the following table, the offsets are relative to FLASH_SAVED_CODE_START
| Name | Address offset +------------------------+----------------------- | boot_code_length | 0 | | 4 | Boot code | 8 | Saved state | 8 + boot_code_length
FLASH_MAGIC is 0xDEADBEEF.
FLASH_MAGIC_LOCATION is FLASH_SAVED_CODE_START + FLASH_CODE_LENGTH - 4.
FLASH_CODE_LENGTH is 65536.
The ESP32.py file describes the flasg details in a section called saved_code:
'saved_code' : {
'address' : 0x100000,
'page_size' : 4096,
'pages' : 16,
'flash_available' : 960, # firmware can be up to this size
}
jsfSaveToFlash_writecb(unsigned char ch, uint32_t *cbdata)
Write 1 byte specified by ch to flash.
jsfSaveToFlash_checkcb(unsigned char ch, uint32_t *cbdata)
Validate that the character supplied can be read back.
bool jsfFlashContainsCode()
Validate that the data contains code.