FreeRTOS之任务挂起和恢复实验

1、 创建key任务和led任务

void m_create_task_suspended(void)
{
    xTaskCreate(key_task, "key_task", configMINIMAL_STACK_SIZE + 200, NULL, 2, &key_task_handle);
    xTaskCreate(led_task, "led_task", configMINIMAL_STACK_SIZE + 200, NULL, 2, &led_task_handle);
}

2、 编写key任务入口函数和led任务入口函数

#ifndef TAG_BLE
#define LOG_BLE(...)
#endif

static TaskHandle_t  key_task_handle;
static TaskHandle_t  led_task_handle;
static void key_task (void * pvParameter)
{
    uint8_t button1_sta=0;
    eTaskState task_state_temp;
    char*p_task_state_string[6]= {"eRunning",
                                  "eReady",
                                  "eBlocked",
                                  "eSuspended",
                                  "eDeleted",
                                  "eInvalid",
                                 };
    while (true)
    {

        if (READ_BUTTON1_P11() == BUTTON_PUSH)
        {
            if (button1_sta==0)
            {
                button1_sta = 1;
                task_state_temp = eTaskGetState(led_task_handle);
                LOG_BLE("current led task sta is %s\n",p_task_state_string[task_state_temp]);
                switch(task_state_temp)
                {
                case eReady:
				case eBlocked:
                    LOG_BLE("Suspended led task\n");
                    vTaskSuspend(led_task_handle);
                    break;

                case eSuspended:
                    LOG_BLE("Resume led task\n");
                    vTaskResume(led_task_handle);
                    break;
                default:
                    LOG_BLE("Do nothing\n");
                    break;
                }

            }
        } else
        {
            button1_sta = 0;
        }

        vTaskDelay(20);
    }
}
static void led_task (void * pvParameter)
{
    while(1)
    {
        TOGGLE_LED13();
        TOGGLE_LED14();
        TOGGLE_LED15();
        TOGGLE_LED16();
		LOG_BLE("led task runing\n");
        vTaskDelay(1000);
    }
}

3、 实验显现
led任务1秒间隔闪烁和打印"led task runing\n"
当key任务以20ms查询按键状态。
当判断到有按键按下时:
①如果led任务阻塞或就绪时,就将led任务挂起。led任务暂定运行。
②如果led任务挂起时,就将led任务恢复。led任务恢复运行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值