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

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

51自学网 2021-06-03 10:14:19
  C++
这篇教程C++ xSemaphoreGive函数代码示例写得很实用,希望能帮到您。

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

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

示例1: updateTask

//.........这里部分代码省略.........         ship2.vel.x = 0;         ship2.vel.y = 0;         ship2.accel = 0;         ship2.a_vel = 0;      }      if (ship2.pos.y - SHIP_OFFSET < WALL_EDGE) {         ship2.pos.y += WALL_BOUNCE;         ship2.vel.x = 0;         ship2.vel.y = 0;         ship2.accel = 0;         ship2.a_vel = 0;      } else if (ship2.pos.y + SHIP_OFFSET > SCREEN_H - (WALL_EDGE)) {         ship2.pos.y -= WALL_BOUNCE;         ship2.vel.x = 0;         ship2.vel.y = 0;         ship2.accel = 0;         ship2.a_vel = 0;      }      		// move bullets_ship1		objPrev = NULL;		objIter = bullets_ship1;		while (objIter != NULL) {			// Kill bullet after a while			objIter->life += FRAME_DELAY_MS;			if (objIter->life >= BULLET_LIFE_MS) {				xSemaphoreTake(usartMutex, portMAX_DELAY);				vSpriteDelete(objIter->handle);				if (objPrev != NULL) {					objPrev->next = objIter->next;					vPortFree(objIter);					objIter = objPrev->next;				} else {					bullets_ship1 = objIter->next;					vPortFree(objIter);					objIter = bullets_ship1;				}				xSemaphoreGive(usartMutex);			} else {            objIter->pos.x += objIter->vel.x;            objIter->pos.y += objIter->vel.y;            if (objIter->pos.x < 0.0) {             objIter->pos.x += SCREEN_W;            } else if (objIter->pos.x > SCREEN_W) {             objIter->pos.x -= SCREEN_W;            }            if (objIter->pos.y < 0.0) {             objIter->pos.y += SCREEN_H;            } else if (objIter->pos.y > SCREEN_H) {             objIter->pos.y -= SCREEN_H;            }            objPrev = objIter;            objIter = objIter->next;			}					}      // move bullets_ship2      objPrev = NULL;      objIter = bullets_ship2;      while (objIter != NULL) {         // Kill bullet after a while         objIter->life += FRAME_DELAY_MS;         if (objIter->life >= BULLET_LIFE_MS) {            xSemaphoreTake(usartMutex, portMAX_DELAY);            vSpriteDelete(objIter->handle);            if (objPrev != NULL) {               objPrev->next = objIter->next;               vPortFree(objIter);               objIter = objPrev->next;            } else {               bullets_ship2 = objIter->next;               vPortFree(objIter);               objIter = bullets_ship2;            }            xSemaphoreGive(usartMutex);         } else {            objIter->pos.x += objIter->vel.x;            objIter->pos.y += objIter->vel.y;            if (objIter->pos.x < 0.0) {               objIter->pos.x += SCREEN_W;            } else if (objIter->pos.x > SCREEN_W) {               objIter->pos.x -= SCREEN_W;            }            if (objIter->pos.y < 0.0) {               objIter->pos.y += SCREEN_H;            } else if (objIter->pos.y > SCREEN_H) {               objIter->pos.y -= SCREEN_H;            }            objPrev = objIter;            objIter = objIter->next;         }      }				vTaskDelay(FRAME_DELAY_MS / portTICK_RATE_MS);	}}
开发者ID:eddiecastropineda,项目名称:CollegeBound,代码行数:101,


示例2: vStartSemaphoreTasks

void vStartSemaphoreTasks( UBaseType_t uxPriority ){xSemaphoreParameters *pxFirstSemaphoreParameters, *pxSecondSemaphoreParameters;const TickType_t xBlockTime = ( TickType_t ) 100;	/* Create the structure used to pass parameters to the first two tasks. */	pxFirstSemaphoreParameters = ( xSemaphoreParameters * ) pvPortMalloc( sizeof( xSemaphoreParameters ) );	if( pxFirstSemaphoreParameters != NULL )	{		/* Create the semaphore used by the first two tasks. */		pxFirstSemaphoreParameters->xSemaphore = xSemaphoreCreateBinary();				if( pxFirstSemaphoreParameters->xSemaphore != NULL )		{			xSemaphoreGive( pxFirstSemaphoreParameters->xSemaphore );						/* Create the variable which is to be shared by the first two tasks. */			pxFirstSemaphoreParameters->pulSharedVariable = ( uint32_t * ) pvPortMalloc( sizeof( uint32_t ) );			/* Initialise the share variable to the value the tasks expect. */			*( pxFirstSemaphoreParameters->pulSharedVariable ) = semtstNON_BLOCKING_EXPECTED_VALUE;			/* The first two tasks do not block on semaphore calls. */			pxFirstSemaphoreParameters->xBlockTime = ( TickType_t ) 0;			/* Spawn the first two tasks.  As they poll they operate at the idle priority. */			xTaskCreate( prvSemaphoreTest, "PolSEM1", semtstSTACK_SIZE, ( void * ) pxFirstSemaphoreParameters, tskIDLE_PRIORITY, ( TaskHandle_t * ) NULL );			xTaskCreate( prvSemaphoreTest, "PolSEM2", semtstSTACK_SIZE, ( void * ) pxFirstSemaphoreParameters, tskIDLE_PRIORITY, ( TaskHandle_t * ) NULL );			/* vQueueAddToRegistry() adds the semaphore to the registry, if one			is in use.  The registry is provided as a means for kernel aware			debuggers to locate semaphores and has no purpose if a kernel aware			debugger is not being used.  The call to vQueueAddToRegistry() will			be removed by the pre-processor if configQUEUE_REGISTRY_SIZE is not			defined or is defined to be less than 1. */			vQueueAddToRegistry( ( QueueHandle_t ) pxFirstSemaphoreParameters->xSemaphore, "Counting_Sem_1" );		}	}	/* Do exactly the same to create the second set of tasks, only this time	provide a block time for the semaphore calls. */	pxSecondSemaphoreParameters = ( xSemaphoreParameters * ) pvPortMalloc( sizeof( xSemaphoreParameters ) );	if( pxSecondSemaphoreParameters != NULL )	{		pxSecondSemaphoreParameters->xSemaphore = xSemaphoreCreateBinary();				if( pxSecondSemaphoreParameters->xSemaphore != NULL )		{			xSemaphoreGive( pxSecondSemaphoreParameters->xSemaphore );						pxSecondSemaphoreParameters->pulSharedVariable = ( uint32_t * ) pvPortMalloc( sizeof( uint32_t ) );			*( pxSecondSemaphoreParameters->pulSharedVariable ) = semtstBLOCKING_EXPECTED_VALUE;			pxSecondSemaphoreParameters->xBlockTime = xBlockTime / portTICK_PERIOD_MS;			xTaskCreate( prvSemaphoreTest, "BlkSEM1", semtstSTACK_SIZE, ( void * ) pxSecondSemaphoreParameters, uxPriority, ( TaskHandle_t * ) NULL );			xTaskCreate( prvSemaphoreTest, "BlkSEM2", semtstSTACK_SIZE, ( void * ) pxSecondSemaphoreParameters, uxPriority, ( TaskHandle_t * ) NULL );			/* vQueueAddToRegistry() adds the semaphore to the registry, if one			is in use.  The registry is provided as a means for kernel aware			debuggers to locate semaphores and has no purpose if a kernel aware			debugger is not being used.  The call to vQueueAddToRegistry() will			be removed by the pre-processor if configQUEUE_REGISTRY_SIZE is not			defined or is defined to be less than 1. */			vQueueAddToRegistry( ( QueueHandle_t ) pxSecondSemaphoreParameters->xSemaphore, "Counting_Sem_2" );		}	}}
开发者ID:CliffsDover,项目名称:FreeRTOS-Sim,代码行数:68,


示例3: SdkEvalSpiInit

