本文整理汇总了C++中chSemSignal函数的典型用法代码示例。如果您正苦于以下问题:C++ chSemSignal函数的具体用法?C++ chSemSignal怎么用?C++ chSemSignal使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了chSemSignal函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: i2cReceiveS
uint8_t i2cReceiveS(I2C_TypeDef* I2Cx, const uint8_t addr, uint8_t *buffer, uint8_t len)
{
uint8_t timeout;
if (chSemWaitTimeout(&i2c1_semS, MS2ST(I2C_TIMEOUT)) != MSG_OK)
{
return 1;
}
I2C_TransferHandling(I2Cx, addr, len, I2C_AutoEnd_Mode, I2C_Generate_Start_Read);
while (len--)
{
timeout = 100;
while(I2C_GetFlagStatus(I2Cx, I2C_ISR_RXNE) == RESET)
{
chThdSleepMicroseconds(50);
if (!timeout--)
{
chSemSignal(&i2c1_semS);
return 1;
}
};
*buffer++ = I2Cx->RXDR;
}
chSemSignal(&i2c1_semS);
return 0;
}
开发者ID:eos1d3,项目名称:OpenTCS,代码行数:27,代码来源:communications.c
示例2: Th2
static msg_t Th2(void *p) {
(void)p;
chRegSetThreadName("Th2");
while (TRUE) {
/////DEVICE 2///////////
if(palReadPad(GPIO1_PORT, GPIO1_PAD) != PAL_HIGH)
{
palWritePad(GPIO22_PORT,GPIO22_PAD,PAL_HIGH);
chSemWait(&mySemaphore);
chprintf((BaseSequentialStream *)&SD1, "D2ON\r\n");
chSemSignal(&mySemaphore);
}else{
palWritePad(GPIO22_PORT,GPIO22_PAD,PAL_LOW);
chSemWait(&mySemaphore);
chprintf((BaseSequentialStream *)&SD1, "D2OFF\r\n");
chSemSignal(&mySemaphore);
}
chThdSleepMilliseconds(1000);
}
return 0;
}
开发者ID:jesshack10,项目名称:iotwebmanager,代码行数:28,代码来源:main4Threads.c
示例3: rt_test_005_002_execute
static void rt_test_005_002_execute(void) {
/* [5.2.1] Five threads are created with mixed priority levels (not
increasing nor decreasing). Threads enqueue on a semaphore
initialized to zero.*/
test_set_step(1);
{
threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriorityX()+5, thread1, "A");
threads[1] = chThdCreateStatic(wa[1], WA_SIZE, chThdGetPriorityX()+1, thread1, "B");
threads[2] = chThdCreateStatic(wa[2], WA_SIZE, chThdGetPriorityX()+3, thread1, "C");
threads[3] = chThdCreateStatic(wa[3], WA_SIZE, chThdGetPriorityX()+4, thread1, "D");
threads[4] = chThdCreateStatic(wa[4], WA_SIZE, chThdGetPriorityX()+2, thread1, "E");
}
/* [5.2.2] The semaphore is signaled 5 times. The thread activation
sequence is tested.*/
test_set_step(2);
{
chSemSignal(&sem1);
chSemSignal(&sem1);
chSemSignal(&sem1);
chSemSignal(&sem1);
chSemSignal(&sem1);
test_wait_threads();
#if CH_CFG_USE_SEMAPHORES_PRIORITY
test_assert_sequence("ADCEB", "invalid sequence");
#else
test_assert_sequence("ABCDE", "invalid sequence");
#endif
}
}
开发者ID:mabl,项目名称:ChibiOS,代码行数:31,代码来源:rt_test_sequence_005.c
示例4: LowSpeedGTimerCallback
static void LowSpeedGTimerCallback(void *param) {
(void) param;
GADCCallbackFunction fn;
void *prm;
adcsample_t *buffer;
struct lsdev *p;
#if ADC_ISR_FULL_CODE_BUG
/* Ensure the ADC is running if it needs to be - Bugfix HACK */
StartADC(FALSE);
#endif
/**
* Look for completed low speed timers.
* We don't need to take the mutex as we are the only place that things are freed and we
* do that atomically.
*/
for(p=ls; p < &ls[GADC_MAX_LOWSPEED_DEVICES]; p++) {
if ((p->flags & (GADC_FLG_ISACTIVE|GADC_FLG_ISDONE)) == (GADC_FLG_ISACTIVE|GADC_FLG_ISDONE)) {
/* This item is done - perform its callback */
fn = p->fn; // Save the callback details
prm = p->param;
buffer = p->lld.buffer;
p->fn = 0; // Needed to prevent the compiler removing the local variables
p->param = 0; // Needed to prevent the compiler removing the local variables
p->lld.buffer = 0; // Needed to prevent the compiler removing the local variables
p->flags = 0; // The slot is available (indivisible operation)
chSemSignal(&gadcsem); // Tell everyone
fn(buffer, prm); // Perform the callback
}
}
}
开发者ID:niamster,项目名称:ChibiOS-GFX,代码行数:33,代码来源:gadc.c
示例5: spiSendI
uint8_t spiSendI(SPI_TypeDef* SPIx, uint8_t* buffer, uint16_t len)
{
if (SPIx == SPI1)
{
if (chSemWaitTimeout(&spi1_semI, TIME_IMMEDIATE) != MSG_OK)
{
return 1;
}
/* Stop and re-initialise DMA1
* We don't care if it was running,
* we'll restart from the beginning of the buffer
*/
DMA_CHANNEL_SPI1_TX->CCR &= ~DMA_CCR_EN; /* Stop DMA1_Channel3 */
DMA1->IFCR |= DMA_CTCIF_SPI1_TX; /* Clear transfer complete flag */
DMA_CHANNEL_SPI1_TX->CMAR = (uint32_t)buffer;
DMA_CHANNEL_SPI1_TX->CNDTR = len;
/* Start DMA1_Channel3 */
DMA_CHANNEL_SPI1_TX->CCR |= DMA_CCR_EN;
chSemSignal(&spi1_semI);
return 0;
}
else
{
return 1;
}
}
开发者ID:eos1d3,项目名称:OpenTCS,代码行数:28,代码来源:communications.c
示例6: rt_test_005_001_execute
static void rt_test_005_001_execute(void) {
/* [5.1.1] The function chSemWait() is invoked, after return the
counter and the returned message are tested.*/
test_set_step(1);
{
msg_t msg;
msg = chSemWait(&sem1);
test_assert_lock(chSemGetCounterI(&sem1) == 0, "wrong counter value");
test_assert(MSG_OK == msg, "wrong returned message");
}
/* [5.1.2] The function chSemSignal() is invoked, after return the
counter is tested.*/
test_set_step(2);
{
chSemSignal(&sem1);
test_assert_lock(chSemGetCounterI(&sem1) == 1, "wrong counter value");
}
/* [5.1.3] The function chSemReset() is invoked, after return the
counter is tested.*/
test_set_step(3);
{
chSemReset(&sem1, 2);
test_assert_lock(chSemGetCounterI(&sem1) == 2, "wrong counter value");
}
}
开发者ID:mabl,项目名称:ChibiOS,代码行数:29,代码来源:rt_test_sequence_005.c
示例7: usartSendI
uint8_t usartSendI(USART_TypeDef* USARTx, const char* buffer, uint16_t len)
{
uint8_t ret = 1;
if (USARTx == USART1)
{
if (chSemWaitTimeout(&usart1_semI, TIME_IMMEDIATE) != MSG_OK)
{
return 1;
}
if (len > USART_TXBUF_SIZE)
{
len = USART_TXBUF_SIZE;
}
/* Copy data to usart tx buffer */
memcpy(usart_txbuf, buffer, len);
/* Stop and re-initialise DMA1
* We don't care if it was running,
* we'll restart from the beginning of the buffer
*/
DMA_CHANNEL_USART1_TX->CCR &= ~DMA_CCR_EN; /* Stop DMA1_Channel */
DMA1->IFCR |= DMA_CTCIF_USART1_TX; /* Clear transfer complete flag */
DMA_CHANNEL_USART1_TX->CMAR = (uint32_t)usart_txbuf;
DMA_CHANNEL_USART1_TX->CNDTR = len;
/* Start DMA1_Channel4 */
DMA_CHANNEL_USART1_TX->CCR |= DMA_CCR_EN;
chSemSignal(&usart1_semI);
}
return ret;
}
开发者ID:eos1d3,项目名称:OpenTCS,代码行数:33,代码来源:communications.c
示例8: usartSendS
uint8_t usartSendS(USART_TypeDef* USARTx, const char* buffer, uint16_t len)
{
uint8_t ret = 1;
if (USARTx == USART1)
{
if (chSemWaitTimeout(&usart1_semS, MS2ST(USART_TIMEOUT)) != MSG_OK)
{
return 1;
}
/* DMA */
// if((DMA1->ISR & DMA_TCIF_USART1_TX) == RESET)
// {
// DMA1->IFCR |= DMA_CTCIF_USART1_TX; /* Clear transfer complete flag */
// }
// ret = usartSendI(USARTx, buffer, len);
// /* Wait for transfer to finish */
// while((DMA1->ISR & DMA_TCIF_USART1_TX) == RESET) {};
// DMA1->IFCR |= DMA_CTCIF_USART1_TX; /* Clear transfer complete flag */
/* Manual */
while (len--) {
USARTx->TDR = (*buffer++ & (uint16_t)0x01FF);
while ((USARTx->ISR & USART_ISR_TXE) == RESET);
}
chSemSignal(&usart1_semS);
}
return ret;
}
开发者ID:eos1d3,项目名称:OpenTCS,代码行数:31,代码来源:communications.c
示例9: thread3
static msg_t thread3(void *p) {
(void)p;
chSemWait(&sem1);
chSemSignal(&sem1);
return 0;
}
开发者ID:Nitrokey,项目名称:nitrokey-start-firmware,代码行数:7,代码来源:testsem.c
示例10: uart_put_buffer
/**
* Uart transmit buffer implementation
*/
void uart_put_buffer(struct uart_periph *p, long fd, const uint8_t *data, uint16_t len)
{
struct SerialInit *init_struct = (struct SerialInit*)(p->init_struct);
if (fd == 0) {
// if fd is zero, assume the driver is not already locked
// and available space should be checked
chMtxLock(init_struct->tx_mtx);
int16_t space = p->tx_extract_idx - p->tx_insert_idx;
if (space <= 0) {
space += UART_TX_BUFFER_SIZE;
}
if ((uint16_t)(space - 1) < len) {
chMtxUnlock(init_struct->tx_mtx);
return; // no room
}
}
// insert data into buffer
int i;
for (i = 0; i < len; i++) {
p->tx_buf[p->tx_insert_idx] = data[i];
p->tx_insert_idx = (p->tx_insert_idx + 1) % UART_TX_BUFFER_SIZE;
}
// unlock if needed
if (fd == 0) {
chMtxUnlock(init_struct->tx_mtx);
// send signal to start transmission
chSemSignal (init_struct->tx_sem);
}
}
开发者ID:enacuavlab,项目名称:paparazzi,代码行数:32,代码来源:uart_arch.c
示例11: usbhmsdLUNDisconnect
bool usbhmsdLUNDisconnect(USBHMassStorageLUNDriver *lunp) {
osalDbgCheck(lunp != NULL);
chSemWait(&lunp->sem);
osalDbgAssert((lunp->state == BLK_READY) || (lunp->state == BLK_ACTIVE), "invalid state");
if (lunp->state == BLK_ACTIVE) {
chSemSignal(&lunp->sem);
return HAL_SUCCESS;
}
lunp->state = BLK_DISCONNECTING;
//TODO: complete: sync, etc.
lunp->state = BLK_ACTIVE;
chSemSignal(&lunp->sem);
return HAL_SUCCESS;
}
开发者ID:dismirlian,项目名称:ChibiOS-Contrib,代码行数:18,代码来源:hal_usbh_msd.c
示例12: _lun_object_deinit
static void _lun_object_deinit(USBHMassStorageLUNDriver *lunp) {
osalDbgCheck(lunp != NULL);
chSemWait(&lunp->sem);
lunp->msdp = NULL;
lunp->next = NULL;
memset(&lunp->info, 0, sizeof(lunp->info));
lunp->state = BLK_STOP;
chSemSignal(&lunp->sem);
}
开发者ID:dismirlian,项目名称:ChibiOS-Contrib,代码行数:9,代码来源:hal_usbh_msd.c
示例13: usbhmsdLUNWrite
bool usbhmsdLUNWrite(USBHMassStorageLUNDriver *lunp, uint32_t startblk,
const uint8_t *buffer, uint32_t n) {
osalDbgCheck(lunp != NULL);
bool ret = HAL_FAILED;
uint16_t blocks;
msd_result_t res;
uint32_t actual_len;
chSemWait(&lunp->sem);
if (lunp->state != BLK_READY) {
chSemSignal(&lunp->sem);
return ret;
}
lunp->state = BLK_WRITING;
while (n) {
if (n > 0xffff) {
blocks = 0xffff;
} else {
blocks = (uint16_t)n;
}
res = scsi_write10(lunp, startblk, blocks, buffer, &actual_len);
if (res == MSD_RESULT_DISCONNECTED) {
goto exit;
} else if (res == MSD_RESULT_TRANSPORT_ERROR) {
//retry?
goto exit;
} else if (res == MSD_RESULT_FAILED) {
//retry?
goto exit;
}
n -= blocks;
startblk += blocks;
buffer += blocks * lunp->info.blk_size;
}
ret = HAL_SUCCESS;
exit:
lunp->state = BLK_READY;
chSemSignal(&lunp->sem);
return ret;
}
开发者ID:dismirlian,项目名称:ChibiOS-Contrib,代码行数:44,代码来源:hal_usbh_msd.c
示例14: sem1_execute
static void sem1_execute(void) {
threads[0] = chThdCreateStatic(wa[0], WA_SIZE, chThdGetPriority()+5, thread1, "A");
threads[1] = chThdCreateStatic(wa[1], WA_SIZE, chThdGetPriority()+1, thread1, "B");
threads[2] = chThdCreateStatic(wa[2], WA_SIZE, chThdGetPriority()+3, thread1, "C");
threads[3] = chThdCreateStatic(wa[3], WA_SIZE, chThdGetPriority()+4, thread1, "D");
threads[4] = chThdCreateStatic(wa[4], WA_SIZE, chThdGetPriority()+2, thread1, "E");
chSemSignal(&sem1);
chSemSignal(&sem1);
chSemSignal(&sem1);
chSemSignal(&sem1);
chSemSignal(&sem1);
test_wait_threads();
#if CH_USE_SEMAPHORES_PRIORITY
test_assert_sequence(1, "ADCEB");
#else
test_assert_sequence(1, "ABCDE");
#endif
}
开发者ID:Nitrokey,项目名称:nitrokey-start-firmware,代码行数:19,代码来源:testsem.c
示例15: uart_send_message
void uart_send_message(struct uart_periph *p, long fd)
{
struct SerialInit *init_struct = (struct SerialInit*)(p->init_struct);
// unlock driver in case it is not done (fd > 0)
if (fd != 0) {
chMtxUnlock(init_struct->tx_mtx);
}
// send signal to start transmission
chSemSignal (init_struct->tx_sem);
}
开发者ID:enacuavlab,项目名称:paparazzi,代码行数:10,代码来源:uart_arch.c
示例16: i2cReleaseBus
/**
* @brief Releases exclusive access to the I2C bus.
* @pre In order to use this function the option @p I2C_USE_MUTUAL_EXCLUSION
* must be enabled.
*
* @param[in] i2cp pointer to the @p I2CDriver object
*
* @api
*/
void i2cReleaseBus(I2CDriver *i2cp) {
chDbgCheck(i2cp != NULL, "i2cReleaseBus");
#if CH_USE_MUTEXES
chMtxUnlock();
#elif CH_USE_SEMAPHORES
chSemSignal(&i2cp->semaphore);
#endif
}
开发者ID:Ankhbayar,项目名称:mlab-chibios,代码行数:19,代码来源:i2c.c
示例17: spiReleaseBus
/**
* @brief Releases exclusive access to the SPI bus.
* @pre In order to use this function the option @p SPI_USE_MUTUAL_EXCLUSION
* must be enabled.
*
* @param[in] spip pointer to the @p SPIDriver object
*
* @api
*/
void spiReleaseBus(SPIDriver *spip) {
chDbgCheck(spip != NULL, "spiReleaseBus");
#if CH_USE_MUTEXES
(void)spip;
chMtxUnlock();
#elif CH_USE_SEMAPHORES
chSemSignal(&spip->semaphore);
#endif
}
开发者ID:DuinoPilot,项目名称:STM32F4Discovery-ethernet-PHY-DP83848-demo-ChibiOS,代码行数:20,代码来源:spi.c
示例18: chSemWait
void Lcd_t::PrintfInverted(const uint8_t x, const uint8_t y, const char *S, ...) {
msg_t msg = chSemWait(&semLcd);
if(msg == RDY_OK) {
GotoCharXY(x, y);
va_list args;
va_start(args, S);
kl_vsprintf(FLcdPutCharInverted, 16, S, args);
va_end(args);
chSemSignal(&semLcd);
}
}
开发者ID:Kreyl,项目名称:Lume,代码行数:11,代码来源:lcd1200.cpp
示例19: adcReleaseBus
/**
* @brief Releases exclusive access to the ADC peripheral.
* @pre In order to use this function the option
* @p ADC_USE_MUTUAL_EXCLUSION must be enabled.
*
* @param[in] adcp pointer to the @p ADCDriver object
*
* @api
*/
void adcReleaseBus(ADCDriver *adcp) {
chDbgCheck(adcp != NULL, "adcReleaseBus");
#if CH_USE_MUTEXES
(void)adcp;
chMtxUnlock();
#elif CH_USE_SEMAPHORES
chSemSignal(&adcp->semaphore);
#endif
}
开发者ID:Ankhbayar,项目名称:mlab-chibios,代码行数:20,代码来源:adc.c
示例20: dacReleaseBus
/**
* @brief Releases exclusive access to the DAC bus.
* @pre In order to use this function the option @p DAC_USE_MUTUAL_EXCLUSION
* must be enabled.
*
* @param[in] dacp pointer to the @p DACDriver object
*
* @api
*/
void dacReleaseBus(DACDriver *dacp) {
chDbgCheck(dacp != NULL, "dacReleaseBus");
#if CH_USE_MUTEXES
(void)dacp;
chMtxUnlock();
#elif CH_USE_SEMAPHORES
chSemSignal(&dacp->semaphore);
#endif
}
开发者ID:Rossano,项目名称:ez430_ChibiOS,代码行数:20,代码来源:dac.c
注:本文中的chSemSignal函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论