查看: 2323|回复: 0

[原创] 【经验分享】RT freertos MCUXpresso工程添加runtime

[复制链接]

该用户从未签到

656

主题

6312

帖子

0

超级版主

Rank: 8Rank: 8

积分
19947
最后登录
2024-4-19
发表于 2020-4-20 15:34:02 | 显示全部楼层 |阅读模式
本帖最后由 小恩GG 于 2020-4-20 15:36 编辑

【经验分享】RT freertos MCUXpresso工程添加runtime

一, 文档说明

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

1.jpg

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

2.jpg

那么如何配置出具体的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

3.jpg

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

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

      SDK pit驱动路径:

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

       4.jpg


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测试:

5.jpg


上图中Task Listruntime,可以看到hello_task IDLEruntime 百分比情况,以已经实现runtime观察功能。
evkmimxrt1064_freertos_hello_runtime.rar (821.19 KB, 下载次数: 30)
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2024-4-20 12:12 , Processed in 0.109556 second(s), 19 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表