davidg238
02/24/2023, 7:15 PMimport esp32
import system.storage as storage
// RAM_STORE_ ::= storage.Bucket.open --flash "/admin"
RAM_STORE_ ::= storage.Bucket.open --ram "/admin"
main:
RAMBuffer.add Time.now.s_since_epoch
print "size after $RAMBuffer.size"
esp32.deep_sleep (Duration --s=5)
class RAMBuffer:
static exists -> bool:
return null != (RAM_STORE_.get "buffer")
static get_buff_ -> List:
buffer := RAM_STORE_.get "buffer"
if not buffer: buffer = []
return buffer
static add entry/any -> none:
buffer := List.from get_buff_
buffer.add entry
RAM_STORE_["buffer"] = buffer
static clear -> none:
RAM_STORE_["buffer"] = []
static size -> int:
return get_buff_.size
static remove_first -> any:
buffer := get_buff_
entry := buffer.first
RAM_STORE_["buffer"] = buffer[1..]
return entry
kasperl
02/24/2023, 7:17 PMdavidg238
02/24/2023, 7:36 PMkasperl
02/25/2023, 5:55 AMkasperl
02/25/2023, 6:09 AMkasperl
02/25/2023, 6:10 AMkasperl
02/25/2023, 6:11 AMkasperl
02/25/2023, 6:26 AMkasperl
02/25/2023, 6:26 AMkasperl
02/25/2023, 6:29 AMkasperl
02/25/2023, 12:35 PMkasperl
02/27/2023, 8:39 PMdavidg238
02/28/2023, 6:41 AMrst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:184
load:0x40078000,len:12700
ho 0 tail 12 room 4
load:0x40080400,len:2916
entry 0x400805c4
E (53) psram: No PSRAM detected
E (53) spiram: SPI RAM supported, but not found.
[toit] INFO: starting <v2.0.0-alpha.55>
starting
.... ezSBC Feather 09c2e1345a79 started
storing {"ti": "273"}
size 3 after storing
Entering deep sleep for 15000ms
ets Jul 29 2019 12:21:46
rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:184
load:0x40078000,len:12700
ho 0 tail 12 room 4
load:0x40080400,len:2916
entry 0x400805c4
E (53) psram: No PSRAM detected
E (53) spiram: SPI RAM supported, but not found.
[toit] INFO: starting <v2.0.0-alpha.55>
starting
.... ezSBC Feather 09c2e1345a79 started
storing {"ti": "288"}
size 4 after storing
data: {"ti": "243"}
data: {"ti": "258"}
data: {"ti": "273"}
data: {"ti": "288"}
buffer emptied, size now 0
Entering deep sleep for 15000ms
ets Jul 29 2019 12:21:46
kasperl
02/28/2023, 6:44 AMdavidg238
02/28/2023, 6:46 AMdavidg238
02/28/2023, 6:47 AMdavidg238
02/28/2023, 6:47 AMkasperl
02/28/2023, 6:50 AMkasperl
02/28/2023, 7:01 AMdavidg238
02/28/2023, 6:55 PMdavid@MSI-7D43:~$ jag monitor
Starting serial monitor of port '/dev/ttyUSB0' ...
ets Jul 29 2019 12:21:46
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:184
load:0x40078000,len:12700
ho 0 tail 12 room 4
load:0x40080400,len:2916
entry 0x400805c4
E (586) psram: No PSRAM detected
E (586) spiram: SPI RAM supported, but not found.
[toit] INFO: starting <v2.0.0-alpha.55>
[toit] DEBUG: clearing RTC memory: invalid checksum
[wifi] DEBUG: connecting
[wifi] DEBUG: connected
[wifi] INFO: network address dynamically assigned through dhcp {ip: 192.168.0.244}
[wifi] INFO: dns server address dynamically assigned through dhcp {ip: [192.168.0.1]}
[jaguar] INFO: running Jaguar device 'hungry-egg' (id: '2a1e7668-614e-4ff0-aa36-6b047b432d52') on 'http://192.168.0.244:9000'
kasperl
02/28/2023, 6:55 PMkasperl
02/28/2023, 6:56 PMdavidg238
02/28/2023, 6:56 PMdavidg238
02/28/2023, 6:56 PMdavidg238
02/28/2023, 6:57 PMdavid@MSI-7D43:~$ jag monitor -a
Starting serial monitor of port '/dev/ttyUSB0' ...
[jaguar] INFO: program e033b5d1-6478-5145-a783-6b674c445811 started
starting
.... ezSBC Feather 09c2e1345a79 started
stored {"ti": 1197, "v": 3.0}, size now 1
stored {"ti": 1202, "v": 4.0}, size now 2
stored {"ti": 1207, "v": 3.0}, size now 3
stored {"ti": 1212, "v": 4.0}, size now 4
stored {"ti": 1217, "v": 4.0}, size now 5
stored {"ti": 1222, "v": 4.0}, size now 6
******************************************************************************
EXCEPTION error.
WRONG_OBJECT_TYPE
0: decode <sdk>/encoding/tison.toit:41:3
1: Bucket.get <sdk>/system/storage.toit:84:29
2: Bucket.get <sdk>/system/storage.toit:73:12
3: BufferStore.get_buff_ admin.toit:24:22
4: BufferStore.size admin.toit:37:12
5: main test2.toit:45:19
******************************************************************************
[jaguar] ERROR: program e033b5d1-6478-5145-a783-6b674c445811 stopped - exit code 1
davidg238
02/28/2023, 6:57 PMdavidg238
02/28/2023, 6:57 PMkasperl
02/28/2023, 6:58 PMdavidg238
02/28/2023, 6:58 PMdavidg238
02/28/2023, 7:00 PMkasperl
02/28/2023, 7:00 PMkasperl
02/28/2023, 7:01 PMdavidg238
02/28/2023, 7:01 PMkasperl
02/28/2023, 7:02 PMdavidg238
02/28/2023, 7:03 PMdavidg238
02/28/2023, 7:07 PM[jaguar] INFO: program cdca5a03-c7ca-52f0-88bf-e727749a4e0c started
starting
.... ezSBC Feather 09c2e1345a79 started
stored {"ti": 2077, "v": 3}, size now 1
stored {"ti": 2082, "v": 3}, size now 2
stored {"ti": 2087, "v": 4}, size now 3
buffer full, emptying
data: {"ti": 2077, "v": 3}
data: {"ti": 2082, "v": 3}
data: {"ti": 2087, "v": 4}
buffer emptied, size now 0
stored {"ti": 2092, "v": 3}, size now 1
stored {"ti": 2097, "v": 3}, size now 2
stored {"ti": 2102, "v": 3}, size now 3
buffer full, emptying
data: {"ti": 2092, "v": 3}
data: {"ti": 2097, "v": 3}
data: {"ti": 2102, "v": 3}
buffer emptied, size now 0
davidg238
02/28/2023, 7:08 PMkasperl
02/28/2023, 7:09 PMdavidg238
02/28/2023, 7:09 PM[jaguar] INFO: program bbd19ddf-d50c-543e-9731-fc0be3e86827 started
starting
.... ezSBC Feather 09c2e1345a79 started
stored {"ti": 2250, "v": 4}, size now 1
stored {"ti": 2255, "v": 3}, size now 2
stored {"ti": 2260, "v": 3}, size now 3
stored {"ti": 2265, "v": 4}, size now 4
stored {"ti": 2270, "v": 3}, size now 5
stored {"ti": 2275, "v": 4}, size now 6
******************************************************************************
EXCEPTION error.
WRONG_OBJECT_TYPE
0: decode <sdk>/encoding/tison.toit:41:3
1: Bucket.get <sdk>/system/storage.toit:84:29
2: Bucket.get <sdk>/system/storage.toit:73:12
3: BufferStore.get_buff_ admin.toit:24:22
4: BufferStore.size admin.toit:37:12
5: main test2.toit:45:19
******************************************************************************
[jaguar] ERROR: program bbd19ddf-d50c-543e-9731-fc0be3e86827 stopped - exit code 1
kasperl
02/28/2023, 7:09 PMdavidg238
02/28/2023, 7:11 PMdavidg238
02/28/2023, 7:38 PMremove_first
, since I am storing a ListSlice_
... some flakiness ?
I found this when I recoded using a List as a buffer, the first loop of 10 worked, but on the 11th add I got:
buffer emptied, size now 0
******************************************************************************
EXCEPTION error.
SLICE_CANNOT_CHANGE_SIZE
0: ListSlice_.resize <sdk>/core/collections.toit:1792:5
1: List.add <sdk>/core/collections.toit:289:7
2: main tison.toit:34:15
******************************************************************************
davidg238
02/28/2023, 7:39 PMif my_buffer.size >= 10:
print "buffer full, emptying"
entry := null
while my_buffer.size > 0:
entry = my_buffer.first
print "data: $entry"
my_buffer = List.from my_buffer[1..]
print "buffer emptied, size now $my_buffer.size"
in a test case seems more stablekasperl
02/28/2023, 7:39 PMkasperl
02/28/2023, 7:42 PMkasperl
02/28/2023, 7:57 PMdavidg238
02/28/2023, 7:58 PMdavidg238
02/28/2023, 7:58 PMkasperl
02/28/2023, 8:10 PMkasperl
02/28/2023, 8:10 PMkasperl
02/28/2023, 8:11 PMkasperl
02/28/2023, 8:11 PMkasperl
02/28/2023, 8:13 PMdavidg238
02/28/2023, 8:22 PMdavidg238
02/28/2023, 8:23 PMkasperl
02/28/2023, 8:31 PMkasperl
03/01/2023, 12:46 PMdavidg238
03/02/2023, 8:30 PM--ram
to retain values between deep_sleep
(using LiPo backed ESPs). This is the simplest example I could think of, to reproduce:
import system.storage
import esp32
// with ram it fails, flash it works
bucket := storage.Bucket.open --ram "/admin"
main:
list := bucket.get "mail" --if_absent= (: bucket["mail"] = [ ])
/* the alternative loop, not using deep sleep, works for ram and flash
5.repeat:
print "list $bucket["mail"]"
add Time.now.s_since_epoch
sleep --ms= 5_000
*/
print "list $bucket["mail"]"
add Time.now.s_since_epoch
esp32.deep_sleep (Duration --s=10)
add entry/any -> none:
buffer := List.from bucket["mail"]
buffer.add entry
bucket["mail"] = buffer
kasperl
03/02/2023, 8:58 PMkasperl
03/02/2023, 9:02 PMdavidg238
03/02/2023, 9:09 PMdavid@MSI-7D43:~$ jag monitor -a
Starting serial monitor of port '/dev/ttyUSB0' ...
[wifi] INFO: network address dynamically assigned through dhcp {ip: 192.168.0.240}
[wifi] INFO: dns server address dynamically assigned through dhcp {ip: [192.168.0.1]}
[jaguar] INFO: running Jaguar device 'dev04' (id: '1e74b0ec-6156-4672-b7ba-a53ba5c8b18c') on 'http://192.168.0.240:9000'
[jaguar] INFO: denied request, header: 'X-Jaguar-Device-ID' was '288f65b5-7b34-450f-938e-04f19e99029d' not '1e74b0ec-6156-4672-b7ba-a53ba5c8b18c'
[jaguar] INFO: container 'sleep2' installed and started
list []
Entering deep sleep for 10000ms
ets Jul 29 2019 12:21:46
rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:184
load:0x40078000,len:12700
ho 0 tail 12 room 4
load:0x40080400,len:2916
entry 0x400805c4
E (53) psram: No PSRAM detected
E (53) spiram: SPI RAM supported, but not found.
[toit] INFO: starting <v2.0.0-alpha.58>
[jaguar] INFO: container 'sleep2' started
list []
Entering deep sleep for 10000ms
ets Jul 29 2019 12:21:46
rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:184
load:0x40078000,len:12700
ho 0 tail 12 room 4
load:0x40080400,len:2916
entry 0x400805c4
E (53) psram: No PSRAM detected
E (53) spiram: SPI RAM supported, but not found.
[toit] INFO: starting <v2.0.0-alpha.58>
[jaguar] INFO: container 'sleep2' started
list []
Entering deep sleep for 10000ms
kasperl
03/02/2023, 9:10 PMdavidg238
03/02/2023, 9:13 PMdavid@MSI-7D43:~$ jag monitor -a
Starting serial monitor of port '/dev/ttyUSB0' ...
[jaguar] INFO: container 'sleep2' installed and started
list []
Entering deep sleep for 10000ms
ets Jul 29 2019 12:21:46
rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:184
load:0x40078000,len:12700
ho 0 tail 12 room 4
load:0x40080400,len:2916
entry 0x400805c4
E (53) psram: No PSRAM detected
E (53) spiram: SPI RAM supported, but not found.
[toit] INFO: starting <v2.0.0-alpha.58>
[jaguar] INFO: container 'sleep2' started
list [86]
Entering deep sleep for 10000ms
ets Jul 29 2019 12:21:46
rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:184
load:0x40078000,len:12700
ho 0 tail 12 room 4
load:0x40080400,len:2916
entry 0x400805c4
E (53) psram: No PSRAM detected
E (53) spiram: SPI RAM supported, but not found.
[toit] INFO: starting <v2.0.0-alpha.58>
[jaguar] INFO: container 'sleep2' started
list [86, 97]
Entering deep sleep for 10000ms
ets Jul 29 2019 12:21:46
rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:184
load:0x40078000,len:12700
ho 0 tail 12 room 4
load:0x40080400,len:2916
entry 0x400805c4
E (53) psram: No PSRAM detected
E (53) spiram: SPI RAM supported, but not found.
[toit] INFO: starting <v2.0.0-alpha.58>
[jaguar] INFO: container 'sleep2' started
list [86, 97, 107]
Entering deep sleep for 10000ms
kasperl
03/03/2023, 5:24 AMkasperl
03/03/2023, 5:25 AMbucket.get "mail" --init=: []
which is a nice pattern for buckets and maps.
import system.storage
import esp32
bucket := storage.Bucket.open --ram "/admin"
main:
list := bucket.get "mail" --init=: []
print "list = $bucket["mail"]"
add Time.now.s_since_epoch
if (random 100) < 90: esp32.deep_sleep (Duration --s=1)
add entry/any -> none:
buffer := List.from bucket["mail"]
buffer.add entry
bucket["mail"] = buffer
kasperl
03/03/2023, 5:54 AMdavidg238
03/03/2023, 5:54 AM--init
, the --ifAbsent
has been so common you don't have to think about it. will usedavidg238
03/03/2023, 5:55 AMkasperl
03/03/2023, 7:31 AMkasperl
03/03/2023, 7:40 AMdavidg238
03/03/2023, 4:09 PMrandom
is a clever alternative to a button in many test situationskasperl
03/03/2023, 4:11 PMdavidg238
03/03/2023, 9:17 PMnull
. Can't see why the Bucket --init
or --if_absent
code is not triggered. Take a look at the attached to reproduce, see if it makes sense.kasperl
03/03/2023, 9:20 PMkasperl
03/03/2023, 9:22 PMkasperl
03/03/2023, 9:23 PMdavidg238
03/03/2023, 9:24 PMdavidg238
03/03/2023, 9:24 PMdavidg238
03/03/2023, 9:24 PMdavidg238
03/03/2023, 9:25 PMdavidg238
03/03/2023, 9:26 PMkasperl
03/03/2023, 9:26 PMdavidg238
03/03/2023, 9:32 PMkasperl
03/04/2023, 5:59 AMlist := bucket.get "mail" --init= (: bucket["mail"] = [])
should be list := bucket.get "mail" --init=(: [])
kasperl
03/04/2023, 5:59 AMlist := bucket.get "mail" --init=: []
)kasperl
03/04/2023, 6:02 AMdavidg238
03/04/2023, 6:11 AMkasperl
03/04/2023, 6:12 AMkasperl
03/04/2023, 6:13 AMkasperl
03/04/2023, 6:13 AMkasperl
03/04/2023, 6:13 AMkasperl
03/04/2023, 6:13 AMdavidg238
03/04/2023, 6:15 AMdavidg238
03/04/2023, 6:15 AMkasperl
03/04/2023, 6:18 AMdavidg238
03/04/2023, 6:20 AMkasperl
03/04/2023, 6:23 AMkasperl
03/04/2023, 6:23 AMdavidg238
03/04/2023, 6:24 AMkasperl
03/04/2023, 6:41 AM--init=: []
and then the next release will fix it so the original code using --if_absent
also works as expected.davidg238
03/04/2023, 6:51 AMkasperl
03/04/2023, 6:56 AMkasperl
03/06/2023, 5:49 AM[]=
issue.