int main() { // Initialise the micro:bit runtime. uBit.init(); uBit.messageBus.listen(MICROBIT_ID_BUTTON_A, MICROBIT_BUTTON_EVT_CLICK, onButtonA); uBit.messageBus.listen(MICROBIT_ID_BUTTON_B, MICROBIT_BUTTON_EVT_CLICK, onButtonB); startAdvertising(); release_fiber(); }
int main() { // Initialise the micro:bit runtime. uBit.init(); uBit.messageBus.listen(MICROBIT_ID_BUTTON_A, MICROBIT_BUTTON_EVT_CLICK, onButtonA); uBit.messageBus.listen(MICROBIT_ID_BUTTON_B, MICROBIT_BUTTON_EVT_CLICK, onButtonB); setMode(); // If main exits, there may still be other fibers running or registered event handlers etc. // Simply release this fiber, which will mean we enter the scheduler. Worse case, we then // sit in the idle task forever, in a power efficient sleep. release_fiber(); return 0; }
void fiberDone(void *a) { decr((Action)a); release_fiber(); }
int main() { // Bring up soft reset button. resetButton.mode(PullUp); resetButton.fall(microbit_reset); #if CONFIG_ENABLED(MICROBIT_DBG) // For diagnostics. Gives time to open the console window. :-) for (int i=3; i>0; i--) { uBit.serial.printf("=== SUPERMAIN: Starting in %d ===\n", i); wait(1.0); } uBit.serial.printf("micro:bit runtime DAL version %s\n", MICROBIT_DAL_VERSION); #endif // Bring up our nested heap allocator. microbit_heap_init(); // Bring up fiber scheduler scheduler_init(); // Bring up random number generator, BLE, display and system timers. uBit.init(); // Provide time for all threaded initialisers to complete. uBit.sleep(100); #if CONFIG_ENABLED(MICROBIT_BLE_PAIRING_MODE) // Test if we need to enter BLE pairing mode... int i=0; while (uBit.buttonA.isPressed() && uBit.buttonB.isPressed() && i<10) { uBit.sleep(100); i++; if (i == 10) { // Start the BLE stack, if it isn't already running. if (!uBit.ble) { uBit.bleManager.init(uBit.getName(), uBit.getSerial(), true); uBit.ble = uBit.bleManager.ble; } // Enter pairing mode, using the LED matrix for any necessary pairing operations uBit.bleManager.pairingMode(uBit.display); } } #endif #if CONFIG_ENABLED(MICROBIT_BLE_ENABLED) // Start the BLE stack, if it isn't already running. if (!uBit.ble) { uBit.bleManager.init(uBit.getName(), uBit.getSerial(), false); uBit.ble = uBit.bleManager.ble; } #endif app_main(); // If app_main exits, there may still be other fibers running, registered event handlers etc. // Simply release this fiber, which will mean we enter the scheduler. Worse case, we then // sit in the idle task forever, in a power efficient sleep. release_fiber(); // We should never get here, but just in case. while(1); }