请添加图片描述

打开freertos.c 70行

可以看到定义的互斥锁

使用:

extern osMutexId myMutexSDHandle; //先声明
/* USER CODE END Header_StartTask07 */
void StartTask07(void const * argument)
{
  /* USER CODE BEGIN StartTask07 */
  /* Infinite loop */
	osStatus ret; // 用于检查获取互斥量的状态
  for(;;)
  {
		// osWaitForever 表示一直等待直到获取到锁
    ret = osMutexWait(myMutexSDHandle, osWaitForever);
		if (ret == osOK)
    {
    HAL_UART_Transmit(&huart1, (uint8_t*)"okkk", 4, 1000);
		osMutexRelease(myMutexSDHandle);
    }
    else
    {
      // 如果获取失败(理论上 osWaitForever 不会失败,除非系统错误)
      // 可以在这里添加错误处理
    }

    osDelay(20);
  }
  /* USER CODE END StartTask07 */
}

在执行阻塞式HAL_UART_Transmit就不会被抢占了

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