ota: adjust memory parameters for stable operation

This commit is contained in:
irriden
2023-07-01 23:42:21 +00:00
parent d61bf9f910
commit dde735e2ce
2 changed files with 8 additions and 5 deletions

View File

@@ -225,8 +225,9 @@ pub fn make_event_loop(
fn restart_esp_if_memory_low() { fn restart_esp_if_memory_low() {
unsafe { unsafe {
let size = esp_idf_sys::heap_caps_get_free_size(4); let size = esp_idf_sys::heap_caps_get_free_size(4);
log::info!("Available DRAM: {}", size); let threshold = 65000;
if size < 65000 { log::info!("Available DRAM: {}, Restart Threshold: {}", size, threshold);
if size < threshold {
log::info!("Restarting esp!"); log::info!("Restarting esp!");
esp_idf_sys::esp_restart(); esp_idf_sys::esp_restart();
} }
@@ -274,7 +275,9 @@ fn handle_control_response(
control_res = control_res =
ControlResponse::Error(format!("OTA update cannot launch {:?}", e)) ControlResponse::Error(format!("OTA update cannot launch {:?}", e))
} else { } else {
thread::spawn(move || { // A 10kB size stack was consistently overflowing when doing a factory reset
let builder = thread::Builder::new().stack_size(15000usize);
builder.spawn(move || {
led_tx.send(Status::Ota).unwrap(); led_tx.send(Status::Ota).unwrap();
if let Err(e) = update_sphinx_key(params, led_tx) { if let Err(e) = update_sphinx_key(params, led_tx) {
log::error!("OTA update failed {:?}", e.to_string()); log::error!("OTA update failed {:?}", e.to_string());
@@ -282,7 +285,7 @@ fn handle_control_response(
log::info!("OTA flow complete, restarting esp..."); log::info!("OTA flow complete, restarting esp...");
unsafe { esp_idf_sys::esp_restart() }; unsafe { esp_idf_sys::esp_restart() };
} }
}); }).unwrap();
log::info!("OTA update launched..."); log::info!("OTA update launched...");
} }
} }

View File

@@ -16,7 +16,7 @@ use std::io::BufWriter;
use std::io::Write; use std::io::Write;
use std::sync::mpsc; use std::sync::mpsc;
const BUFFER_LEN: usize = 3072; const BUFFER_LEN: usize = 512;
const UPDATE_BIN_PATH: &str = "/sdcard/update.bin"; const UPDATE_BIN_PATH: &str = "/sdcard/update.bin";
fn factory_reset() -> Result<()> { fn factory_reset() -> Result<()> {