static void handle_nap_exti(void) { u32 irq = nap_irq_rd_blocking(); if (irq & NAP_IRQ_ACQ_DONE) acq_service_irq(); if (irq & NAP_IRQ_ACQ_LOAD_DONE) acq_service_load_done(); if (irq & NAP_IRQ_TIMING_STROBE) { chBSemReset(&timing_strobe_sem, TRUE); } if (irq & NAP_IRQ_EXT_EVENT) ext_event_service(); /* Mask off everything but tracking irqs. */ irq &= NAP_IRQ_TRACK_MASK; tracking_channels_update(irq); u32 err = nap_error_rd_blocking(); if (err) { log_error("SwiftNAP Error: 0x%08X", (unsigned int)err); tracking_channels_missed_update_error(err); } watchdog_notify(WD_NOTIFY_NAP_ISR); nap_exti_count++; }
static void rt_test_005_006_execute(void) { binary_semaphore_t bsem; msg_t msg; /* [5.6.1] Creating a binary semaphore in "taken" state, the state is checked.*/ test_set_step(1); { chBSemObjectInit(&bsem, true); test_assert_lock(chBSemGetStateI(&bsem) == true, "not taken"); } /* [5.6.2] Resetting the binary semaphore in "taken" state, the state must not change.*/ test_set_step(2); { chBSemReset(&bsem, true); test_assert_lock(chBSemGetStateI(&bsem) == true, "not taken"); } /* [5.6.3] Starting a signaler thread at a lower priority.*/ test_set_step(3); { threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriorityX()-1, thread4, &bsem); } /* [5.6.4] Waiting for the binary semaphore to be signaled, the semaphore is expected to be taken.*/ test_set_step(4); { msg = chBSemWait(&bsem); test_assert_lock(chBSemGetStateI(&bsem) == true, "not taken"); test_assert(msg == MSG_OK, "unexpected message"); } /* [5.6.5] Signaling the binary semaphore, checking the binary semaphore state to be "not taken" and the underlying counter semaphore counter to be one.*/ test_set_step(5); { chBSemSignal(&bsem); test_assert_lock(chBSemGetStateI(&bsem) ==false, "still taken"); test_assert_lock(chSemGetCounterI(&bsem.sem) == 1, "unexpected counter"); } /* [5.6.6] Signaling the binary semaphore again, the internal state must not change from "not taken".*/ test_set_step(6); { chBSemSignal(&bsem); test_assert_lock(chBSemGetStateI(&bsem) == false, "taken"); test_assert_lock(chSemGetCounterI(&bsem.sem) == 1, "unexpected counter"); } }
void BinarySemaphore::reset(bool taken) { chBSemReset(&bsem, (bool_t)taken); }
void osResetEvent(OsEvent *event) { //Force the specified event to the nonsignaled state chBSemReset(event, TRUE); }