THD_FUNCTION(test_support, arg) { #if CH_CFG_USE_EVENTS == TRUE thread_t *tp = (thread_t *)arg; #else (void)arg; #endif /* Initializing global resources.*/ chSemObjectInit(&gsem1, 0); chSemObjectInit(&gsem2, 0); while (true) { chSysLock(); if (chSemGetCounterI(&gsem1) < 0) chSemSignalI(&gsem1); chSemResetI(&gsem2, 0); chThdResumeI(>r1, MSG_OK); #if CH_CFG_USE_EVENTS == TRUE chEvtSignalI(tp, 0x55); #endif chSchRescheduleS(); chSysUnlock(); chThdSleepMilliseconds(250); } }
/** * @brief Wakes up the pump thread. * * @param[in] usbp pointer to the @p USBDriver object * * @notapi */ static void usb_lld_wakeup_pump(USBDriver *usbp) { if (usbp->thd_wait != NULL) { chThdResumeI(usbp->thd_wait); usbp->thd_wait = NULL; } }
void i2cDmaIrqHandler(void *p, uint32_t flags) { chSysLockFromISR(); i2c_t *pi2c = (i2c_t*)p; // Uart.PrintfNow("\r===T==="); chThdResumeI(&pi2c->ThdRef, (msg_t)0); chSysUnlockFromISR(); }
static THD_FUNCTION(thread1, p) { chSysLock(); chThdResumeI(&tr1, MSG_OK); chSchRescheduleS(); chSysUnlock(); test_emit_token(*(char *)p); }
void Usb_t::IEpInHandler(uint8_t EpN) { uint32_t epint = OTG_FS->ie[EpN].DIEPINT; OTG_FS->ie[EpN].DIEPINT = 0xFFFFFFFF; // Reset IRQs Uart.Printf("in %X i%X\r\n", EpN, epint); // Transmit transfer complete if(epint & DIEPINT_XFRC) { Uart.Printf("###########\r\n"); // Ep[0].ClearOutNAK(); // Ep[0].EnableOut(); // Ep[EpN].IsTransmitting = false; if(EpN == 0) Ep0InCallback(); // if(Ep[EpN].cbIn != NULL) Ep[EpN].cbIn(); } // TX FIFO empty if((epint & DIEPINT_TXFE) and Ep[EpN].FifoEmtyIRQEnabled()) { Uart.Printf("TXFE\r\n"); chSysLockFromIsr(); Ep[EpN].DisableInFifoEmptyIRQ(); Ep[EpN].IsTxPending = true; if(PThread->p_state == THD_STATE_SUSPENDED) chThdResumeI(PThread); chSysUnlockFromIsr(); } // if txfe }
void ThreadStayPoint::resumeI(msg_t msg) { chThdResumeI(&thread_ref, msg); }
void i2c_t::IWakeup() { chSysLockFromISR(); chThdResumeI(&PThd, MSG_OK); chSysUnlockFromISR(); }