freertos学习-4 调试

下面的步骤记录freertos的调试过程。这里的调试方法主要是教会大家如何

获取任务的执行情况,通过获取的任务信息,可以进一步的配置和优化工

程,这种方法非常实用,建议初学者必须掌握。

很多时候,我们需要了解任务的执行状态,任务栈的使用情况以及各个任务

的 CPU 使用率,这时就需要用到官方提供的两个函数 vTaskList 和

vTaskGetRunTimeStats。用户就可以通过这两个函数获得任务的执行情

况。获取了任务执行情况后,可以通过串口将其打印出来,当然,也可以通

过任何其它方式将其显示出来。

本教程配套的例子统一采用串口打印的方式显示任务的执行情况。另外有一

点要特别注意,这种调试方式仅限测试目的,实际项目中不要使用,这种测

试方式比较影响系统实时性。

1、配置freertosconfig.h

 extern volatile uint32_t ulHighFrequencyTimerTicks;
 #define configGENERATE_RUN_TIME_STATS          1                     
#define configUSE_TRACE_FACILITY                1                      
#define configUSE_STATS_FORMATTING_FUNCTIONS    1   
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()        (ulHighFrequencyTimerTicks = 0ul)
#define portGET_RUN_TIME_COUNTER_VALUE()                         ulHighFrequencyTimerTicks       

2、利用stm32内部的定时器产生一个50us的定时器中断

void Timer2_Configuration(void )
{


    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM2 ,ENABLE );

    TIM_DeInit (TIM2 );//¸´Î»
    TIM_InternalClockConfig(TIM2);//
    TIM_TimeBaseStructure.TIM_Period =100-1;//
    TIM_TimeBaseStructure .TIM_Prescaler =36-1;//
    TIM_TimeBaseStructure .TIM_ClockDivision =TIM_CKD_DIV1 ;//
    TIM_TimeBaseStructure .TIM_CounterMode =TIM_CounterMode_Up ;//
    TIM_TimeBaseInit (TIM2 ,&TIM_TimeBaseStructure );

    TIM_ClearFlag(TIM2,TIM_FLAG_Update );//
    TIM_ARRPreloadConfig (TIM2,DISABLE );//
    TIM_ITConfig (TIM2,TIM_IT_Update ,ENABLE );//

    TIM_Cmd(TIM2,ENABLE);



    NVIC_InitStructure .NVIC_IRQChannel =TIM2_IRQn ;
    NVIC_InitStructure .NVIC_IRQChannelPreemptionPriority =0;
    NVIC_InitStructure .NVIC_IRQChannelSubPriority =0;
    NVIC_InitStructure .NVIC_IRQChannelCmd =ENABLE ;    
    NVIC_Init(&NVIC_InitStructure );
}


void TIM2_IRQHandler(void)
{
    if(TIM_GetITStatus (TIM2 ,TIM_IT_Update )!=RESET )
        {
                TIM_ClearITPendingBit (TIM2 ,TIM_IT_Update );
                 ulHighFrequencyTimerTicks ++;
               Timer2_Over_Flag =1;

        }
}

3、打印相关信息

可以设置为定时打印。      
                    printf("=======================================================\r\n");
                    printf("任务名 任务状态 优先级 剩余栈 任务序号\r\n");
                    vTaskList((char *)&pcWriteBuffer);
                    printf("%s\r\n", pcWriteBuffer);

                    printf("\r\n任务名         运行计数    使用率\r\n");
                    vTaskGetRunTimeStats((char *)&pcWriteBuffer);
                    printf("%s\r\n", pcWriteBuffer);

4、效果
打印

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值