7장 - 예제2

조재훈·2023년 6월 19일

FreeRTOS상에서 2개의 LED On/Off

  • FreeRTOS 환경 생성
  • Task1에서 100ms 주기로 LED On/Off
  • Task2에서 "UNIST 자기이름"을 Tera Term에 출력
  • Task3에서 User 입력 버튼에 따라 적색 LED를 On/Off

Pin Map

  • ETH Disabled
  • FREERTOS : CMSIS_V1
    : Task 4개 생성

Code

  • Thread 생성
  /* 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);

  /* definition and creation of myTask03 */
  osThreadDef(myTask03, StartTask03, osPriorityIdle, 0, 256);
  myTask03Handle = osThreadCreate(osThread(myTask03), NULL);

  /* definition and creation of myTask04 */
  osThreadDef(myTask04, StartTask04, osPriorityIdle, 0, 256);
  myTask04Handle = osThreadCreate(osThread(myTask04), NULL);

main.c

#include <stdio.h>

unsigned char ReadSW;

int _write(int file, unsigned char* p, int len)
{
	HAL_StatusTypeDef status = HAL_UART_Transmit(&huart3, p, len, 100);
	return (status == HAL_OK ? len : 0);
}

void StartTask02(void const * argument)
{
  for(;;)
  {
	HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
    osDelay(100);
  }
}


void StartTask03(void const * argument)
{
  for(;;)
  {
	printf("UNIST Jaewhoon Cho\r\n");
    osDelay(100);
  }
}


void StartTask04(void const * argument)
{
  for(;;)
  {
	if(HAL_GPIO_ReadPin(USER_Btn_GPIO_Port, USER_Btn_Pin))
	{
		HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_SET);
	}
	else
	{
		HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_RESET);
	}
    osDelay(1);
  }
}



코드 실행

LED 점등



Tera Term 출력

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

0개의 댓글