Software timer trong RTOS là gì ? Cách sử dụng Software timer và các ví dụ minh họa

Tổng quan

Software timers

Software timer (hay chúng ta thường gọi là timer) là hàm cho phép chúng ta có thể thực thi 1 tác vụ nào đó trong thời gian được định trước ở tương lai. Hàm được thực thi bởi timer sẽ được gọi bởi hàm timer callback. Thời gian giữa lúc timer start và callback function của nó được thực thi được gọi là thời gian của timer (timer’s period). Nói đơn giản thì hàm timer callback function sẽ được thực thi khi thời gian của timer kết thúc.

Tất nhiên có một lưu ý là phải tạo software timer trước khi sử dụng nó.

Như vậy nghĩa là Software timer là một trong những thành phần của RTOS, vì có liên quan tới timer nên nó có thể mở rộng số lượng timer trong STM32. Tuy nhiên nhược điểm là không chính xác tuyệt đối nên thường được dùng thể đảm nhiệm các hoạt động định kỳ hoặc các hoạt động có liên quan tới delay

Có 2 mode như hình bên dưới

  • Periodic
  • One Pulse

Tạo Software Timer

Tạo software timer với hàm

myTimer01Handle = osTimerCreate(osTimer(myTimer01), osTimerPeriodic, NULL);

Trong đó:

  • myTimer01Handle: Timer handle
  • myTimer01: Định nghĩa timer
  • osTimerPeriodic: loại timer, periodic hay one pulse

Start software timer với hàm

osTimerStart(myTimer01Handle, 1000);

Với:

  • myTimer01Handle: Timer id/handle
  • 1000: thời gian timer

Stop software timer với hàm

osTimerStop(myTimer01Handle);

Ví dụ

Ở ví dụ này ta dùng cubeMX để tạo software timer và có callback sau thời gian timer là 1000

  • Tạo 1 task và cài đặt các thông số
  • Tạo timer, set tên và tên của timer callback

Sau khi cấu hình xong ta gen code và kiểm tra xem file main.c có gì nào

Định nghĩa software timer tại

/* Private variables ---------------------------------------------------------*/
osThreadId Task1Handle;
osTimerId myTimer01Handle;

Tạo software timer

/* Create the timer(s) */
 /* definition and creation of myTimer01 */
 osTimerDef(myTimer01, Callback01);
 myTimer01Handle = osTimerCreate(osTimer(myTimer01), osTimerPeriodic, NULL);

Start software timer

/* USER CODE END Header_StartTask1 */
void StartTask1(void const * argument)
{
 
  /* USER CODE BEGIN 5 */
    osTimerStart(myTimer01Handle, 1000);
  /* Infinite loop */
  for(;;)
  {
        osDelay(2000);
        printf("Task 1 Print\n");
 
  }
  /* USER CODE END 5 */
}

Callback cho software timer

/* Callback01 function */
void Callback01(void const * argument)
{
  /* USER CODE BEGIN Callback01 */
  printf("Timer Print\n");
  /* USER CODE END Callback01 */
}

Kết quả

Tạm kết

Vậy là đã xong được một số bước cơ bản về ví dụ với Software timer, các bạn có thể tạo software timer và sử dụng nó trong chương trình cụ thể, hi vọng các bạn có thể nắm được cơ bản để có thể phát triển nó lên 1 tầm cao mới