本文整理汇总了C++中chSysLockFromISR函数的典型用法代码示例。如果您正苦于以下问题:C++ chSysLockFromISR函数的具体用法?C++ chSysLockFromISR怎么用?C++ chSysLockFromISR使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了chSysLockFromISR函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: outint
static bool outint(SerialDriver *sdp) {
if (sdp->com_data != INVALID_SOCKET) {
int n;
uint8_t data[1];
/*
* Input.
*/
chSysLockFromISR();
n = sdRequestDataI(sdp);
chSysUnlockFromISR();
if (n < 0)
return false;
data[0] = (uint8_t)n;
n = send(sdp->com_data, (char *)data, sizeof(data), 0);
switch (n) {
case 0:
closesocket(sdp->com_data);
sdp->com_data = INVALID_SOCKET;
chSysLockFromISR();
chnAddFlagsI(sdp, CHN_DISCONNECTED);
chSysUnlockFromISR();
return false;
case SOCKET_ERROR:
if (WSAGetLastError() == WSAEWOULDBLOCK)
return false;
closesocket(sdp->com_data);
sdp->com_data = INVALID_SOCKET;
return false;
}
return true;
}
return false;
}
示例2: vectornav_spi_end_cb
//-----------------------------------------------------------------------------
static void
vectornav_spi_end_cb(SPIDriver * spip)
{
(void)spip;
switch( async_vn_msg.state )
{
case VN_ASYNC_1ST_SPI_CB:
chSysLockFromISR();
spiUnselectI(VND1.spip);
async_vn_msg.state = VN_ASYNC_1ST_SLEEP;
gptStartOneShotI(VND1.gpdp, VN_SLEEPTIME);
chSysUnlockFromISR();
break;
case VN_ASYNC_2ND_SPI_CB:
chSysLockFromISR();
spiUnselectI(VND1.spip);
// here we have the register
vectornav_dispatch_register(async_vn_msg.reg, async_vn_msg.buf_size, async_vn_msg.buf);
async_vn_msg.state = VN_ASYNC_2ND_SLEEP;
gptStartOneShotI(VND1.gpdp, VN_SLEEPTIME);
chSysUnlockFromISR();
break;
case VN_ASYNC_INACTIVE:
case VN_ASYNC_1ST_SLEEP:
case VN_ASYNC_2ND_SLEEP:
default:
// @TODO: assert?
break;
}
}
示例3: inint
static bool inint(SerialDriver *sdp) {
if (sdp->com_data != INVALID_SOCKET) {
int i;
uint8_t data[32];
/*
* Input.
*/
int n = recv(sdp->com_data, (char *)data, sizeof(data), 0);
switch (n) {
case 0:
closesocket(sdp->com_data);
sdp->com_data = INVALID_SOCKET;
chSysLockFromISR();
chnAddFlagsI(sdp, CHN_DISCONNECTED);
chSysUnlockFromISR();
return false;
case SOCKET_ERROR:
if (WSAGetLastError() == WSAEWOULDBLOCK)
return false;
closesocket(sdp->com_data);
sdp->com_data = INVALID_SOCKET;
return false;
}
for (i = 0; i < n; i++) {
chSysLockFromISR();
sdIncomingDataI(sdp, data[i]);
chSysUnlockFromISR();
}
return true;
}
return false;
}
示例4: usb_event
/*
* Handles the USB driver global events.
*/
static void usb_event(USBDriver *usbp, usbevent_t event) {
extern SerialUSBDriver SDU1;
extern SerialUSBDriver SDU2;
switch (event) {
case USB_EVENT_RESET:
return;
case USB_EVENT_ADDRESS:
return;
case USB_EVENT_CONFIGURED:
chSysLockFromISR();
if (usbp->state == USB_ACTIVE) {
/* Enables the endpoints specified into the configuration.
Note, this callback is invoked from an ISR so I-Class functions
must be used.*/
usbInitEndpointI(usbp, USB_INTERRUPT_REQUEST_EP_A, &ep1config);
usbInitEndpointI(usbp, USB_DATA_REQUEST_EP_A, &ep2config);
usbInitEndpointI(usbp, USB_INTERRUPT_REQUEST_EP_B, &ep3config);
usbInitEndpointI(usbp, USB_DATA_REQUEST_EP_B, &ep4config);
/* Resetting the state of the CDC subsystem.*/
sduConfigureHookI(&SDU1);
sduConfigureHookI(&SDU2);
}
else if (usbp->state == USB_SELECTED) {
usbDisableEndpointsI(usbp);
}
chSysUnlockFromISR();
return;
case USB_EVENT_UNCONFIGURED:
return;
case USB_EVENT_SUSPEND:
chSysLockFromISR();
/* Disconnection event on suspend.*/
sduDisconnectI(&SDU1);
sduDisconnectI(&SDU2);
chSysUnlockFromISR();
return;
case USB_EVENT_WAKEUP:
return;
case USB_EVENT_STALLED:
return;
}
return;
}
示例5: spi_end_cb
static void spi_end_cb(SPIDriver *spip){
its++;
if (stop){
chSysLockFromISR();
chBSemSignalI(&sem);
chSysUnlockFromISR();
return;
}
else{
chSysLockFromISR();
spiStartExchangeI(spip, SPI_BUF_SIZE, testbuf_flash, testbuf_ram);
chSysUnlockFromISR();
}
}
示例6: tmrfunc
/*
* Insertion monitor timer callback function.
*
* pointer to the p BaseBlockDevice object
*
*/
static void tmrfunc( void *p )
{
BaseBlockDevice *bbdp = p;
chSysLockFromISR();
if( cnt > 0 )
{
if( blkIsInserted( bbdp ) )
{
if( --cnt == 0 )
{
chEvtBroadcastI( &inserted_event );
}
}
else
{
cnt = POLLING_INTERVAL;
}
}
else if( ! blkIsInserted( bbdp ) )
{
cnt = POLLING_INTERVAL;
chEvtBroadcastI( &removed_event );
}
chVTSetI( &tmr, MS2ST( POLLING_DELAY ), tmrfunc, bbdp );
chSysUnlockFromISR();
}
示例7: wakeup
/*
* Timeout wakeup callback.
*/
static void wakeup(void *p) {
thread_t *tp = (thread_t *)p;
chSysLockFromISR();
switch (tp->p_state) {
case CH_STATE_READY:
/* Handling the special case where the thread has been made ready by
another thread with higher priority.*/
chSysUnlockFromISR();
return;
case CH_STATE_SUSPENDED:
*(thread_reference_t *)tp->p_u.wtobjp = NULL;
break;
#if CH_CFG_USE_SEMAPHORES
case CH_STATE_WTSEM:
chSemFastSignalI((semaphore_t *)tp->p_u.wtobjp);
/* Falls into, intentional. */
#endif
#if CH_CFG_USE_CONDVARS && CH_CFG_USE_CONDVARS_TIMEOUT
case CH_STATE_WTCOND:
#endif
case CH_STATE_QUEUED:
/* States requiring dequeuing.*/
queue_dequeue(tp);
}
tp->p_u.rdymsg = MSG_TIMEOUT;
chSchReadyI(tp);
chSysUnlockFromISR();
}
示例8: usb_event
/*
* Handles the USB driver global events.
*/
static void usb_event(USBDriver *usbp, usbevent_t event) {
switch (event) {
case USB_EVENT_RESET:
return;
case USB_EVENT_ADDRESS:
return;
case USB_EVENT_CONFIGURED:
chSysLockFromISR();
/* Enables the endpoints specified into the configuration.
Note, this callback is invoked from an ISR so I-Class functions
must be used.*/
usbInitEndpointI(usbp, USBD2_DATA_REQUEST_EP, &ep1config);
usbInitEndpointI(usbp, USBD2_INTERRUPT_REQUEST_EP, &ep2config);
chSysUnlockFromISR();
return;
case USB_EVENT_UNCONFIGURED:
return;
case USB_EVENT_SUSPEND:
return;
case USB_EVENT_WAKEUP:
return;
case USB_EVENT_STALLED:
return;
}
return;
}
示例9: connint
static bool connint(SerialDriver *sdp) {
if (sdp->com_data == INVALID_SOCKET) {
struct sockaddr addr;
int addrlen = sizeof(addr);
if ((sdp->com_data = accept(sdp->com_listen, &addr, &addrlen)) == INVALID_SOCKET)
return false;
if (ioctlsocket(sdp->com_data, FIONBIO, &nb) != 0) {
printf("%s: Unable to setup non blocking mode on data socket\n", sdp->com_name);
goto abort;
}
chSysLockFromISR();
chnAddFlagsI(sdp, CHN_CONNECTED);
chSysUnlockFromISR();
return true;
}
return false;
abort:
if (sdp->com_listen != INVALID_SOCKET)
closesocket(sdp->com_listen);
if (sdp->com_data != INVALID_SOCKET)
closesocket(sdp->com_data);
WSACleanup();
exit(1);
}
示例10: txend1
/*
* This callback is invoked when a transmission buffer has been completely
* read by the driver.
*/
static void txend1(UARTDriver *uartp) {
its++;
chSysLockFromISR();
uartStartSendI(uartp, STORM_BUF_LEN, txbuf);
chSysUnlockFromISR();
}
示例11: rxend
/*
* This callback is invoked when a receive buffer has been completely written.
*/
static void rxend(UARTDriver *uartp) {
(void)uartp;
chSysLockFromISR();
uartStartReceiveI(&UARTD6, STORM_BUF_LEN, rxbuf);
chSysUnlockFromISR();
}
示例12: adcerrorcallback
/**
* Adc error callback
*
* Fired if DMA error happens or ADC overflows
*/
static void adcerrorcallback(ADCDriver *adcp, adcerror_t err)
{
chSysLockFromISR();
adcp_err = adcp;
adc_error_flag = err;
chSysUnlockFromISR();
}
示例13: otg_epout_handler
/**
* @brief Generic endpoint OUT handler.
*
* @param[in] usbp pointer to the @p USBDriver object
* @param[in] ep endpoint number
*
* @notapi
*/
static void otg_epout_handler(USBDriver *usbp, usbep_t ep) {
stm32_otg_t *otgp = usbp->otg;
uint32_t epint = otgp->oe[ep].DOEPINT;
/* Resets all EP IRQ sources.*/
otgp->oe[ep].DOEPINT = epint;
if ((epint & DOEPINT_STUP) && (otgp->DOEPMSK & DOEPMSK_STUPM)) {
/* Setup packets handling, setup packets are handled using a
specific callback.*/
_usb_isr_invoke_setup_cb(usbp, ep);
}
if ((epint & DOEPINT_XFRC) && (otgp->DOEPMSK & DOEPMSK_XFRCM)) {
/* Receive transfer complete.*/
USBOutEndpointState *osp = usbp->epc[ep]->out_state;
if (osp->rxsize < osp->totsize) {
/* In case the transaction covered only part of the total transfer
then another transaction is immediately started in order to
cover the remaining.*/
osp->rxsize = osp->totsize - osp->rxsize;
osp->rxcnt = 0;
usb_lld_prepare_receive(usbp, ep);
chSysLockFromISR();
usb_lld_start_out(usbp, ep);
chSysUnlockFromISR();
}
else {
/* End on OUT transfer.*/
_usb_isr_invoke_out_cb(usbp, ep);
}
}
}
示例14: usb_event
static void usb_event(USBDriver *usbp, usbevent_t event) {
switch (event) {
case USB_EVENT_RESET:
return;
case USB_EVENT_ADDRESS:
return;
case USB_EVENT_CONFIGURED:
chSysLockFromISR();
/* Enable the endpoints specified in the configuration.
Note, this callback is invoked from an ISR so I-Class functions must be used.*/
usbInitEndpointI(usbp, USBD2_DATA_IN_EP, &ep1config);
usbInitEndpointI(usbp, USBD2_INTERRUPT_REQUEST_EP, &ep2config);
sduConfigureHookI(&UsbCDC.SDU2); // Resetting the state of the CDC subsystem
App.SignalEvtI(EVTMSK_USB_READY);
chSysUnlockFromISR();
return;
case USB_EVENT_SUSPEND:
return;
case USB_EVENT_WAKEUP:
return;
case USB_EVENT_STALLED:
return;
} // switch
}
示例15: i2cDmaIrqHandler
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();
}