//.........这里部分代码省略.........  s_vectpxSpiPort = &s_vectpxSpiCsPortVersion[SdkEvalGetVersion()];    if(!SdkEvalGetVersion())  {    /* Enable SPI periph and SCLK, MOSI, MISO and CS GPIO clocks */    RCC_APB2PeriphClockCmd(SDK_EVAL_V2_SPI_PERIPH_RCC, ENABLE);    RCC_AHBPeriphClockCmd(SDK_EVAL_V2_SPI_PERIPH_MOSI_RCC | SDK_EVAL_V2_SPI_PERIPH_MISO_RCC | SDK_EVAL_V2_SPI_PERIPH_SCLK_RCC | SDK_EVAL_V2_SPI_PERIPH_CS_RCC, ENABLE);        /* Configure the AF for MOSI, MISO and SCLK GPIO pins*/    GPIO_PinAFConfig(SDK_EVAL_V2_SPI_PERIPH_MOSI_PORT, SDK_EVAL_V2_SPI_PERIPH_MOSI_RCC_SOURCE, SDK_EVAL_V2_SPI_PERIPH_MOSI_AF);    GPIO_PinAFConfig(SDK_EVAL_V2_SPI_PERIPH_MISO_PORT, SDK_EVAL_V2_SPI_PERIPH_MISO_RCC_SOURCE, SDK_EVAL_V2_SPI_PERIPH_MISO_AF);    GPIO_PinAFConfig(SDK_EVAL_V2_SPI_PERIPH_SCLK_PORT, SDK_EVAL_V2_SPI_PERIPH_SCLK_RCC_SOURCE, SDK_EVAL_V2_SPI_PERIPH_SCLK_AF);        /* Configure SPI pins:SCLK, MISO and MOSI */    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;    GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;        GPIO_InitStructure.GPIO_Pin = SDK_EVAL_V2_SPI_PERIPH_SCLK_PIN;    GPIO_Init(SDK_EVAL_V2_SPI_PERIPH_SCLK_PORT, &GPIO_InitStructure);        GPIO_InitStructure.GPIO_Pin = SDK_EVAL_V2_SPI_PERIPH_MISO_PIN;    GPIO_Init(SDK_EVAL_V2_SPI_PERIPH_MISO_PORT, &GPIO_InitStructure);        GPIO_InitStructure.GPIO_Pin = SDK_EVAL_V2_SPI_PERIPH_MOSI_PIN;    GPIO_Init(SDK_EVAL_V2_SPI_PERIPH_MOSI_PORT, &GPIO_InitStructure);        /* Configure SPI pin: CS */    GPIO_InitStructure.GPIO_Pin = SDK_EVAL_V2_SPI_PERIPH_CS_PIN;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;    GPIO_Init(SDK_EVAL_V2_SPI_PERIPH_CS_PORT, &GPIO_InitStructure);      }  else  {    /* Enable SPI periph and SCLK, MOSI, MISO and CS GPIO clocks */    RCC_AHBPeriphClockCmd(SDK_EVAL_V3_SPI_PERIPH_MOSI_RCC | SDK_EVAL_V3_SPI_PERIPH_MISO_RCC | SDK_EVAL_V3_SPI_PERIPH_SCLK_RCC | SDK_EVAL_V3_SPI_PERIPH_CS_RCC, ENABLE);        /* Configure the AF for MOSI, MISO and SCLK GPIO pins*/    GPIO_PinAFConfig(SDK_EVAL_V3_SPI_PERIPH_MOSI_PORT, SDK_EVAL_V3_SPI_PERIPH_MOSI_RCC_SOURCE, SDK_EVAL_V3_SPI_PERIPH_MOSI_AF);    GPIO_PinAFConfig(SDK_EVAL_V3_SPI_PERIPH_MISO_PORT, SDK_EVAL_V3_SPI_PERIPH_MISO_RCC_SOURCE, SDK_EVAL_V3_SPI_PERIPH_MISO_AF);    GPIO_PinAFConfig(SDK_EVAL_V3_SPI_PERIPH_SCLK_PORT, SDK_EVAL_V3_SPI_PERIPH_SCLK_RCC_SOURCE, SDK_EVAL_V3_SPI_PERIPH_SCLK_AF);        /* Configure SPI pins:SCLK, MISO and MOSI */    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;    GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;        GPIO_InitStructure.GPIO_Pin = SDK_EVAL_V3_SPI_PERIPH_SCLK_PIN;    GPIO_Init(SDK_EVAL_V3_SPI_PERIPH_SCLK_PORT, &GPIO_InitStructure);        GPIO_InitStructure.GPIO_Pin = SDK_EVAL_V3_SPI_PERIPH_MISO_PIN;    GPIO_Init(SDK_EVAL_V3_SPI_PERIPH_MISO_PORT, &GPIO_InitStructure);        GPIO_InitStructure.GPIO_Pin = SDK_EVAL_V3_SPI_PERIPH_MOSI_PIN;    GPIO_Init(SDK_EVAL_V3_SPI_PERIPH_MOSI_PORT, &GPIO_InitStructure);        /* Configure SPI pin: CS */    GPIO_InitStructure.GPIO_Pin = SDK_EVAL_V3_SPI_PERIPH_CS_PIN;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;    GPIO_Init(SDK_EVAL_V3_SPI_PERIPH_CS_PORT, &GPIO_InitStructure);        /* Enable SPI periph and SCLK, MOSI, MISO and CS GPIO clocks */    RCC_APB1PeriphClockCmd(SDK_EVAL_V3_SPI_PERIPH_RCC, ENABLE);       }    /* Configure SPI peripheral */  SPI_DeInit(s_SpiPort);  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;  SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;  SPI_InitStructure.SPI_CRCPolynomial = 7;  SPI_Init(s_SpiPort, &SPI_InitStructure);    SPI_Cmd(s_SpiPort, ENABLE);  #ifdef FREERTOS    xSpiMutex = xSemaphoreCreateMutex();  if (!xSpiMutex)    /* Error in resource creation. */    for (;;);  xSemaphoreGive(xSpiMutex);  #endif      SdkEvalSPICSHigh();}
开发者ID:david-kooi,项目名称:eval,代码行数:101,


示例4: unlock_spi

void unlock_spi() {    xSemaphoreGive(spiLock);}
开发者ID:jrwiebe,项目名称:RaceCapture-Pro_firmware,代码行数:3,


示例5: mp_thread_mutex_unlock

void mp_thread_mutex_unlock(mp_thread_mutex_t *mutex) {    xSemaphoreGive(mutex->handle);}
开发者ID:simonliu009,项目名称:MaixPy,代码行数:3,


示例6: logRunBlock

