[分享] RT freertos MCUXpresso工程添加runtime
411 查看
0 回复
 楼主 | 发布于 2020-09-22 | 只看楼主
分享到:
一, 文档说明

       在调试RT freertos MCUXpresso SDK工程的时候,很多网友需要添加查看每个taskruntime的功能。可以知道该功能可以在MCUXpressoIDETASK List(FreeRTOS)中调出来:Windows->show view->other->MCUXpressoIDE FreeRTOS->Task List(FreeRTOS),如下图:


但是在运行的RTSDK的工程的时候,会发现Runtime栏目是一个问号,如下:


那么如何配置出具体的Runtime呢?

实际上,我们有个国外的IDE专家写过一篇基于Kinetis K64freertos runtime添加案例:


RTSDK freertos runtime添加和kinetis类似,同样需要添加一个硬件timer去做runtime的记录。K64使用的是FTM RT没有FTM的模块,可以换其他的timer,本文使用PIT硬件定时器去添加到RT freetos代码中,实现MCUXpresso SDK工程的runtime功能。

软硬件准备如下:

  • MIMXRT1064-EVK
  • SDK_2.7.0_EVK-MIMXRT1064
  • MCUXpressIDE


二,具体步骤

2.1 导入SDK工程

      本文以SDKfreertos hello工程为基础:

SDK_2.7.0_EVK-MIMXRT1064\boards\evkmimxrt1064\rtos_examples\freertos_hello

2.2 添加PIT硬件配置

       配置的硬件定时器时间需要至少是RTOS tick时间10倍,从FreeRTOSConfig.h中可以看到RTOS tick时间:

#define configTICK_RATE_HZ                      ((TickType_t)200)

   所以,需要配置PIT的定时时间为200*10=2Khz


        配置好之后,点击update code,更新PIT外设驱动到工程的相关代码中。

      拷贝SDK中的pit.c, pit.h到导入MCUXpresso 工程的driver folder

      SDK pit驱动路径:

SDK_2.7.0_EVK-MIMXRT1064\devices\MIMXRT1064\drivers

       


2.3 修改代码

2.3.1 freertos_hello.c

    添加头文件

  1. #include "peripherals.h"

  2. #include "fsl_pit.h"
复制代码


  添加PIT 中断服务函数

  1. static uint32_t RTOS_RunTimeCounter;/*runtime counter, used for configGENERATE_RUNTIME_STATS */


  2. /* PIT_IRQn interrupt handler */

  3. void PIT_IRQHANDLER(void) {

  4.          /* Clear interrupt flag.*/


  5.          PIT_ClearStatusFlags(PIT,kPIT_Chnl_0,PIT_TFLG_TIF_MASK);

  6.          RTOS_RunTimeCounter++; /* increment runtimecounter */

  7. }
复制代码




  添加runtime相关代码

  1. void RTOS_AppConfigureTimerForRuntimeStats(void) {

  2. RTOS_RunTimeCounter = 0;

  3. EnableIRQ(PIT_IRQn);

  4. }


  5. uint32_t RTOS_AppGetRuntimeCounterValueFromISR(void) {

  6. return RTOS_RunTimeCounter;

  7. }
复制代码


Main函数添加外设调用

  1. BOARD_InitBootPeripherals();
复制代码



Hello_task任务函数把挂起改为vTaskDelay.

  1. static void hello_task(void *pvParameters)

  2. {

  3.    for (;;)

  4.    {

  5.        PRINTF("Hello world.\r\n");

  6.      //  vTaskSuspend(NULL);

  7.        vTaskDelay(pdMS_TO_TICKS(100));//kerry

  8.    }

  9. }
复制代码



2.3.2 FreeRTOSConfig.h

    Run time宏定义打开

  1. #defineconfigGENERATE_RUN_TIME_STATS           1

  2. #defineconfigUSE_TRACE_FACILITY                1
复制代码


添加runtime的宏定义相关代码

  1. extern void RTOS_AppConfigureTimerForRuntimeStats(void);

  2. #defineportCONFIGURE_TIMER_FOR_RUN_TIME_STATS()  RTOS_AppConfigureTimerForRuntimeStats()

  3. extern uint32_t RTOS_AppGetRuntimeCounterValueFromISR(void);

  4. #define portGET_RUN_TIME_COUNTER_VALUE()          RTOS_AppGetRuntimeCounterValueFromISR()
复制代码

到目前为止,所有代码以及修改完毕。


三,测试结果

下面进行烧录到MIMXRT1064-EVK测试:



上图中Task Listruntime,可以看到hello_task IDLEruntime 百分比情况,以已经实现runtime观察功能。

本帖有更多资源,需 登录 才可以下载,没有帐号?立即 注册

(0 ) (0 )
回复 举报
  • 发表回复
    0/3000





    举报

    请选择举报类别

    • 广告垃圾
    • 违规内容
    • 恶意灌水
    • 重复发帖

    全部板块

    返回顶部