【stm32】FreeRTOS实时操作系统1

stm32f103rct6开发板实现FreeRtos,使用Tsk进行对比

FreeRtos

Freertos可以理解为并发,一个cpu快速切换多个任务执行。

原生串行代码,独占cpu

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
int __io_putchar(int ch)
{
    HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, HAL_MAX_DELAY);
    return ch;
}

void UART_TASK(){
  uart_time = HAL_GetTick();
  printf("UART OUTPUT,time:%d!!\r\n",uart_time);

}
void ADC_TASK(){
  HAL_Delay(200);
  adc_time = HAL_GetTick();
  printf("ADC GET DATA,time:%d\r\n",adc_time);
  HAL_Delay(300);

}
void KEY_TASK(){
  
  //如果按键被按下
  if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_5) == GPIO_PIN_RESET) {
    //消抖
    HAL_Delay(10);
    if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_5) == GPIO_PIN_RESET) {
       HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_8);
    }
  
  }

}
void ALL_TASK(){
    UART_TASK();
    ADC_TASK();
    KEY_TASK();
}

FreeRtos

Freertos可以理解为并发,一个cpu快速切换多个任务执行。

原生串行代码,独占cpu

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
int __io_putchar(int ch)
{
    HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, HAL_MAX_DELAY);
    return ch;
}

void UART_TASK(){
  uart_time = HAL_GetTick();
  printf("UART OUTPUT,time:%d!!\r\n",uart_time);

}
void ADC_TASK(){
  HAL_Delay(200);
  adc_time = HAL_GetTick();
  printf("ADC GET DATA,time:%d\r\n",adc_time);
  HAL_Delay(300);

}
void KEY_TASK(){
  
  //如果按键被按下
  if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_5) == GPIO_PIN_RESET) {
    //消抖
    HAL_Delay(10);
    if (HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_5) == GPIO_PIN_RESET) {
       HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_8);
    }
  
  }

}
void ALL_TASK(){
    UART_TASK();
    ADC_TASK();
    KEY_TASK();
}

6f4d0d7ab7f0be4949764c6637e6e57fcd1ced6b

评论

评论区加载中...

本站已稳定运行: 计算中... 天 | 博客: 27 篇 | 字数: 21218
使用 Hugo 构建
主题 StackJimmy 设计