/* This function is usually called by the worker subsystem */void logRunBlock(void * arg){  struct log_block *blk = arg;  struct log_ops *ops = blk->ops;  static CRTPPacket pk;  unsigned int timestamp;  xSemaphoreTake(logLock, portMAX_DELAY);  timestamp = ((long long)xTaskGetTickCount())/portTICK_RATE_MS;  pk.header = CRTP_HEADER(CRTP_PORT_LOG, LOG_CH);  pk.size = 4;  pk.data[0] = blk->id;  pk.data[1] = timestamp&0x0ff;  pk.data[2] = (timestamp>>8)&0x0ff;  pk.data[3] = (timestamp>>16)&0x0ff;  while (ops)  {    float variable;    int valuei = 0;    float valuef = 0;    // FPU instructions must run on aligned data. Make sure it is.    variable = *(float *)ops->variable;    switch(ops->storageType)    {      case LOG_UINT8:        valuei = *(uint8_t *)&variable;        break;      case LOG_INT8:        valuei = *(int8_t *)&variable;        break;      case LOG_UINT16:        valuei = *(uint16_t *)&variable;        break;      case LOG_INT16:        valuei = *(int16_t *)&variable;        break;      case LOG_UINT32:        valuei = *(uint32_t *)&variable;        break;      case LOG_INT32:        valuei = *(int32_t *)&variable;        break;      case LOG_FLOAT:        valuei = *(float *)&variable;        break;    }    if (ops->logType == LOG_FLOAT || ops->logType == LOG_FP16)    {      if (ops->storageType == LOG_FLOAT)        valuef = *(float *)&variable;      else        valuef = valuei;      // Try to append the next item to the packet.  If we run out of space,      // drop this and subsequent items.      if (ops->logType == LOG_FLOAT)      {        if (!appendToPacket(&pk, &valuef, 4)) break;      }      else      {        valuei = single2half(valuef);        if (!appendToPacket(&pk, &valuei, 2)) break;      }    }    else  //logType is an integer    {      if (!appendToPacket(&pk, &valuei, typeLength[ops->logType])) break;    }    ops = ops->next;  }  xSemaphoreGive(logLock);  // Check if the connection is still up, oherwise disable  // all the logging and flush all the CRTP queues.  if (!crtpIsConnected())  {    logReset();    crtpReset();  }  else  {    crtpSendPacket(&pk);  }}
开发者ID:rtt-gimbal,项目名称:crazyflie-firmware,代码行数:94,


示例7: SetWidgetList

//.........这里部分代码省略.........    if (WGTLST_INDEX(pMsg->Options) == 0 &&      (pCurrWidget != pCurrWidgetList || (pNextWidget != &Widget[0] && pNextWidget != &Widget[MAX_WIDGET_NUM])))    { // last SetWLst failed in the middle.Clean up whole list      PrintS("# Last SetWgtLst broken!");      pCurrWidget = pCurrWidgetList;      pNextWidget = &Widget[0] + (&Widget[MAX_WIDGET_NUM] - pCurrWidgetList);    }  }  while (WidgetNum) // number of list items  {      /* old clock widgets */    if (!IS_CLOCK_WIDGET(pMsgWgtLst->Layout) && pMsgWgtLst->Id <= CLOCK_WIDGET_ID_RANGE) TestFaceId(pMsgWgtLst);    unsigned char Change = GetWidgetChange(pCurrWidget->Id, pCurrWidget->Layout, pMsgWgtLst->Id, pMsgWgtLst->Layout);        switch (Change)    {    case WGT_CHG_CLK_FACE:      PrintS("Chg ClkFce");      if (ON_CURRENT_PAGE(pMsgWgtLst->Layout)) ChangedClockWidget = pMsgWgtLst->Id;          case WGT_CHG_SETTING:     //cpy layout to curr; cpy curr to next; msg, curr, next ++      PrintF("=%02X", pCurrWidget->Id);      pCurrWidget->Id = pMsgWgtLst->Id;      pCurrWidget->Layout = pMsgWgtLst->Layout;      *pNextWidget++ = *pCurrWidget++;      pMsgWgtLst ++;      WidgetNum --;      break;    case WGT_CHG_CLK_ADD:      PrintS("+Clk");      if (ON_CURRENT_PAGE(pMsgWgtLst->Layout)) ChangedClockWidget = pMsgWgtLst->Id;    case WGT_CHG_ADD: //pCurrWidget->Id > pMsgWgtLst->Id)     // add new widget: cpy msg to next; msg and next ++; curr stays      PrintF("+%02X", pMsgWgtLst->Id);      pNextWidget->Id = pMsgWgtLst->Id;      pNextWidget->Layout = pMsgWgtLst->Layout;      AssignWidgetBuffer(pNextWidget);      pNextWidget ++;      pMsgWgtLst ++;      WidgetNum --;      break;          case WGT_CHG_REMOVE:    // remove widget: curr ++      PrintF("-%02X", pCurrWidget->Id);      FreeWidgetBuffer(pCurrWidget);      pCurrWidget ++;      break;          default: break;    }  }  PrintR();  // if part index + 1 == parts, SetWidgetList complete  if (WGTLST_TOTAL(pMsg->Options) == WGTLST_INDEX(pMsg->Options) + 1)  {//    PrintS("C:");//    for (i=0; pCurrWidgetList[i].Id != INVALID_ID && i < MAX_WIDGET_NUM; ++i) PrintH(pCurrWidgetList[i].Id);//    PrintR();    while (pCurrWidget->Id != INVALID_ID && pCurrWidget < &pCurrWidgetList[MAX_WIDGET_NUM])    {      FreeWidgetBuffer(pCurrWidget);      pCurrWidget->Id = INVALID_ID;      pCurrWidget ++;    }    for (i = 0; i < MAX_WIDGET_NUM; ++i)    {      if (pCurrWidgetList[i].Id != INVALID_ID)      { // clear the widget id in the curr list        pCurrWidgetList[i].Id = INVALID_ID;      }    }    pNextWidget = pCurrWidgetList;    pCurrWidgetList = &Widget[0] + (&Widget[MAX_WIDGET_NUM] - pCurrWidgetList);    pCurrWidget = pCurrWidgetList;//    PrintS("N:");//    for (i=0; pCurrWidgetList[i].Id != INVALID_ID; ++i) PrintH(pCurrWidgetList[i].Id);//    PrintR();    PrintF("Tg:%04X", BufTag);    if (ChangedClockWidget != INVALID_ID)    {      CreateAndSendMessage(DrawClockWidgetMsg, ChangedClockWidget);      ChangedClockWidget = INVALID_ID;    }  }  xSemaphoreGive(SramMutex);}
开发者ID:grueni75,项目名称:MetaWatch-Gen2,代码行数:101,


示例8: xSemaphoreGive

void AnalyzerControl::WakeAnalysisRequest(){	xSemaphoreGive(_semaphore);}
开发者ID:rpc-fw,项目名称:analyzer,代码行数:4,


示例9: GUI_X_Unlock

void GUI_X_Unlock(void){   xSemaphoreGive( xQueueMutex ); }
开发者ID:TAKETODAY,项目名称:STemWin,代码行数:4,


示例10: GUI_X_SignalEvent

void GUI_X_SignalEvent (void) {  xSemaphoreGive( xSemaTxDone );}
开发者ID:TAKETODAY,项目名称:STemWin,代码行数:4,


示例11: obp_uds

//.........这里部分代码省略.........			if (pdPASS !=			    sendMsg(MSG_SERIAL_RELEASE, inputQueue,				    NULL)) {			    DEBUGPRINT				("FATAL ERROR: input queue is full!/n",				 'a');			}		    }		    timeout--;		}		if (actSeparationTime_STTicks > 0) {		    DEBUGPRINT			("Remaining CF Waitticks: %ld , remainingBytes: %ld/n",			 actSeparationTime_STTicks, remainingBytes);		    stateMachine_state = SM_UDS_SLEEP_UNTIL_SINGLE_CF;		    actSeparationTime_STTicks--;		    if (actSeparationTime_STTicks < 1) {	//it's time for a new single CF			stateMachine_state = SM_UDS_SEND_SINGLE_CF;			actSeparationTime_STTicks = separationTime_ST / portTICK_PERIOD_MS;	//"reload" the counter			actSeparationTime_STTicks++;			if (actSeparationTime_STTicks < 2) {			    actSeparationTime_STTicks = 2;			}			DEBUGPRINT			    ("Reloaded CF Waitticks: %ld , remainingBytes: %ld/n",			     actSeparationTime_STTicks, remainingBytes);		    }		}		/* Start generating tester present messages */		odp_uds_generateTesterPresents(tpList,					       &telegram, actBus_send);//>>>> oobdtemple protocol final >>>>    		break;	    }	    //if (Ticker oder sonstiges Consecutife Frame){	    if (1) {		if (stateMachine_state == SM_UDS_SEND_CF		    || stateMachine_state == SM_UDS_SEND_SINGLE_CF) {		    while (remainingBytes > 0			   && (stateMachine_state !=			       SM_UDS_SLEEP_UNTIL_SINGLE_CF)			   && (actBlockSize_BS != 1)) {			if (stateMachine_state == SM_UDS_SEND_SINGLE_CF) {			    stateMachine_state =				SM_UDS_SLEEP_UNTIL_SINGLE_CF;			}			DEBUGPRINT("Remaining bytes: %ld/n",				   remainingBytes);			actFrameLen =			    remainingBytes > 7 ? 7 : remainingBytes;			odp_uds_data2CAN(&protocolBuffer->data					 [actBufferPos],					 &telegram[0], actFrameLen, 1);			sequenceCounter =			    sequenceCounter < 15 ? sequenceCounter + 1 : 0;			actBufferPos += actFrameLen;			remainingBytes -= actFrameLen;			actDataPacket.data[0] = 0x20 + sequenceCounter;	// prepare CF			if (showBusTransfer > 0) {			    odp_uds_dumpFrame(&actDataPacket,					      printdata_CAN);			}			actBus_send(&actDataPacket);			if (actBlockSize_BS > 1) {			    actBlockSize_BS--;			    DEBUGPRINT("Blocksize  REDUCED to %ld /n",				       actBlockSize_BS);			}		    }		    if (actBlockSize_BS == 1) {	//in case we had some block limitations, send them and then wait for another FC Frame			stateMachine_state = SM_UDS_WAIT_FOR_FC;			actBlockSize_BS = 0;			timeout = protocolConfig->timeout;		    }		    if (remainingBytes < 1) {	// Buffer empty?  Then finish			stateMachine_state = SM_UDS_WAIT_FOR_ANSWER;			actSeparationTime_STTicks = 0;			timeout = protocolConfig->timeout;		    }		}	    }	    disposeMsg(msg);	}	/* vTaskDelay (5000 / portTICK_PERIOD_MS); */    }    /* Do all cleanup here to finish task */    actBus_close();    vPortFree(protocolConfig);    freeODPBuffer(protocolBuffer);    odp_uds_freeTPBuffers(tpList);    xSemaphoreGive(protocollBinarySemaphore);    vTaskDelete(NULL);}
开发者ID:fkuppens,项目名称:oobd,代码行数:101,


示例12: vSemaphoreCreateBinary

/** * Should allocate a pbuf and transfer the bytes of the incoming * packet from the interface into the pbuf. * * @param netif the lwip network interface structure for this ethernetif * @return a pbuf filled with the received packet (including MAC header) *         NULL on memory error */static struct pbuf *low_level_input(struct netif *netif){  struct pbuf             *p = NULL;  struct pbuf             *q;  u16_t                   len;#ifdef FREERTOS_USED  static xSemaphoreHandle xRxSemaphore = NULL;#endif  /* Parameter not used. */  ( void ) netif;#ifdef FREERTOS_USED  if( xRxSemaphore == NULL )  {    vSemaphoreCreateBinary( xRxSemaphore );  }  /* Access to the MACB is guarded using a semaphore. */  if( xSemaphoreTake( xRxSemaphore, netifGUARD_BLOCK_NBTICKS ) )  {#endif    /* Obtain the size of the packet. */    len = ulMACBInputLength();    if( len )    {#if ETH_PAD_SIZE      len += ETH_PAD_SIZE;    /* allow room for Ethernet padding */#endif      /* We allocate a pbuf chain of pbufs from the pool. */      p = pbuf_alloc( PBUF_RAW, len, PBUF_POOL );      if( p != NULL )      {#if ETH_PAD_SIZE        pbuf_header( p, -ETH_PAD_SIZE );    /* drop the padding word */#endif        /* Let the driver know we are going to read a new packet. */        vMACBRead( NULL, 0, len );        /* We iterate over the pbuf chain until we have read the entire        packet into the pbuf. */        for( q = p; q != NULL; q = q->next )        {          /* Read enough bytes to fill this pbuf in the chain. The          available data in the pbuf is given by the q->len variable. */          vMACBRead( q->payload, q->len, len );        }#if ETH_PAD_SIZE        pbuf_header( p, ETH_PAD_SIZE );     /* reclaim the padding word */#endif        LINK_STATS_INC(link.recv);      }      else      {        LINK_STATS_INC(link.memerr);        LINK_STATS_INC(link.drop);      }    }#ifdef FREERTOS_USED    xSemaphoreGive( xRxSemaphore );  }#endif  return p;}
开发者ID:ThucVD2704,项目名称:femto-usb-blink-example,代码行数:79,


示例13: drawTask

//.........这里部分代码省略.........            }            else {               bullets_ship1 = objIter->next;               vPortFree(objIter);               objIter = bullets_ship1;            }         }         else {            objPrev = objIter;            objIter = objIter->next;         }      }      // Check hits from ship2      objPrev = NULL;      objIter = bullets_ship2;      while (objIter != NULL) {         vSpriteSetPosition(objIter->handle, (uint16_t)objIter->pos.x, (uint16_t)objIter->pos.y);         //// Check hits from ship2 on ship1         if (uCollide(objIter->handle, shipGroup1, &hit, 1) > 0) {            vSpriteDelete(objIter->handle);                  if (objPrev != NULL) {               objPrev->next = objIter->next;               vPortFree(objIter);               objIter = objPrev->next;            }            else {               bullets_ship2 = objIter->next;               vPortFree(objIter);               objIter = bullets_ship2;            }            game_status = PLAYER_TWO_WIN;         }         else if (uCollide(objIter->handle, wallGroup, &hit, 1) > 0) {            vSpriteDelete(objIter->handle);                        if (objPrev != NULL) {               objPrev->next = objIter->next;               vPortFree(objIter);               objIter = objPrev->next;            }            else {               bullets_ship2 = objIter->next;               vPortFree(objIter);               objIter = bullets_ship2;            }         }         else {            objPrev = objIter;            objIter = objIter->next;         }      }      switch(game_status)      {         case PLAYER_ONE_WIN:            vTaskDelete(updateTaskHandle);            vTaskDelete(bulletTaskHandle);            vTaskDelete(inputTaskHandle);                        handle = xSpriteCreate("p1_win.png", SCREEN_W>>1, SCREEN_H>>1, 0, SCREEN_W>>1, SCREEN_H>>1, 100);                        vTaskDelay(3000 / portTICK_RATE_MS);                        vSpriteDelete(handle);            reset();            init();                                    xTaskCreate(inputTask, (signed char *) "p1", 80, NULL, 6, &inputTaskHandle);            xTaskCreate(bulletTask, (signed char *) "b", 250, NULL, 2, &bulletTaskHandle);            xTaskCreate(updateTask, (signed char *) "u", 200, NULL, 4, &updateTaskHandle);            game_status = IN_PLAY;            break;         case PLAYER_TWO_WIN:             vTaskDelete(updateTaskHandle);            vTaskDelete(bulletTaskHandle);            vTaskDelete(inputTaskHandle);                        handle = xSpriteCreate("p2_win.png", SCREEN_W>>1, SCREEN_H>>1, 0, SCREEN_W>>1, SCREEN_H>>1, 100);                        vTaskDelay(3000 / portTICK_RATE_MS);            vSpriteDelete(handle);            reset();            init();            xTaskCreate(inputTask, (signed char *) "p1", 80, NULL, 6, &inputTaskHandle);            xTaskCreate(bulletTask, (signed char *) "b", 250, NULL, 2, &bulletTaskHandle);            xTaskCreate(updateTask, (signed char *) "u", 200, NULL, 4, &updateTaskHandle);            game_status = IN_PLAY;            break;         default:            break;      }				xSemaphoreGive(usartMutex);		vTaskDelay(FRAME_DELAY_MS / portTICK_RATE_MS);	}}
开发者ID:eddiecastropineda,项目名称:CollegeBound,代码行数:101,


示例14: uart_task

/** * /brief UART task * * This task runs in the background to handle the queued, incoming terminal * characters and write them to the terminal text buffer. It does not print * anything to the display -- that is done by /ref terminal_task(). * * /param params Parameters for the task. (Not used.) */static void uart_task(void *params){    uint8_t *current_line_ptr;    uint8_t *current_char_ptr;    uint8_t current_column = 0;    for (;;) {        // Show that task is executing        oled1_set_led_state(&oled1, OLED1_LED1_ID, true);        // Grab terminal mutex        xSemaphoreTake(terminal_mutex, portMAX_DELAY);        current_line_ptr = terminal_buffer[terminal_line_offset];        current_char_ptr = current_line_ptr + current_column;        // Any characters queued? Handle them!        while (xQueueReceive(terminal_in_queue, current_char_ptr, 0)) {            /* Newline-handling is difficult because all terminal emulators             * seem to do it their own way. The method below seems to work             * with Putty and Realterm out of the box.             */            switch (*current_char_ptr) {            case '/r':                // Replace /r with /0 and move head to next line                *current_char_ptr = '/0';                current_column = 0;                terminal_line_offset = (terminal_line_offset + 1)                                       % TERMINAL_BUFFER_LINES;                current_line_ptr = terminal_buffer[terminal_line_offset];                current_char_ptr = current_line_ptr + current_column;                break;            case '/n':                // For /n, do nothing -- it is replaced with /0 later                break;            default:                // For all other characters, just move head to next char                current_column++;                if (current_column >= TERMINAL_COLUMNS) {                    current_column = 0;                    terminal_line_offset = (terminal_line_offset + 1)                                           % TERMINAL_BUFFER_LINES;                    current_line_ptr = terminal_buffer[terminal_line_offset];                }                current_char_ptr = current_line_ptr + current_column;            }            // Set zero-terminator at head            *current_char_ptr = '/0';        }        xSemaphoreGive(terminal_mutex);        oled1_set_led_state(&oled1, OLED1_LED1_ID, false);        vTaskDelay(UART_TASK_DELAY);    }}
开发者ID:ThucVD2704,项目名称:femto-usb-blink-example,代码行数:70,


示例15: update_neighbour_table

//.........这里部分代码省略.........	{		if(type==ADDR_802_15_4_PAN_LONG)		{			length=8;							}		if(type == ADDR_802_15_4_PAN_SHORT)			length=4;		delivery_mode = NOT_NEIGHBOR;		if(neighbor_table.count > 0 && remove != ADD_CHILD)		{			for(i=0; i < MAX_NEIGHBOR_COUNT ; i++)			{				b = &(neighbor_table.neighbor_info[i]);				if(b->type == ADDR_NONE)					b=0;				if(b && (type == b->type))				{					if(memcmp(b->address, address,length) == 0)						delivery_mode = NEIGHBOR;										/* Update lqi and compare sqn to old one */					if( delivery_mode == NEIGHBOR )					{						if(type != ADDR_802_15_4_PAN_SHORT)						{							for(j=0; j<2; j++)							{								b->address[length+j] = address[length+j];							}						}						if(remove == REMOVE_NEIGHBOUR)						{							if(b->child_dev)								neighbor_table.child_count--;							b->type=ADDR_NONE;							i=neighbor_table.count;							neighbor_table.count--;						}						else						{							/* Duplicated packet check */							if(b->last_sqn != last_sqn)							{								b->last_sqn = last_sqn;								sqn_check=1;							}							b->last_rssi = last_rssi;							b->ttl=TTL;						}						i=MAX_NEIGHBOR_COUNT;					}				}			}		}		/* Add new neighbor if addresstype is source */		if((delivery_mode == NOT_NEIGHBOR && remove != REMOVE_NEIGHBOUR) && neighbor_table.count < MAX_NEIGHBOR_COUNT)		{			for(i=0; i<MAX_NEIGHBOR_COUNT; i++)			{				b = &(neighbor_table.neighbor_info[i]);				if(b->type == ADDR_NONE)				{					i=MAX_NEIGHBOR_COUNT;				}			}				if(type==ADDR_802_15_4_PAN_LONG)						length+=2;				for(j=0; j < length ; j++)				{					b->address[j] = address[j];				}								/* add lqi value to neighbor */				if(remove  == ADD_CHILD)				{					neighbor_table.child_count++;					b->child_dev=1;				}				b->last_rssi =	last_rssi;				b->last_sqn  =    last_sqn;				b->child_dev =	0;				sqn_check=1;				b->ttl=TTL;				b->type = type;				/* Increace Neigbor count */				neighbor_table.count++;		}		xSemaphoreGive( table_lock ); /*free lock*/	}	else	{		debug("No sem/r/n");		sqn_check=1;	}	return sqn_check;}
开发者ID:Paolo-Maffei,项目名称:nxstack,代码行数:101,


示例16: APP_MutexSPI0Give

void APP_MutexSPI0Give(void){	xSemaphoreGive(xSPI0Semaphore);	return;	}
开发者ID:gillspice,项目名称:mios32,代码行数:5,


示例17: check_child_role

child_status_type_t check_child_role(addrtype_t type, address_t address){	neighbor_info_t *b;	uint8_t i,j, length;	child_status_type_t return_value;	return_value = NOT_CHILD;		if( xSemaphoreTake( table_lock, ( portTickType ) 5 ) == pdTRUE )	{		switch (type)		{			case ADDR_802_15_4_PAN_SHORT:						/* Check if broadcast address */				length=4;				break;			case ADDR_802_15_4_SHORT:						/* Check if broadcast address */				length=2;				type=ADDR_802_15_4_PAN_SHORT;				break;			case ADDR_802_15_4_PAN_LONG:				length=8;				break;			default:				xSemaphoreGive( table_lock ); /*free lock*/				return return_value;				break;		}		if(neighbor_table.count > 0)		{			for(i=0; i < MAX_NEIGHBOR_COUNT ; i++)			{				b = &(neighbor_table.neighbor_info[i]);				if(b->type == ADDR_NONE)					b=0;				if(b && (b->type == type) )				{					if(memcmp(b->address, address,length) == 0)					{						if(b->child_dev == 0)						{							neighbor_table.child_count++;							b->child_dev=1;						}						return_value = CHILD;						i=MAX_NEIGHBOR_COUNT;					}				}			}		}		if((return_value==NOT_CHILD) && (neighbor_table.child_count == NWK_MAX_CHILD) )		{			return_value = DISCARD_ASSOC;		}		if((return_value==NOT_CHILD) && (neighbor_table.child_count < NWK_MAX_CHILD))		{			j =neighbor_table.child_count;			j++;				if(j == NWK_MAX_CHILD)					return_value=NO_CAPASITY_AFTER_NEW_CHILD;		}		xSemaphoreGive( table_lock ); /*free lock*/	}return return_value;	}
开发者ID:Paolo-Maffei,项目名称:nxstack,代码行数:69,


示例18: FreeRTOS_UART_write

//------------------------------------------------------------------------------------size_t FreeRTOS_UART_write( Peripheral_Descriptor_t const pxPeripheral, const void *pvBuffer, const size_t xBytes ){	// Esta funcion debe poner los caracteres apuntados en pvBuffer en la cola de trasmision.	// Actua como si fuese rprintfStr.	// Debe tomar el semaforo antes de trasmitir. Los semaforos los manejamos en la capa FreeRTOS	// y no en la de los drivers.char cChar;char *p;size_t bytes2tx;Peripheral_Control_t * const pxPeripheralControl = ( Peripheral_Control_t * const ) pxPeripheral;UART_device_control_t *pUart;size_t wBytes = 0;	pUart = pxPeripheralControl->phDevice;	// Controlo no hacer overflow en la cola de trasmision	bytes2tx = xBytes;	// Espero el semaforo en forma persistente.	while ( xSemaphoreTake(pxPeripheralControl->xBusSemaphore, ( TickType_t ) 1 ) != pdTRUE )		taskYIELD();	// Trasmito.	// Espero que los buffers esten vacios. ( La uart se va limpiando al trasmitir )	if ( pUart->txBufferType == QUEUE ) {		while  ( uxQueueMessagesWaiting( pUart->txStruct ) > 0 )			taskYIELD();	} else {		while  ( uxFifoMessagesWaiting( pUart->txStruct ) > 0 )			taskYIELD();	}	// Cargo el buffer en la cola de trasmision.	p = (char *)pvBuffer;	while (*p && (bytes2tx-- > 0) ) {		// Voy cargando la cola de a uno.		cChar = *p;		pv_enqueue( pUart, &cChar );		p++;		wBytes++;	// Cuento los bytes que voy trasmitiendo		// Si la cola esta llena, empiezo a trasmitir y espero que se vacie.		if (  pv_queueReachHighWaterMark(pUart) ) {			// Habilito a trasmitir para que se vacie			vUartInterruptOn(pxPeripheralControl->portId);			// Y espero que se haga mas lugar.			while ( ! pv_queueReachLowWaterMark(pUart) )				taskYIELD();		}	}	// Luego inicio la trasmision invocando la interrupcion.	vUartInterruptOn(pxPeripheralControl->portId);	xSemaphoreGive( pxPeripheralControl->xBusSemaphore );	//return xBytes;	// Puse todos los caracteres en la cola.	return (wBytes);}
开发者ID:ppeluffo,项目名称:sp5KV4_8CH,代码行数:62,


示例19: update_routing_table

//.........这里部分代码省略.........		{			for(i=0; i < MAX_ROUTE_INFO_COUNT ; i++)			{				ptr = &(routing_table.route_info[i]);				if(ptr->dest_addr_type == ADDR_NONE)					ptr=0;				/* Check originator address from routing table */				if(ptr && (final_type == ptr->dest_addr_type))				{					if(memcmp(ptr->destination, final_destination,final_length) ==0)					{						if(only_check == REMOVE_ROUTE)						{							ptr->dest_addr_type=ADDR_NONE;							routing_table.count--;						}						else						{							if(next_hop_type==ptr->next_hop_addr_type)							{								/* compare next hop address */								if(memcmp(next_hop, ptr->next_hop, next_hop_length) !=0)									compare=1;								else									update=2;							}							else								compare=1;								if(compare)							{								if(hop_count < ptr->hop_count && last_rssi > -85)								{									update=1;									}								else								{									if(hop_count==ptr->hop_count)									{										if(last_rssi > ptr->last_rssi || (ptr->ttl  < (ROUTING_TTL - 2)  ))											update=1;									}								}							}							if(update)							{								if(update != 2)								{									ptr->next_hop_addr_type = next_hop_type;									next_hop_length+=2;									/* added new next hop info */									for(j=0; j < next_hop_length ; j++)									{										ptr->next_hop[j] = next_hop[j];									}								}								ptr->last_rssi=last_rssi;								ptr->hop_count = hop_count;								ptr->ttl=ROUTING_TTL;							}						}						tmp_8=1;						i=MAX_ROUTE_INFO_COUNT;					}				}				}		}		if(only_check==0 && (tmp_8==0 && routing_table.count < MAX_ROUTE_INFO_COUNT ))		{			//uint8_t count = routing_table.count;			for(i=0; i<MAX_ROUTE_INFO_COUNT; i++)			{				ptr = &(routing_table.route_info[i]);				if(ptr->dest_addr_type == ADDR_NONE)				{					i=MAX_ROUTE_INFO_COUNT;				}			}			for(j=0; j < final_length ; j++)			{				ptr->destination[j] = final_destination[j];					}			next_hop_length+=2;			for(j=0; j < next_hop_length ; j++)			{				ptr->next_hop[j] = next_hop[j];			}			ptr->next_hop_addr_type = next_hop_type;			ptr->dest_addr_type = final_type;			ptr->hop_count = hop_count;			ptr->ttl=ROUTING_TTL;			ptr->last_rssi=last_rssi;			routing_table.count++;		}		xSemaphoreGive( table_lock ); /*free lock*/	}return pdTRUE;}
开发者ID:Paolo-Maffei,项目名称:nxstack,代码行数:101,


示例20: prvCDCCommandConsoleTask

//.........这里部分代码省略.........	exclusion on this buffer as it is assumed only one command console	interface will be used at any one time. */	pcOutputString = FreeRTOS_CLIGetOutputBuffer();	/* Initialise the virtual com port (CDC) interface. */	prvSetupUSBDrivers();	/* Send the welcome message.  This probably won't be seen as the console	will not have been connected yet. */	USB_WriteEP( CDC_DEP_IN, ( uint8_t * ) pcWelcomeMessage, strlen( pcWelcomeMessage ) );	for( ;; )	{		/* No characters received yet for the current input string. */		cRxedChar = 0;		/* Only interested in reading one character at a time. */		cRxedChar = cGetCDCChar();		if( xSemaphoreTake( xCDCMutex, cmdMAX_MUTEX_WAIT ) == pdPASS )		{			/* Echo the character back. */			USB_WriteEP( CDC_DEP_IN, ( uint8_t * ) &cRxedChar, sizeof( uint8_t ) );			/* Was it the end of the line? */			if( cRxedChar == '/n' || cRxedChar == '/r' )			{				/* Just to space the output from the input. */				USB_WriteEP( CDC_DEP_IN, ( uint8_t * ) pcNewLine, strlen( pcNewLine ) );				/* See if the command is empty, indicating that the last command is				to be executed again. */				if( ucInputIndex == 0 )				{					/* Copy the last command back into the input string. */					strcpy( cInputString, cLastInputString );				}				/* Pass the received command to the command interpreter.  The				command interpreter is called repeatedly until it returns pdFALSE				(indicating there is no more output) as it might generate more than				one string. */				do				{					/* Get the next output string from the command interpreter. */					xReturned = FreeRTOS_CLIProcessCommand( cInputString, pcOutputString, configCOMMAND_INT_MAX_OUTPUT_SIZE );					/* Write the generated string to the CDC. */					USB_WriteEP( CDC_DEP_IN, ( uint8_t * ) pcOutputString, strlen( pcOutputString ) );					vTaskDelay( 1 );				} while( xReturned != pdFALSE );				/* All the strings generated by the input command have been sent.				Clear the input	string ready to receive the next command.  Remember				the command that was just processed first in case it is to be				processed again. */				strcpy( cLastInputString, cInputString );				ucInputIndex = 0;				memset( cInputString, 0x00, cmdMAX_INPUT_SIZE );				USB_WriteEP( CDC_DEP_IN, ( uint8_t * ) pcEndOfOutputMessage, strlen( pcEndOfOutputMessage ) );			}			else			{				if( cRxedChar == '/r' )				{					/* Ignore the character. */				}				else if( cRxedChar == '/b' )				{					/* Backspace was pressed.  Erase the last character in the					string - if any. */					if( ucInputIndex > 0 )					{						ucInputIndex--;						cInputString[ ucInputIndex ] = '/0';					}				}				else				{					/* A character was entered.  Add it to the string					entered so far.  When a /n is entered the complete					string will be passed to the command interpreter. */					if( ( cRxedChar >= ' ' ) && ( cRxedChar <= '~' ) )					{						if( ucInputIndex < cmdMAX_INPUT_SIZE )						{							cInputString[ ucInputIndex ] = cRxedChar;							ucInputIndex++;						}					}				}			}			/* Must ensure to give the mutex back. */			xSemaphoreGive( xCDCMutex );		}	}}
开发者ID:wind5027,项目名称:FreeRTOS_Learn,代码行数:101,


示例21: print_table_information

//.........这里部分代码省略.........						for(j=0; j < 2 ; j++)						{							if (j) debug_put(':');							debug_hex( b->address[9-j]);						}						debug("  ");						for(j=0; j < 8 ; j++)						{							if (j) debug_put(':');							debug_hex( b->address[7-j]);						}											}					if(b->type == ADDR_802_15_4_PAN_SHORT)					{						debug("Short:  ");						for(j=0; j < 2 ; j++)						{							if (j) debug_put(':');							debug_hex( b->address[3-j]);						}						debug("  ");						for(j=0; j < 2 ; j++)						{							if (j) debug_put(':');							debug_hex( b->address[1-j]);						}					}					debug("/r/nrssi: ");					debug_int(b->last_rssi);					debug("/r/nTTL: ");					debug_hex(b->ttl);					debug("/r/n");					pause_us(200);				}			}		}		else		{			debug("No Neighbor info/r/n");		}#ifdef HAVE_ROUTING		if(routing_table.count)		{						debug("/r/nroute Info count:");			debug_hex(routing_table.count);			debug("/r/n");						for(i=0; i < MAX_ROUTE_INFO_COUNT; i++)			{				ptr = &(routing_table.route_info[i]);				if(ptr->dest_addr_type==ADDR_NONE)					ptr=0;				if(ptr)				{					debug("Dest:  ");					if(ptr->dest_addr_type==ADDR_802_15_4_PAN_LONG)						addres_length=8;					else						addres_length=2;					for(j=0; j < addres_length ; j++)					{						if (j) debug_put(':');						debug_hex(ptr->destination[(addres_length-1)-j]);					}					debug("/r/nNext hop:  ");					if(ptr->next_hop_addr_type==ADDR_802_15_4_PAN_LONG)						addres_length=10;					else						addres_length=4;					for(j=0; j < addres_length ; j++)					{						if (j) debug_put(':');						debug_hex(ptr->next_hop[(addres_length-1)-j]);					}							debug("/r/nrssi: ");					debug_int(ptr->last_rssi);					debug("/r/nHop count:  ");					debug_hex(ptr->hop_count);					debug("/r/nTTL: ");					debug_hex(ptr->ttl);					debug("/r/n");				}			}		}		else		{			debug("No route info/r/n");		}#else		debug("Routing disable/r/n");#endif		xSemaphoreGive( table_lock ); /*free lock*/	}}
开发者ID:Paolo-Maffei,项目名称:nxstack,代码行数:101,


示例22: mutex_release_telemetry_string

void mutex_release_telemetry_string(){   if ( m_mutex != NULL){      xSemaphoreGive(m_mutex);   }}
开发者ID:ericyao2013,项目名称:quantracker,代码行数:6,


示例23: wc_UnLockMutex

 int wc_UnLockMutex(wolfSSL_Mutex* m) {     xSemaphoreGive(m->mutex);     return 0; }
开发者ID:NickolasLapp,项目名称:wolfssl,代码行数:5,


示例24: sys_sem_signal

// Signals a semaphorevoidsys_sem_signal(sys_sem_t sem){	xSemaphoreGive( sem );}
开发者ID:003900107,项目名称:wpa900-base,代码行数:6,


示例25: handle_received_frame

static void handle_received_frame(void) {	uint8_t rx_length, length, *rx_ptr;	// Take semaphore	xSemaphoreTake(spi_mutex, portMAX_DELAY);	// Check if there is at least one byte in fifo	if (cc1101_status_rxbytes() == 0) {		xSemaphoreGive(spi_mutex);		restore_state();		PRINTF("[PHY] no byte/n");		return;	}	// Get length byte	cc1101_fifo_get(&rx_length, 1);	// Check length	if (rx_length > PHY_MAX_LENGTH) {		xSemaphoreGive(spi_mutex);		restore_state();		PRINTF("[PHY] length too big/n");		return;	}	rx_data_length = rx_length;	// Add 2 to the length for the status bytes	rx_length += PHY_FOOTER_LENGTH;	rx_ptr = rx_data;	// Loop until end of packet	while (cc1101_gdo0_read()) {		// get the bytes in FIFO		length = cc1101_status_rxbytes();		// Check for overflow		if (length & 0x80) {			// Release semaphore			xSemaphoreGive(spi_mutex);			restore_state();			PRINTF("[PHY] overflow/n");			return;		}		// Check for local overflow		if (length > rx_length) {			// Release semaphore			xSemaphoreGive(spi_mutex);			restore_state();			PRINTF("[PHY] local overflow/n");			return;		}		// Read every byte but one, to prevent CC1101 bug.		length -= 1;		cc1101_fifo_get(rx_ptr, length);		rx_ptr += length;		rx_length -= length;		// Wait until FIFO is filled above threshold, or EOP		while (!cc1101_gdo2_read() && cc1101_gdo0_read()) {			;		}	}	// Packet complete, get the end	length = cc1101_status_rxbytes();	// Check for overflow	if (length & 0x80) {		// Release semaphore		xSemaphoreGive(spi_mutex);		restore_state();		PRINTF("[PHY] overflow/n");		return;	}	// Check for local overflow	if (length > rx_length) {		// Release semaphore		xSemaphoreGive(spi_mutex);		restore_state();		PRINTF("[PHY] local overflow/n");		return;	}	// Get the bytes	cc1101_fifo_get(rx_ptr, length);	rx_ptr += length;	// Release semaphore	xSemaphoreGive(spi_mutex);	// Check CRC	if ((rx_data[rx_data_length + 1] & 0x80) == 0) {		// Bad CRC		restore_state();		PRINTF("[PHY] bad crc/n");//.........这里部分代码省略.........
开发者ID:EDAyele,项目名称:wsn430,代码行数:101,


示例26: portTASK_FUNCTION

static portTASK_FUNCTION( prvSemaphoreTest, pvParameters ){xSemaphoreParameters *pxParameters;volatile uint32_t *pulSharedVariable, ulExpectedValue;uint32_t ulCounter;short sError = pdFALSE, sCheckVariableToUse;	/* See which check variable to use.  sNextCheckVariable is not semaphore	protected! */	portENTER_CRITICAL();		sCheckVariableToUse = sNextCheckVariable;		sNextCheckVariable++;	portEXIT_CRITICAL();	/* A structure is passed in as the parameter.  This contains the shared	variable being guarded. */	pxParameters = ( xSemaphoreParameters * ) pvParameters;	pulSharedVariable = pxParameters->pulSharedVariable;	/* If we are blocking we use a much higher count to ensure loads of context	switches occur during the count. */	if( pxParameters->xBlockTime > ( TickType_t ) 0 )	{		ulExpectedValue = semtstBLOCKING_EXPECTED_VALUE;	}	else	{		ulExpectedValue = semtstNON_BLOCKING_EXPECTED_VALUE;	}	for( ;; )	{		/* Try to obtain the semaphore. */		if( xSemaphoreTake( pxParameters->xSemaphore, pxParameters->xBlockTime ) == pdPASS )		{			/* We have the semaphore and so expect any other tasks using the			shared variable to have left it in the state we expect to find			it. */			if( *pulSharedVariable != ulExpectedValue )			{				sError = pdTRUE;			}			/* Clear the variable, then count it back up to the expected value			before releasing the semaphore.  Would expect a context switch or			two during this time. */			for( ulCounter = ( uint32_t ) 0; ulCounter <= ulExpectedValue; ulCounter++ )			{				*pulSharedVariable = ulCounter;				if( *pulSharedVariable != ulCounter )				{					sError = pdTRUE;				}			}			/* Release the semaphore, and if no errors have occurred increment the check			variable. */			if(	xSemaphoreGive( pxParameters->xSemaphore ) == pdFALSE )			{				sError = pdTRUE;			}			if( sError == pdFALSE )			{				if( sCheckVariableToUse < semtstNUM_TASKS )				{					( sCheckVariables[ sCheckVariableToUse ] )++;				}			}			/* If we have a block time then we are running at a priority higher			than the idle priority.  This task takes a long time to complete			a cycle	(deliberately so to test the guarding) so will be starving			out lower priority tasks.  Block for some time to allow give lower			priority tasks some processor time. */			vTaskDelay( pxParameters->xBlockTime * semtstDELAY_FACTOR );		}		else		{			if( pxParameters->xBlockTime == ( TickType_t ) 0 )			{				/* We have not got the semaphore yet, so no point using the				processor.  We are not blocking when attempting to obtain the				semaphore. */				taskYIELD();			}		}	}}
开发者ID:CliffsDover,项目名称:FreeRTOS-Sim,代码行数:89,


示例27: main_task

//.........这里部分代码省略.........            selection_changed = true;        } else if (oled1_get_button_state(&oled1, OLED1_BUTTON2_ID)                   && (current_selection != MENU_ITEM_TERMINAL)) {            current_selection = MENU_ITEM_TERMINAL;            selection_changed = true;        } else if (oled1_get_button_state(&oled1, OLED1_BUTTON3_ID)                   && (current_selection != MENU_ITEM_ABOUT)) {            current_selection = MENU_ITEM_ABOUT;            selection_changed = true;        }        // If selection changed, handle the selection        if (selection_changed) {            // Wait for and take the display semaphore before doing any changes.            xSemaphoreTake(display_mutex, portMAX_DELAY);            // We can now safely suspend the previously resumed task            if (temp_task_handle) {                vTaskSuspend(temp_task_handle);                temp_task_handle = NULL;            }            // Select the new drawing task and corresponding display buffer            switch (current_selection) {            case MENU_ITEM_GRAPH:                // Graph task runs continuously, no need to set task handle                select_graph_buffer = true;                break;            case MENU_ITEM_TERMINAL:                temp_task_handle = terminal_task_handle;                select_graph_buffer = false;                break;            default:            case MENU_ITEM_ABOUT:                temp_task_handle = about_task_handle;                select_graph_buffer = false;            }            // Select and initialize display buffer to use.            display_y_offset = select_graph_buffer ? CANVAS_GRAPH_Y_OFFSET : 0;            // Draw the menu bar (only needs to be done once for graph)            if (!select_graph_buffer || !graph_buffer_initialized) {                // Clear the selected display buffer first                gfx_mono_draw_filled_rect(0, display_y_offset,                                          GFX_MONO_LCD_WIDTH, GFX_MONO_LCD_HEIGHT / 2,                                          GFX_PIXEL_CLR);                // Draw menu lines, each item with height MENU_HEIGHT pixels                y = display_y_offset + CANVAS_HEIGHT;                gfx_mono_draw_horizontal_line(0, y, GFX_MONO_LCD_WIDTH,                                              GFX_PIXEL_SET);                x = MENU_ITEM_WIDTH;                y++;                for (uint8_t i = 0; i < (MENU_NUM_ITEMS - 1); i++) {                    gfx_mono_draw_vertical_line(x, y, MENU_HEIGHT,                                                GFX_PIXEL_SET);                    x += 1 + MENU_ITEM_WIDTH;                }                // Highlight the current selection                gfx_mono_draw_rect(current_selection * (1 + MENU_ITEM_WIDTH), y,                                   MENU_ITEM_WIDTH, MENU_HEIGHT, GFX_PIXEL_SET);                // Draw the menu item text                x = (MENU_ITEM_WIDTH / 2) - ((5 * SYSFONT_WIDTH) / 2);                y += (MENU_HEIGHT / 2) - (SYSFONT_HEIGHT / 2);                for (uint8_t i = 0; i < MENU_NUM_ITEMS; i++) {                    gfx_mono_draw_string(menu_items_text[i], x, y, &sysfont);                    x += 1 + MENU_ITEM_WIDTH;                }                graph_buffer_initialized = true;            }            // Set display controller to output the new buffer            ssd1306_set_display_start_line_address(display_y_offset);            // We are done modifying the display, so give back the mutex            xSemaphoreGive(display_mutex);            selection_changed = false;            // If a task handle was specified, resume it now            if (temp_task_handle) {                vTaskResume(temp_task_handle);            }        }        // Show that task is done        oled1_set_led_state(&oled1, OLED1_LED3_ID, false);        vTaskDelay(MAIN_TASK_DELAY);    }}
开发者ID:ThucVD2704,项目名称:femto-usb-blink-example,代码行数:101,


示例28: UnLockMutex

 int UnLockMutex(CyaSSL_Mutex* m) {     xSemaphoreGive( *m );     return 0; }
开发者ID:Eppo791906066,项目名称:cyassl,代码行数:5,


示例29: freertos_usart_serial_read_packet

/** * /ingroup freertos_usart_peripheral_control_group * /brief Initiate a completely multi-byte read operation on a USART peripheral. * * The FreeRTOS ASF USART driver uses the PDC to transfer data from a peripheral * to a circular buffer.  Reception happens in the background, while the * microcontroller is executing application code.* freertos_usart_read_packet() * copies bytes from the DMA buffer into the buffer passed as a * freertos_usart_read_packet() parameter. * * Readers are recommended to also reference the application note and examples * that accompany the FreeRTOS ASF drivers. * * The FreeRTOS ASF driver both installs and handles the USART PDC interrupts. * Users do not need to concern themselves with interrupt handling, and must * not install their own interrupt handler. * * /param p_usart    The handle to the USART port returned by the *     freertos_usart_serial_init() call used to initialise the port. * /param data    A pointer to the buffer into which received data is to be *     copied. * /param len    The number of bytes to copy. * /param block_time_ticks    Defines the maximum combined time the function *     will wait to get exclusive access to the peripheral and receive the *     requested number of bytes.  Other tasks will execute during any waiting *     time. * *     The FreeRTOS ASF USART driver is initialized using a *     call to freertos_usart_serial_init().  The *     freertos_driver_parameters.options_flags parameter passed to the *     initialization function defines the driver behavior.  If *     freertos_driver_parameters.options_flags had the USE_RX_ACCESS_MUTEX bit *     set, then the driver will only read from the USART buffer if it has *     first gained exclusive access to it.  block_time_ticks specifies the *     maximum amount of time the driver will wait to get exclusive access *     before aborting the read operation. * *     If the number of bytes available is less than the number requested then *     freertos_usart_serial_read_packet() will wait for more bytes to become *     available.  block_time_ticks specifies the maximum amount of time the *     driver will wait before returning fewer bytes than were requested. * *     block_time_ticks is specified in RTOS tick periods.  To specify a block *     time in milliseconds, divide the milliseconds value by portTICK_RATE_MS, *     and pass the result in  block_time_ticks.  portTICK_RATE_MS is defined by *     FreeRTOS. * * /return     The number of bytes that were copied into data.  This will be *     less than the requested number of bytes if a time out occurred. */uint32_t freertos_usart_serial_read_packet(freertos_usart_if p_usart,		uint8_t *data, uint32_t len, portTickType block_time_ticks){	portBASE_TYPE usart_index, attempt_read;	Usart *usart_base;	xTimeOutType time_out_definition;	uint32_t bytes_read = 0;	usart_base = (Usart *) p_usart;	usart_index = get_pdc_peripheral_details(all_usart_definitions,			MAX_USARTS,			(void *) usart_base);	/* It is possible to initialise the peripheral to only use Tx and not Rx.	Check that Rx has been initialised. */	configASSERT(rx_buffer_definitions[usart_index].next_byte_to_read);	configASSERT(rx_buffer_definitions[usart_index].next_byte_to_read !=			RX_NOT_USED);	/* Only do anything if the USART is valid. */	if (usart_index < MAX_USARTS) {		/* Must not request more bytes than will fit in the buffer. */		if (len <=				(rx_buffer_definitions[usart_index].past_rx_buffer_end_address				- rx_buffer_definitions[usart_index].rx_buffer_start_address)) {			/* Remember the time on entry. */			vTaskSetTimeOutState(&time_out_definition);			/* If an Rx mutex is in use, attempt to obtain it. */			if (rx_buffer_definitions[usart_index].rx_access_mutex != NULL) {				/* Attempt to obtain the mutex. */				attempt_read = xSemaphoreTake(						rx_buffer_definitions[usart_index].rx_access_mutex,						block_time_ticks);				if (attempt_read == pdTRUE) {					/* The semaphore was obtained, adjust the block_time_ticks to take					into account the time taken to obtain the semaphore. */					if (xTaskCheckForTimeOut(&time_out_definition,							&block_time_ticks) == pdTRUE) {						attempt_read = pdFALSE;						/* The port is not going to be used, so return the						mutex now. */						xSemaphoreGive(rx_buffer_definitions[usart_index].rx_access_mutex);					}				}			} else {				attempt_read = pdTRUE;			}//.........这里部分代码省略.........
开发者ID:gjw09043108,项目名称:MICO,代码行数:101,



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


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