您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ ENTER_CRITICAL_SECTION函数代码示例

51自学网 2021-06-01 20:32:53
  C++
这篇教程C++ ENTER_CRITICAL_SECTION函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中ENTER_CRITICAL_SECTION函数的典型用法代码示例。如果您正苦于以下问题:C++ ENTER_CRITICAL_SECTION函数的具体用法?C++ ENTER_CRITICAL_SECTION怎么用?C++ ENTER_CRITICAL_SECTION使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了ENTER_CRITICAL_SECTION函数的23个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: ENTER_CRITICAL_SECTION

/** * @brief get message that matches the header in the queue * * NOTE it matches only daddr, saddr, did, sid, type * NOTE it only gets the first that matches the description */Message *mq_get(mq_t *q, Message *m){  HAS_CRITICAL_SECTION;  Message *ret;#ifdef SOS_USE_PREEMPTION  if(q->head == NULL) return NULL;  ENTER_CRITICAL_SECTION();  // Search the queue  ret = mq_real_get(&(q->head), m);#else  if(q->msg_cnt == 0) return NULL;  ENTER_CRITICAL_SECTION();	  //! first search high priority queue  ret = mq_real_get(&(q->hq_head), &(q->hq_tail), m);  if(ret) {	q->msg_cnt--;	LEAVE_CRITICAL_SECTION();	return ret;  }  //! search low priority queue  ret = mq_real_get(&(q->lq_head), &(q->lq_tail), m);  if(ret) {	q->msg_cnt--;  }#endif  LEAVE_CRITICAL_SECTION();  return ret;}
开发者ID:nesl,项目名称:sos-2x,代码行数:38,


示例2: radio_msg_alloc

/************************************************************************* * will be called by post_net, etc functions to send message             * *************************************************************************/void radio_msg_alloc(Message *msg){	HAS_CRITICAL_SECTION;	uint16_t sleeptime = 0;	uint8_t resend_pack = 1;	ENTER_CRITICAL_SECTION();	if( Radio_Check_CCA() ) {		incSeq();		if(radio_msg_send(msg))		{			resend_pack = 0;			msg_send_senddone(msg, 1, RADIO_PID);		}	}		if(resend_pack)	{		if( getMsgNumOfQueue() < MAX_MSGS_IN_QUEUE )		//queue is full?		{			mq_enqueue(&vmac_pq, msg);			ENTER_CRITICAL_SECTION(); // most probably mq_enqueue calls LEAVE_CRITICAL_SECTION somewhere!		}		else		{			msg_send_senddone(msg, 0, RADIO_PID);		//release the memory for the msg			ENTER_CRITICAL_SECTION(); // most probably msg_send_senddone calls LEAVE_CRITICAL_SECTION somewhere!		}		sleeptime = MacBackoff_congestionBackoff(retry_count);		ker_timer_restart(RADIO_PID, WAKEUP_TIMER_TID, sleeptime);	// setup backoff timer	}	LEAVE_CRITICAL_SECTION();}
开发者ID:nesl,项目名称:sos-2x,代码行数:38,


示例3: FddpPushJobItem

static BOOL FddpPushJobItem(FDD_JOB_ITEM *pJobItem){	BOOL bResult = TRUE;ENTER_CRITICAL_SECTION();	{		/* check up the remain space of Q */		if(m_JobItemQ.cnt >= FDD_JOB_ITEM_Q_SIZE) {			bResult = FALSE;			goto $exit;		}		/* process */		m_JobItemQ.cnt++;		m_JobItemQ.queue[m_JobItemQ.tail].type					= pJobItem->type;		m_JobItemQ.queue[m_JobItemQ.tail].sector				= pJobItem->sector;		m_JobItemQ.queue[m_JobItemQ.tail].numbers_of_sectors	= pJobItem->numbers_of_sectors;		m_JobItemQ.queue[m_JobItemQ.tail].pt_data				= pJobItem->pt_data;		m_JobItemQ.queue[m_JobItemQ.tail].thread				= pJobItem->thread;		m_JobItemQ.tail++;		if(m_JobItemQ.tail >= FDD_JOB_ITEM_Q_SIZE)			m_JobItemQ.tail = 0;	}$exit:EXIT_CRITICAL_SECTION();	return bResult;}
开发者ID:na94ojt,项目名称:MyPlayground,代码行数:27,


示例4: SafeRealloc

int SafeRealloc(void **Memory_ptr, size_t NewBytes){	void *New;#ifdef WIN32	ENTER_CRITICAL_SECTION(AllocCS);#else	LOCK_SPIN(AllocSpin);#endif /* WIN32 */	New = realloc(*Memory_ptr, NewBytes);#ifdef WIN32	LEAVE_CRITICAL_SECTION(AllocCS);#else	UNLOCK_SPIN(AllocSpin);#endif /* WIN32 */	if(New != NULL)	{		*Memory_ptr = New;		return 0;	} else {		return -1;	}}
开发者ID:galenzhao,项目名称:dnsforwarder,代码行数:25,


示例5: FddpPopJobItem

static BOOL FddpPopJobItem(FDD_JOB_ITEM *pJobItem){	BOOL bResult = TRUE;ENTER_CRITICAL_SECTION();	{		/* check up count */		if(m_JobItemQ.cnt == 0) {			bResult = FALSE;			goto $exit;		}		/* process */		m_JobItemQ.cnt--;		pJobItem->type					= m_JobItemQ.queue[m_JobItemQ.head].type;		pJobItem->sector				= m_JobItemQ.queue[m_JobItemQ.head].sector;		pJobItem->numbers_of_sectors	= m_JobItemQ.queue[m_JobItemQ.head].numbers_of_sectors;		pJobItem->pt_data				= m_JobItemQ.queue[m_JobItemQ.head].pt_data;		pJobItem->thread				= m_JobItemQ.queue[m_JobItemQ.head].thread;		m_JobItemQ.head++;		if(m_JobItemQ.head >= FDD_JOB_ITEM_Q_SIZE)			m_JobItemQ.head = 0;	}$exit:EXIT_CRITICAL_SECTION();	return bResult;}
开发者ID:na94ojt,项目名称:MyPlayground,代码行数:27,


示例6: eMBRTUReceive

eMBErrorCodeeMBRTUReceive( UCHAR * pucRcvAddress, UCHAR ** pucFrame, USHORT * pusLength ){    BOOL            xFrameReceived = FALSE;    eMBErrorCode    eStatus = MB_ENOERR;    ENTER_CRITICAL_SECTION();    assert( usRcvBufferPos < MB_SER_PDU_SIZE_MAX );    /* Length and CRC check */    if( ( usRcvBufferPos >= MB_SER_PDU_SIZE_MIN )        && ( usMBCRC16( ( UCHAR * ) ucRTUBuf, usRcvBufferPos ) == 0 ) )    {        /* Save the address field. All frames are passed to the upper layed         * and the decision if a frame is used is done there.         */        *pucRcvAddress = ucRTUBuf[MB_SER_PDU_ADDR_OFF];        /* Total length of Modbus-PDU is Modbus-Serial-Line-PDU minus         * size of address field and CRC checksum.         */        *pusLength = ( USHORT )( usRcvBufferPos - MB_SER_PDU_PDU_OFF - MB_SER_PDU_SIZE_CRC );        /* Return the start of the Modbus PDU to the caller. */        *pucFrame = ( UCHAR * ) & ucRTUBuf[MB_SER_PDU_PDU_OFF];        xFrameReceived = TRUE;    }    else    {        eStatus = MB_EIO;    }    EXIT_CRITICAL_SECTION();    return eStatus;}
开发者ID:zpcaams,项目名称:osm,代码行数:35,


示例7: eMBMasterRTUReceive

/************************************************************************* * eMBMasterRTUReceive * Функция приёма данных и проверка их целосности. *************************************************************************/eMBErrorCodeeMBMasterRTUReceive( UCHAR * pucRcvAddress, UCHAR ** pucFrame, USHORT * pusLength ){    eMBErrorCode    eStatus = MB_ENOERR;    ENTER_CRITICAL_SECTION(  );    assert_param( usMasterRcvBufferPos < MB_SER_PDU_SIZE_MAX );    // Проверка длинны пакета и его CRC    if( ( usMasterRcvBufferPos >= MB_SER_PDU_SIZE_MIN )        && ( usMBCRC16( ( UCHAR * ) ucMasterRTURcvBuf, usMasterRcvBufferPos ) == 0 ) )    {        // Save the address field. All frames are passed to the upper layed and the decision if a frame is used is done there.        *pucRcvAddress = ucMasterRTURcvBuf[MB_SER_PDU_ADDR_OFF];        // Общая длина данных(Modbus-PDU) без поля адреса и CRC.        *pusLength = ( USHORT )( usMasterRcvBufferPos - MB_SER_PDU_PDU_OFF - MB_SER_PDU_SIZE_CRC );        // Адрес начала данных(Modbus-PDU)        *pucFrame = ( UCHAR * ) & ucMasterRTURcvBuf[MB_SER_PDU_PDU_OFF];    }    else    {        eStatus = MB_EIO;    }    EXIT_CRITICAL_SECTION(  );    return eStatus;}
开发者ID:bearxiong99,项目名称:SmI_IEC104,代码行数:33,


示例8: timer_init

/** * Timer initialization */void timer_init(uint8_t interval, uint8_t scale){    HAS_CRITICAL_SECTION;    ENTER_CRITICAL_SECTION();                                                                                   scale &= 0x7;    scale |= 0x8;                                                                                   cbi(TIMSK, TOIE0);    cbi(TIMSK, OCIE0);    //!< Disable TC0 interrupt                                                                                   /**     *  set Timer/Counter0 to be asynchronous     *  from the CPU clock with a second external     *  clock(32,768kHz)driving it     */    sbi(ASSR, AS0);    outp(scale, TCCR0);    //!< prescale the timer to be clock/128 to make it                                                                                   outp(0, TCNT0);    outp(interval, OCR0);    sbi(TIMSK, OCIE0);    LEAVE_CRITICAL_SECTION();}
开发者ID:minf,项目名称:avrora,代码行数:28,


示例9: vMBPortSerialEnable

/* ----------------------- Start implementation -----------------------------*/void vMBPortSerialEnable( BOOL xRxEnable, BOOL xTxEnable ){	/* If xRXEnable enable serial receive interrupts. If xTxENable enable	 * transmitter empty interrupts.	 */	ENTER_CRITICAL_SECTION(  );	if(xRxEnable){		//SciaRegs.SCICTL1.bit.RXENA = 1;		SciaRegs.SCICTL2.bit.RXBKINTENA =1;	}	else {		//SciaRegs.SCICTL1.bit.RXENA = 0;		SciaRegs.SCICTL2.bit.RXBKINTENA =0;	}	if(xTxEnable){		//SciaRegs.SCICTL1.bit.TXENA = 1;		SciaRegs.SCICTL2.bit.TXINTENA =1;		SciaRegs.SCICTL2.bit.TXEMPTY = 0;		SciaRegs.SCICTL1.bit.SWRESET = 0;		SciaRegs.SCICTL1.bit.SWRESET = 1;		//IFR = 0x0000;	}	else{		//SciaRegs.SCICTL1.bit.TXENA = 0;		SciaRegs.SCICTL2.bit.TXINTENA =0;	}	EXIT_CRITICAL_SECTION(  );}
开发者ID:niunuinui,项目名称:2833xFreeModbus,代码行数:30,


示例10: __attribute__

/** * Write a block of data into flash (block size is 64 bytes) * Note: this routine has to be in the RAM. */static void __attribute__ ((section(".data"))) flash_write_block( uint32_t addr, uint8_t* buf, uint16_t len ){	HAS_CRITICAL_SECTION;	register uint16_t i;	register uint16_t* d = (uint16_t*) ((uint16_t)addr);	register uint16_t* b = (uint16_t*) buf;		ENTER_CRITICAL_SECTION();	while( FCTL3 & BUSY );		FCTL2 = FWKEY + FSSEL1 + FN2;   // SMCLK / 5	FCTL3 = FWKEY;                  // Clear LOCK	FCTL1 = FWKEY + BLKWRT + WRT;   // Enable block write		for( i = 0; i < 32; i++ ) {		*d = *b;		d++;		b++;		while( (FCTL3 & WAIT) == 0);	}	FCTL1 = FWKEY;                  // Clear WRT and BLKWRT		while( FCTL3 & BUSY );          // Test Busy		FCTL3 = FWKEY + LOCK;           // Set LOCK	LEAVE_CRITICAL_SECTION();}
开发者ID:nesl,项目名称:sos-2x,代码行数:33,


示例11: ker_spi_send_data

/** * Send data over the spi */int8_t ker_spi_send_data(		uint8_t *msg,		uint8_t msg_size,		uint8_t calling_id) {	HAS_CRITICAL_SECTION;	if (s.state == SPI_SYS_IDLE) {		return -EINVAL;	}		if ((s.calling_mod_id != calling_id) || ((s.state != SPI_SYS_WAIT) && (s.state != SPI_SYS_DMA_WAIT))) {		return -EBUSY;	}	// ensure calling app gave us a message	if (NULL != msg) {		s.usrBuf = s.bufPtr = msg;	} else {		return -EINVAL;	}		// need to assert CS pin	if (s.flags & SPI_SYS_CS_HIGH_FLAG) {		spi_cs_high(s.addr);	} else {		spi_cs_low(s.addr);	}	ENTER_CRITICAL_SECTION();	s.len = msg_size;	s.state = SPI_SYS_TX;	LEAVE_CRITICAL_SECTION();	UART_DBG(a, 0x22, s.calling_mod_id, 0x01, 0x02, SPI_PID);	  return spi_masterTxData(s.bufPtr, s.len, s.flags);}
开发者ID:nesl,项目名称:sos-2x,代码行数:38,


示例12: WritePATable

// *************************************************************************************************// @fn          WritePATable// @brief       Write data to power table// @param       unsigned char value             Value to write// @return      none// *************************************************************************************************void WritePATable(unsigned char value){   unsigned char readbackPATableValue = 0;   u16 int_state;   ENTER_CRITICAL_SECTION(int_state);   while (readbackPATableValue != value)   {      while (!(RF1AIFCTL1 & RFINSTRIFG)) ;      RF1AINSTRW = 0x7E00 + value;      // PA Table write (burst)      while (!(RF1AIFCTL1 & RFINSTRIFG)) ;      RF1AINSTRB = RF_SNOP;     // reset pointer      while (!(RF1AIFCTL1 & RFINSTRIFG)) ;      RF1AINSTRB = 0xFE;        // PA Table read (burst)      while (!(RF1AIFCTL1 & RFDINIFG)) ;      RF1ADINB = 0x00;          //dummy write      while (!(RF1AIFCTL1 & RFDOUTIFG)) ;      readbackPATableValue = RF1ADOUT0B;      while (!(RF1AIFCTL1 & RFINSTRIFG)) ;      RF1AINSTRB = RF_SNOP;   }   EXIT_CRITICAL_SECTION(int_state);}
开发者ID:alkin,项目名称:tidecc,代码行数:36,


示例13: protocolSendPacket

void protocolSendPacket(uint8 *buf, uint8 len){    uint16	checksum;    if ( (len!=PDU_SIZE) || (g_serialPortRecvState!=STATE_RX_IDLE) )    {    	return ;    }    ENTER_CRITICAL_SECTION();	g_serialPortBufSendCnt = len;	g_serialPortSendPtr = g_serialPortBuf;	checksum = computeChecksum(buf, len-2);	buf[CSM_OFF] = (uint8)(checksum & 0xFF);    buf[CSM_OFF+1] = (uint8)(checksum >> 8);    g_serialPortSendState = STATE_TX_XMIT;    serialPortEnable(FALSE, TRUE);    EXIT_CRITICAL_SECTION();    return ;}
开发者ID:jrlee420,项目名称:M430Boot,代码行数:25,


示例14: eMBMasterRTUSend

/************************************************************************* * eMBMasterRTUSend * отправка пакета в MODBUS *************************************************************************/eMBErrorCodeeMBMasterRTUSend( UCHAR ucSlaveAddress, const UCHAR * pucFrame, USHORT usLength ){    eMBErrorCode    eStatus = MB_ENOERR;    USHORT          usCRC16;    if ( ucSlaveAddress > MB_MASTER_TOTAL_SLAVE_NUM ) return MB_EINVAL;    ENTER_CRITICAL_SECTION(  );    // Если приемник в режиме ожидания.    if( eRcvState == STATE_M_RX_IDLE )    {        // Первый байт  до PDU это slave address.        pucMasterSndBufferCur = ( UCHAR * ) pucFrame - 1;        usMasterSndBufferCount = 1;        // Добавляем к пакету SlaveAddress        pucMasterSndBufferCur[MB_SER_PDU_ADDR_OFF] = ucSlaveAddress;        usMasterSndBufferCount += usLength;        // считаем CRC16        usCRC16 = usMBCRC16( ( UCHAR * ) pucMasterSndBufferCur, usMasterSndBufferCount );        ucMasterRTUSndBuf[usMasterSndBufferCount++] = ( UCHAR )( usCRC16 & 0xFF );        ucMasterRTUSndBuf[usMasterSndBufferCount++] = ( UCHAR )( usCRC16 >> 8 );        // Режим предачи.        eSndState = STATE_M_TX_XMIT;        xMBMasterPortSerialPutBUF(( CHAR *)pucMasterSndBufferCur,usMasterSndBufferCount);						// передадим в порт весь блок сразу        xFrameIsBroadcast = ( ucMasterRTUSndBuf[MB_SER_PDU_ADDR_OFF] == MB_ADDRESS_BROADCAST ) ? TRUE : FALSE;	// определяем широковещательный ли ?    }
开发者ID:bearxiong99,项目名称:SmI_IEC104,代码行数:36,


示例15: eMBRTUStop

/** ----------------------------------------------------------------------------------------------------------------------- eMBRTUStop -----------------------------------------------------------------------------------------------------------------------*   Event Handler for GPI module** 	@date       			DEC/02/2013* 	@author                         FW_DEV_2* 	@pre                            None* 	@return	 			None*************************************************************************************************************************/void eMBRTUStop( void ){    ENTER_CRITICAL_SECTION(  );    vMBPortSerialEnable( FALSE, FALSE );    vMBPortTimersDisable(  );    EXIT_CRITICAL_SECTION(  );}
开发者ID:ankit4970,项目名称:modbus_lpc1769,代码行数:19,


示例16: ENTER_CRITICAL_SECTION

void CMainFrame::OnCommand(UINT /*wNotifyCode*/, int wID, HWND /*hwndCtl*/){	ENTER_CRITICAL_SECTION(&m_csThreadRefreshStatus);	// Commands which do not change the tree are sent to the object directly.	CTreeItem itemSelected = m_view.GetSelectedItem();	if ( itemSelected.IsNull() )	{		LEAVE_CRITICAL_SECTION(&m_csThreadRefreshStatus);		return;	}	CDiskObjectPtr obj;	const CObjectUIHandler *phandler;	obj = m_mapObject[m_view.GetItemData(itemSelected)];	ATLASSERT( obj.get() != NULL );	phandler = CObjectUIHandler::GetUIHandler( obj );	phandler->OnCommand( obj, wID );		m_view.UpdateDiskObject( obj );	OnSelChanged(NULL);	LEAVE_CRITICAL_SECTION(&m_csThreadRefreshStatus);}
开发者ID:yzx65,项目名称:ndas4windows,代码行数:26,


示例17: mouse_up_count

// mouse_up_count() returns the number of times button n has gone from down to up// since the last call//// parameters:  n - button of mouse (see #define's in mouse.h)//int mouse_up_count(int n){	int tmp = 0;	if ( !mouse_inited ) return 0;	if ( (n < LOWEST_MOUSE_BUTTON) || (n > HIGHEST_MOUSE_BUTTON)) return 0;	ENTER_CRITICAL_SECTION( mouse_lock );	switch (n) {		case MOUSE_LEFT_BUTTON:			tmp = mouse_left_up;			mouse_left_up = 0;			break;		case MOUSE_RIGHT_BUTTON:			tmp = mouse_right_up;			mouse_right_up = 0;			break;		case MOUSE_MIDDLE_BUTTON:			tmp = mouse_middle_up;			mouse_middle_up = 0;			break;		default:			Assert(0);	// can't happen			break;	} // end switch	LEAVE_CRITICAL_SECTION( mouse_lock );		return tmp;}
开发者ID:Admiral-MS,项目名称:fs2open.github.com,代码行数:39,


示例18: sp_create

sp_pid_t sp_create( task_t task, uint8_t priority ){  sp_pid_t i;  HAS_CRITICAL_SECTION;    ENTER_CRITICAL_SECTION();  // Search for empty slot  for( i = 0; i < SPK_MAX_TASKS; i++ ) {    // Found an empty slot    if( spk_tasks[i].task == NULL ) {      spk_tasks[i].lc       = 0;      // The pid field is not being used      spk_tasks[i].status   = TASK_WAITING;      spk_tasks[i].priority = priority;      spk_tasks[i].errno    = 0;      spk_tasks[i].task     = task;      spk_tasks[i].wait_obj = NULL;      spk_tasks[i].next     = NULL;      LEAVE_CRITICAL_SECTION();      sp_signal( i );      return i;    }  }  // All slots taken  LEAVE_CRITICAL_SECTION();  SP_EXCEPTION();  return 0;}
开发者ID:nesl,项目名称:splt,代码行数:28,


示例19: uxos_update_sysclock

static void uxos_update_sysclock(){	uint16_t temp_overflow_count;	ENTER_CRITICAL_SECTION();	temp_overflow_count=uxos_get_overflow();	EXIT_CRITICAL_SECTION();	if (temp_overflow_count>0)	{		ENTER_CRITICAL_SECTION();		uxos_clear_overflow();		EXIT_CRITICAL_SECTION();		uxos_timer_update(temp_overflow_count);	} 		}
开发者ID:wkxboot,项目名称:rtos,代码行数:16,


示例20: timer_hardware_init

/**  * @brief timer hardware routine */void timer_hardware_init(uint8_t interval, uint8_t scale){	HAS_CRITICAL_SECTION;	ENTER_CRITICAL_SECTION();	scale &= 0x7;	scale |= (1<<WGM1); // reset on match		TIMSK &= ((unsigned char)~(1 << (TOIE0)));	TIMSK &= ((unsigned char)~(1 << (OCIE0)));	//!< Disable TC0 interrupt	/** 	 *  set Timer/Counter0 to be asynchronous 	 *  from the CPU clock with a second external 	 *  clock(32,768kHz)driving it	 */	ASSR |= (1 << (AS0)); //!< us external oscillator	TCCR0 = scale;	TCNT0 = 0;	OCR0 = interval;	//TIMSK |= (1 << (OCIE0)); replaced by the line below	timer_enable_interrupt();	LEAVE_CRITICAL_SECTION();	timer_init();}   
开发者ID:nesl,项目名称:sos-2x,代码行数:30,


示例21: key_flush

//	Flush the keyboard buffer.//	Clear the keyboard array (keyd_pressed).void key_flush(){	int i;	uint CurTime;	if ( !key_inited ) return;	ENTER_CRITICAL_SECTION( key_lock );		key_data.keyhead = key_data.keytail = 0;	//Clear the keyboard buffer	for (i=0; i<KEY_BUFFER_SIZE; i++ )	{		key_data.keybuffer[i] = 0;		key_data.time_pressed[i] = 0;	}		//Clear the keyboard array	CurTime = timer_get_milliseconds();	for (i=0; i<NUM_KEYS; i++ )	{		keyd_pressed[i] = 0;		key_data.TimeKeyDownChecked[i] = CurTime;		key_data.TimeKeyWentDown[i] = CurTime;		key_data.TimeKeyHeldDown[i] = 0;		key_data.NumDowns[i]=0;		key_data.NumUps[i]=0;	}	LEAVE_CRITICAL_SECTION( key_lock );	}
开发者ID:Admiral-MS,项目名称:fs2open.github.com,代码行数:35,


示例22: eMBRTUSend

eMBErrorCodeeMBRTUSend( UCHAR ucSlaveAddress, const UCHAR * pucFrame, USHORT usLength ){    eMBErrorCode    eStatus = MB_ENOERR;    USHORT          usCRC16;    ENTER_CRITICAL_SECTION(  );    /* Check if the receiver is still in idle state. If not we where to     * slow with processing the received frame and the master sent another     * frame on the network. We have to abort sending the frame.     */    if( eRcvState == STATE_RX_IDLE )    {        /* First byte before the Modbus-PDU is the slave address. */        pucSndBufferCur = ( UCHAR * ) pucFrame - 1;        usSndBufferCount = 1;        /* Now copy the Modbus-PDU into the Modbus-Serial-Line-PDU. */        pucSndBufferCur[MB_SER_PDU_ADDR_OFF] = ucSlaveAddress;        usSndBufferCount += usLength;        /* Calculate CRC16 checksum for Modbus-Serial-Line-PDU. */        usCRC16 = usMBCRC16( ( UCHAR * ) pucSndBufferCur, usSndBufferCount );        ucRTUBuf[usSndBufferCount++] = ( UCHAR )( usCRC16 & 0xFF );        ucRTUBuf[usSndBufferCount++] = ( UCHAR )( usCRC16 >> 8 );                /* Activate the transmitter. */        //发送状态转换,在中断中不断发送        eSndState = STATE_TX_XMIT;                //使能发送状态,禁止接收状态        vMBPortSerialEnable( FALSE, TRUE );    }
开发者ID:zpcaams,项目名称:osm,代码行数:34,


示例23: key_get_shift_status

//	Set global shift_status with modifier results (shift, ctrl, alt).uint key_get_shift_status(){	unsigned int shift_status = 0;	if ( !key_inited ) return 0;	ENTER_CRITICAL_SECTION( key_lock );			if ( keyd_pressed[KEY_LSHIFT] || keyd_pressed[KEY_RSHIFT] )		shift_status |= KEY_SHIFTED;	if ( keyd_pressed[KEY_LALT] || keyd_pressed[KEY_RALT] )		shift_status |= KEY_ALTED;	if ( keyd_pressed[KEY_LCTRL] || keyd_pressed[KEY_RCTRL] )		shift_status |= KEY_CTRLED;#ifndef NDEBUG	if (keyd_pressed[KEY_DEBUG_KEY])		shift_status |= KEY_DEBUGGED;#else	if (keyd_pressed[KEY_DEBUG_KEY]) {		mprintf(("Cheats_enabled = %i, Key_normal_game = %i/n", Cheats_enabled, Key_normal_game));		if ((Cheats_enabled) && Key_normal_game) {			mprintf(("Debug key/n"));			shift_status |= KEY_DEBUGGED1;		}	}#endif	LEAVE_CRITICAL_SECTION( key_lock );			return shift_status;}
开发者ID:Admiral-MS,项目名称:fs2open.github.com,代码行数:34,



注:本文中的ENTER_CRITICAL_SECTION函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ ENTER_STMT_CS函数代码示例
C++ ENTER_CRITICAL_REGION函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。