I tried to implement binary semaphore . but not succeded yet.
can you look into that ?
{
/* EXTI line interrupt detected */
if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00u)
{
if(GPIO_Pin==MCU_IMU_INTERRUPT1_Pin){
extern SemaphoreHandle_t xInterruptSemaphore;
xInterruptSemaphore= xSemaphoreCreateBinary();
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
xSemaphoreGiveFromISR(xInterruptSemaphore,&xHigherPriorityTaskWoken);
portEND_SWITCHING_ISR(xHigherPriorityTaskWoken);
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
HAL_GPIO_EXTI_Callback(GPIO_Pin);
}
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
HAL_GPIO_EXTI_Callback(GPIO_Pin);
}
}
void Thread_Lsm6dsox(void *argument)
{
(void) argument;
// lsm6dsox_all_src_t all_source;
// lsm6dsox_all_int_src_t ints;
// uint8_t* INT1;
// INT1=&ints;
// int32_t ret_int;
// ret_int = lsm6dsox_read_reg(&hi2c3,LSM6DSOX_READ, LSM6DSOX_ALL_INT_SRC,INT1, 1);
// /* Check if Single Tap events */
// lsm6dsox_all_sources_get(&hi2c3, &all_source);
for(;;) {
if (xSemaphoreTake(xInterruptSemaphore,portMAX_DELAY)==pdPASS) {
/* Wait Events */
HAL_GPIO_WritePin(MCU_LED1_R_GPIO_Port, MCU_LED1_R_Pin, GPIO_PIN_SET);
vTaskDelay(1000);
HAL_GPIO_WritePin(MCU_LED1_R_GPIO_Port, MCU_LED1_R_Pin, GPIO_PIN_RESET);
// vTaskSuspend(NULL);
// osThreadYield();
}
}
}