<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">I guess it is possible, but probably easiest to just fallback to factory (rather than the other OTA partition).<div class=""><br class=""></div><div class="">I suggest something like if auto is inhibited, and we’ve had five further crashes within 10 seconds of boot, and we are running OTA, then switch back to factory.</div><div class=""><br class=""></div><div class="">Regards, Mark</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 9 Mar 2018, at 11:29 PM, Michael Balzer <<a href="mailto:dexter@expeedo.de" class="">dexter@expeedo.de</a>> wrote:</div><br class="Apple-interchange-newline"><div class="">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" class="">
<div text="#000000" bgcolor="#FFFFFF" class="">
Should we extend that logic to also cover firmware updates?<br class="">
<br class="">
I.e. if the system can't get to the stable state after disabling
auto init, we could try to activate the other ota partition with a
fallback to factory.<br class="">
<br class="">
Regards,<br class="">
Michael<br class="">
<br class="">
<br class="">
<div class="moz-cite-prefix">Am 09.03.2018 um 07:14 schrieb Mark
Webb-Johnson:<br class="">
</div>
<blockquote type="cite" cite="mid:7A59A1E7-410A-4B33-B326-E77851A00F1E@webb-johnson.net" class="">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" class="">
Looks good to me. Working well in simulations (module fault).
<div class=""><br class="">
</div>
<div class="">Regards, Mark.</div>
<div class=""><br class="">
<div class="">
<blockquote type="cite" class="">
<div class="">On 9 Mar 2018, at 6:54 AM, Michael Balzer <<a href="mailto:dexter@expeedo.de" class="" moz-do-not-send="true">dexter@expeedo.de</a>> wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8" class="">
<div text="#000000" bgcolor="#FFFFFF" class=""> Done:<br class="">
<br class="">
<tt class="">E (1226) housekeeping: Auto init inhibited:
too many early crashes (6)</tt><tt class=""><br class="">
</tt><tt class="">…</tt><tt class=""><br class="">
</tt><tt class="">OVMS > boot status </tt><tt class=""><br class="">
</tt><tt class="">Last boot was 71 second(s) ago</tt><tt class=""><br class="">
</tt><tt class=""> This is reset #6 since last power
cycle</tt><tt class=""><br class="">
</tt><tt class=""> Detected boot reason: EarlyCrash</tt><tt class=""><br class="">
</tt><tt class=""> Crash counters: 6 total, 6 early</tt><tt class=""><br class="">
</tt><tt class=""> CPU#0 boot reason was 12</tt><tt class=""><br class="">
</tt><tt class=""> CPU#1 boot reason was 12</tt><tt class=""><br class="">
</tt><br class="">
<br class="">
A manual reset by "module reset" is detected as a soft
reboot and resets all counters like a hard reset. Hard
resets (i.e. ^T^R in the monitor) look just like a
normal power on.<br class="">
<br class="">
Regards,<br class="">
Michael<br class="">
<br class="">
<br class="">
<div class="moz-cite-prefix">Am 08.03.2018 um 04:55
schrieb Mark Webb-Johnson:<br class="">
</div>
<blockquote type="cite" cite="mid:ADFA6751-2A05-4774-95B0-1DB85BE29260@webb-johnson.net" class="">
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8" class="">
<blockquote type="cite" class="">
<div text="#000000" bgcolor="#FFFFFF" class="">I
wasn't aware of the option to add custom segments
in there.</div>
</blockquote>
<div class=""><br class="">
</div>
Me neither. It was fun finding out how to do this. I
learned a lot about GCC linker scripts and how the
Espressif IDF framework uses them. Also learned that
the error messages coming out of the linker are so
obscure as to be useless.
<div class="">
<div class=""><br class="">
</div>
<div class="">I think we should be able to store the
reason for a crash in that area, then after reboot
submit it as a notification to the servers (in
much the same way we did for OVMS v2, but more
powerful as we have the reason before the crash,
not just the crash itself). It seems that some of
the system crash handlers can be overridden (such
as void __attribute__((weak))
vApplicationStackOverflowHook).<br class="">
<div class=""><br class="">
</div>
<div class="">
<blockquote type="cite" class="">
<div text="#000000" bgcolor="#FFFFFF" class="">I'll
optimize the auto start logic after
finishing the webserver fixes.</div>
</blockquote>
<div class=""><br class="">
</div>
<div class="">Thanks.</div>
<div class=""><br class="">
</div>
<div class="">Regards, Mark.</div>
<div class="">
<div class=""><br class="">
<blockquote type="cite" class="">
<div class="">On 8 Mar 2018, at 1:25 AM,
Michael Balzer <<a href="mailto:dexter@expeedo.de" class="" moz-do-not-send="true">dexter@expeedo.de</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" class="">
<div text="#000000" bgcolor="#FFFFFF" class=""> Mark,<br class="">
<br class="">
I also had the problem of losing auto
start when rebooting within 10
seconds. I was about to add more
config instances to track the state,
but having the RTC RAM for this is
much better. I wasn't aware of the
option to add custom segments in
there.<br class="">
<br class="">
I'll optimize the auto start logic
after finishing the webserver fixes.<br class="">
<br class="">
Thanks,<br class="">
Michael<br class="">
<br class="">
<br class="">
<div class="moz-cite-prefix">Am
07.03.2018 um 15:39 schrieb Mark
Webb-Johnson:<br class="">
</div>
<blockquote type="cite" cite="mid:BFF66E85-3BAF-41C2-8F42-3078D9BF539D@webb-johnson.net" class="">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" class="">
I’m having problems with this
approach. Specifically, permanently
disabling the auto start system if
the system fails once during a boot.
<div class=""><br class="">
</div>
<div class="">I tried the module in
my car today. Plugged it in, but
the access point didn’t come up.
No laptop, just an iPad.</div>
<div class=""><br class="">
</div>
<div class="">It seems that while I
was plugging it in, the power
jiggled. So it booted for a second
or so, reset, then booted again.
It treated this as a problem, so
turned off the auto init system
permanently. No matter how many
times I reset, I couldn’t get an
access point to come up, and
couldn’t get into the system from
the iPad.</div>
<div class=""><br class="">
</div>
<div class="">I’m not sure that
storing this in config (fat
filesystem) is optimal. I think
the core reason for that was
because the ESP IDF framework
wipes RTC memory on boot for
anything apart from a deep sleep.
So, I set about finding a solution
to that core problem. The result
is quite neat, and visible in
main/component.mk, and
main/ovms_boot.*. It turns out
that the ESP framework
(start_cpu0) wipes the RTC BSS
segment only. It leaves other RTC
data untouched. So...</div>
<div class=""><br class="">
</div>
<div class="">
<ol class="MailOutline">
<li class="">I create a linker
section ‘.rtc.noload’. This
goes in RTC slow ram,
alongside the other RTC bss
sections. But the NOLOAD flag
is specified, to stop GCC from
wiping this memory on boot.<br class="">
<br class="">
</li>
<li class="">I then create a
typedef struct boot_data_t and
storage boot_data to store the
actual boot data. It is
tagged __attribute__((section(".rtc.noload")))
to force it into that NOLOAD
section. I’ve now got some
data that never gets
initialised, and survives a
reset.<br class="">
<br class="">
</li>
<li class="">The last step is to
check the actual boot reason
(using rtc_get_reset_reason).
If it is POWERON_RESET then I
zero the boot_data storage
(otherwise it is truly garbage
- perhaps good for random
number initialisation, but not
much else). </li>
</ol>
</div>
<div class="">
<div class=""><br class="">
</div>
<div class="">It seems to work
well for me, and is a quite neat
solution. I added a ‘boot
status’ command to show the
status of the last boot,
including the count of reboots.</div>
<div class=""><br class="">
</div>
<div class="">Regarding
differentiating between ‘module
reset’ and another type of
reset, I think we can now simply
add a bool to boot_data_t and
have ‘module reset’ set it
before resetting. It can then be
picked up during boot
(reason SW_CPU_RESET, and check
for this flag) to pickup on this
specific case. If it is a
SW_CPU_RESET and this flag is
not set, then we can assume it
was a crash.</div>
<div class=""><br class="">
</div>
<div class="">With this, I think
we can do some more
sophisticated logic. The ‘first
ten seconds’ flag goes in
boot_data_t. We can also keep a
count of failure resets during
first 10 seconds, and if it
exceeds say 5 then turn off auto
init (but with a setting just in
ram, leaving the config 'auto
init' to indicate whether the
user wants init to be auto or
not).</div>
<div class=""><br class="">
</div>
<div class="">Workable?</div>
<div class=""><br class="">
</div>
<div class="">Regards, Mark.</div>
<div class=""><br class="">
<div class="">
<blockquote type="cite" class="">
<div class="">On 26 Feb
2018, at 3:51 AM, Michael
Balzer <<a href="mailto:dexter@expeedo.de" class="" moz-do-not-send="true">dexter@expeedo.de</a>>
wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div class="">First
version of the auto init
system is in the hub.<br class="">
<br class="">
As discussed, I added an
"auto" config param. It
currently has these
instances:<br class="">
<br class="">
Instance
Default Remark<br class="">
----------------------------------------------------------------------<br class="">
init
yes<br class="">
<br class="">
wifi.mode
ap
off|ap|client<br class="">
wifi.ssid.ap
OVMS<br class="">
wifi.ssid.client
- empty
= scanning mode<br class="">
<br class="">
modem
no<br class="">
<br class="">
vehicle.type
- moved
from vehicle/type<br class="">
<br class="">
server.v2
no<br class="">
server.v3
no<br class="">
<br class="">
<br class="">
The web UI has a new
config page for this as
well.<br class="">
<br class="">
On boot, the housekeeper
temporarily sets "init"
to false. 10 seconds
after booting has
finished it re-enables
it, assuming the system
is stable.<br class="">
<br class="">
The auto wifi ap mode
does a fallback to
"OVMS" with the module
password if no AP
network is configured.
It does not start the AP
mode if the password is
empty.<br class="">
So in order to enable
the AP mode for
configuration, it's
sufficient to set the
module password and
leave all auto configs
to their defaults.<br class="">
<br class="">
<br class="">
Unfortunately a crash
reboot seems to be
indistinguishable from a
manual reset. I've added
a log output of the
reset reason provided by
the ESP. The reason<br class="">
codes are:<br class="">
<br class="">
typedef enum {<br class="">
NO_MEAN
= 0,<br class="">
POWERON_RESET
= 1, /**<1, Vbat
power on reset*/<br class="">
SW_RESET
= 3, /**<3,
Software reset digital
core*/<br class="">
OWDT_RESET
= 4, /**<4,
Legacy watch dog reset
digital core*/<br class="">
DEEPSLEEP_RESET
= 5, /**<3, Deep
Sleep reset digital
core*/<br class="">
SDIO_RESET
= 6, /**<6, Reset
by SLC module, reset
digital core*/<br class="">
TG0WDT_SYS_RESET
= 7, /**<7, Timer
Group0 Watch dog reset
digital core*/<br class="">
TG1WDT_SYS_RESET
= 8, /**<8, Timer
Group1 Watch dog reset
digital core*/<br class="">
RTCWDT_SYS_RESET
= 9, /**<9, RTC
Watch dog Reset digital
core*/<br class="">
INTRUSION_RESET =
10, /**<10,
Instrusion tested to
reset CPU*/<br class="">
TGWDT_CPU_RESET =
11, /**<11, Time
Group reset CPU*/<br class="">
SW_CPU_RESET =
12, /**<12,
Software reset CPU*/<br class="">
RTCWDT_CPU_RESET =
13, /**<13, RTC
Watch dog Reset CPU*/<br class="">
EXT_CPU_RESET =
14, /**<14, for
APP CPU, reseted by PRO
CPU*/<br class="">
RTCWDT_BROWN_OUT_RESET =
15, /**<15, Reset
when the vdd voltage is
not stable*/<br class="">
RTCWDT_RTC_RESET =
16 /**<16, RTC
Watch dog reset digital
core and rtc module*/<br class="">
} RESET_REASON;<br class="">
<br class="">
I get these values:<br class="">
<br class="">
…boot after make
app-flash:<br class="">
I (537) housekeeping:
reset_reason: cpu0=1,
cpu1=14<br class="">
<br class="">
…after triggering
vfs-edit-bug:<br class="">
I (527) housekeeping:
reset_reason: cpu0=12,
cpu1=12<br class="">
<br class="">
…after "module reset":<br class="">
I (527) housekeeping:
reset_reason: cpu0=12,
cpu1=12<br class="">
<br class="">
…after "module fault":<br class="">
I (527) housekeeping:
reset_reason: cpu0=12,
cpu1=12<br class="">
<br class="">
…and no, the 12/12 were
not sticky, I checked
with a clean boot.<br class="">
<br class="">
There's also a bug in
the ESP32 that may
trigger false
positives: <a href="https://github.com/espressif/esp-idf/issues/494#issuecomment-291916959" class="" moz-do-not-send="true">https://github.com/espressif/esp-idf/issues/494#issuecomment-291916959</a><br class="">
<br class="">
I haven't had that
effect up to now, but it
seems we cannot rely on
the reset reason.<br class="">
<br class="">
Regards,<br class="">
Michael<br class="">
<br class="">
<br class="">
Am 25.02.2018 um 15:06
schrieb Michael Balzer:<br class="">
<blockquote type="cite" class="">Am 22.02.2018
um 04:22 schrieb Mark
Webb-Johnson:<br class="">
<blockquote type="cite" class="">When
looking at the deep
sleep stuff, I found
there is a way to
tag a global
variable as ‘rtc’.
That should survive
a deep sleep (or
reboot).<br class="">
</blockquote>
Unfortunately, it does
not survive a reboot:<br class="">
<br class="">
<blockquote type="cite" class="">*
Data in RTC memory
is initialised
whenever the SoC
restarts, except
when waking from
deep sleep. When
waking from deep
sleep, the values
which were present<br class="">
before going to
sleep are kept.<br class="">
</blockquote>
There is an NVS
library: <a href="https://esp-idf.readthedocs.io/en/v1.0/api/nvs_flash.html" class="" moz-do-not-send="true">https://esp-idf.readthedocs.io/en/v1.0/api/nvs_flash.html</a><br class="">
<br class="">
…but I've got the
impression that could
interfere with our own
flash usage (?).<br class="">
<br class="">
Also, if flash is the
way and as /store is
already present at
housekeeping init, I
think we can just as
well use our own
config module…<br class="">
<br class="">
Regards,<br class="">
Michael<br class="">
<br class="">
</blockquote>
<br class="">
-- <br class="">
Michael Balzer *
Helkenberger Weg 9 *
D-58256 Ennepetal<br class="">
Fon 02333 / 833 5735 *
Handy 0176 / 206 989 26<br class="">
<br class="">
_______________________________________________<br class="">
OvmsDev mailing list<br class="">
<a href="mailto:OvmsDev@lists.teslaclub.hk" class="" moz-do-not-send="true">OvmsDev@lists.teslaclub.hk</a><br class="">
<a class="moz-txt-link-freetext" href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a><br class="">
</div>
</div>
</blockquote>
</div>
<br class="">
</div>
</div>
<br class="">
<fieldset class="mimeAttachmentHeader"></fieldset>
<br class="">
<pre class="" wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.teslaclub.hk" moz-do-not-send="true">OvmsDev@lists.teslaclub.hk</a>
<a class="moz-txt-link-freetext" href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a>
</pre>
</blockquote>
<br class="">
<pre class="moz-signature" cols="160">--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
</pre>
</div>
_______________________________________________<br class="">
OvmsDev mailing list<br class="">
<a href="mailto:OvmsDev@lists.teslaclub.hk" class="" moz-do-not-send="true">OvmsDev@lists.teslaclub.hk</a><br class="">
<a class="moz-txt-link-freetext" href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a><br class="">
</div>
</blockquote>
</div>
<br class="">
</div>
</div>
</div>
</div>
<br class="">
<fieldset class="mimeAttachmentHeader"></fieldset>
<br class="">
<pre class="" wrap="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.teslaclub.hk" moz-do-not-send="true">OvmsDev@lists.teslaclub.hk</a>
<a class="moz-txt-link-freetext" href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev" moz-do-not-send="true">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a>
</pre>
</blockquote>
<br class="">
<pre class="moz-signature" cols="160">--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
</pre>
</div>
_______________________________________________<br class="">
OvmsDev mailing list<br class="">
<a href="mailto:OvmsDev@lists.teslaclub.hk" class="" moz-do-not-send="true">OvmsDev@lists.teslaclub.hk</a><br class="">
<a class="moz-txt-link-freetext" href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a><br class="">
</div>
</blockquote>
</div>
<br class="">
</div>
<br class="">
<fieldset class="mimeAttachmentHeader"></fieldset>
<br class="">
<pre wrap="" class="">_______________________________________________
OvmsDev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:OvmsDev@lists.teslaclub.hk">OvmsDev@lists.teslaclub.hk</a>
<a class="moz-txt-link-freetext" href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a>
</pre>
</blockquote>
<br class="">
<pre class="moz-signature" cols="160">--
Michael Balzer * Helkenberger Weg 9 * D-58256 Ennepetal
Fon 02333 / 833 5735 * Handy 0176 / 206 989 26
</pre>
</div>
_______________________________________________<br class="">OvmsDev mailing list<br class=""><a href="mailto:OvmsDev@lists.teslaclub.hk" class="">OvmsDev@lists.teslaclub.hk</a><br class="">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev<br class=""></div></blockquote></div><br class=""></div></body></html>