7장 - 예제1

조재훈·2023년 6월 19일

FreeRTOS Task로 LED Blinking

Pin Map 구성

  • ETH Disabled
  • Middleware and Software Packs - FREERTOS
    : Interface : CMSIS_V1

    : Tasks and Queues - Add - Stack Size : 256

코드 구현

main.c

  • 아래의 코드 구현됨
  • osThreadDef
    : Task 생성 함수
    : myTask02 : Task 함수
    : TaskHandle : 우선순위
    : 256 : 스택사이즈
  /* Create the thread(s) */
  /* definition and creation of defaultTask */
  osThreadDef(defaultTask, StartDefaultTask, osPriorityNormal, 0, 128);
  defaultTaskHandle = osThreadCreate(osThread(defaultTask), NULL);

  /* definition and creation of myTask02 */
  osThreadDef(myTask02, StartTask02, osPriorityIdle, 0, 256);
  myTask02Handle = osThreadCreate(osThread(myTask02), NULL);

void StartTask02(void const * argument)

  • OS Task는 for(;;)로 되어있음
  • 각각의 Task는 무한루프로 구성
  • 지연 함수는 HAL_Delay 함수 대신 osDelay() 함수 사용
  • for(;;)문 안에 HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); 추가시 간단하게 코딩 완료
  • 여러개 LED 제어시 Task 추가하여 동일하게 수정 => 동시에 여러개의 프로그램 실행 가능
    : ex) LCD에 글자 입력하면서 동시에 시계 update 등
/* USER CODE BEGIN Header_StartTask02 */
/**
* @brief Function implementing the myTask02 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask02 */
void StartTask02(void const * argument)
{
  /* USER CODE BEGIN StartTask02 */
  /* Infinite loop */
  for(;;)
  {
	HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
    osDelay(200);
  }
  /* USER CODE END StartTask02 */
}

  • Build
  • Debug
  • Execution
  • LED 깜빡임

profile
맨땅에 헤딩. 인생은 실전.

0개의 댓글