crownstone / crownstone-microapp

Crownstone microapp. Contains several examples and library to communicate with bluenet.
Apache License 2.0
2 stars 6 forks source link

Bug: very first bluenet roundtrip in setup() is executed twice #14

Open martijnvandermarel opened 2 years ago

martijnvandermarel commented 2 years ago
void setup() {
    Serial.println("First setup");
    Serial.println("Second setup");
    Serial.println("Third setup");
}

LOG: [2022-06-17 13:55:59.523346] [icroapp/cs_MicroappStorage.cpp: 74] I init addr=0x00069000 LOG: [2022-06-17 13:55:59.523698] [icroapp/cs_MicroappStorage.cpp: 78] I Successfully initialized from 0x00069000 to 0x0006B000 LOG: [2022-06-17 13:55:59.524226] [oapp/cs_MicroappController.cpp: 199] I Microapp end is at 2000ff00 LOG: [2022-06-17 13:55:59.524558] [oapp/cs_MicroappController.cpp: 218] I Set IPC info for microapp LOG: [2022-06-17 13:55:59.524832] [oapp/cs_MicroappController.cpp: 224] I Set callback to 45655 LOG: [2022-06-17 13:55:59.525041] [oapp/cs_MicroappController.cpp: 228] I Set ram data for microapp, retCode=0 LOG: [2022-06-17 13:55:59.525233] [e/src/microapp/cs_Microapp.cpp: 60] I Auto-enabling of apps on boot turned on LOG: [2022-06-17 13:55:59.525523] [icroapp/cs_MicroappStorage.cpp: 279] I Validate app 0 LOG: [2022-06-17 13:55:59.529108] [icroapp/cs_MicroappStorage.cpp: 303] I Header checksum: expected=26932 calculated=26932 LOG: [2022-06-17 13:55:59.529504] [icroapp/cs_MicroappStorage.cpp: 337] I Binary checksum: expected=28946 calculated=28946 LOG: [2022-06-17 13:55:59.530011] [e/src/microapp/cs_Microapp.cpp: 126] I Known app on index 0 LOG: [2022-06-17 13:55:59.531027] [e/src/microapp/cs_Microapp.cpp: 69] I Enable microapp 0 LOG: [2022-06-17 13:55:59.531205] [e/src/microapp/cs_Microapp.cpp: 155] I startApp 0 LOG: [2022-06-17 13:55:59.532966] [oapp/cs_MicroappController.cpp: 273] I Call microapp #0 LOG: [2022-06-17 13:55:59.535125] [oapp/cs_MicroappController.cpp: 258] I Init memory: clear 0x2000f700 to 0x2000ff00 LOG: [2022-06-17 13:55:59.537919] [oapp/cs_MicroappController.cpp: 278] I Microapp: start at 69014 LOG: [2022-06-17 13:55:59.538504] [oapp/cs_MicroappController.cpp: 289] I Setup coroutine and configure it ... LOG: [2022-06-17 13:56:01.030583] [oapp/cs_MicroappController.cpp: 171] I Within coroutine, call main: 69014 LOG: [2022-06-17 13:56:01.030712] [oapp/cs_MicroappController.cpp: 148] I Jump to address: 69014 LOG: [2022-06-17 13:56:01.032326] [/cs_MicroappCommandHandler.cpp: 193] I First setup LOG: [2022-06-17 13:56:01.035309] [/cs_MicroappCommandHandler.cpp: 193] I First setup LOG: [2022-06-17 13:56:01.035418] [/cs_MicroappCommandHandler.cpp: 193] I Second setup LOG: [2022-06-17 13:56:01.035508] [/cs_MicroappCommandHandler.cpp: 193] I Third setup LOG: [2022-06-17 13:56:01.035583] [/cs_MicroappCommandHandler.cpp: 115] I Setup end

A simple way to solve this is to start dummy_main() with a sendMessage() call (even before the setup() call). I've tried this and it seems to work. Maybe also the cmd in the io_buffer needs to be initialized in such a case to ensure stopAfterMicroappCommand() returns false after this first microapp roundtrip.

@mrquincle thoughts?

mrquincle commented 2 years ago

You mean just adding an extra call so that what's executed first doesn't matter? What's the reason though? I've to look into it to see why it does it. Otherwise this might happen somewhere else suddenly as well.