首页 论坛 原厂专区 NXP(freescale) MCU RT freertos MCUXpresso工程添加runtime
分享到:
一, 文档说明
在调试RT freertos MCUXpresso SDK工程的时候,很多网友需要添加查看每个task的runtime的功能。可以知道该功能可以在MCUXpressoIDE的TASK List(FreeRTOS)中调出来:Windows->show view->other->MCUXpressoIDE FreeRTOS->Task List(FreeRTOS),如下图:

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

那么如何配置出具体的Runtime呢?
实际上,我们有个国外的IDE专家写过一篇基于Kinetis K64的freertos runtime添加案例:
RT的SDK 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
添加头文件
-
#include "peripherals.h"
-
- #include "fsl_pit.h"
添加PIT 中断服务函数
-
static uint32_t RTOS_RunTimeCounter;/*runtime counter, used for configGENERATE_RUNTIME_STATS */
-
-
-
/* PIT_IRQn interrupt handler */
-
-
void PIT_IRQHANDLER(void) {
-
-
/* Clear interrupt flag.*/
-
-
-
PIT_ClearStatusFlags(PIT,kPIT_Chnl_0,PIT_TFLG_TIF_MASK);
-
-
RTOS_RunTimeCounter++; /* increment runtimecounter */
-
- }
添加runtime相关代码
-
void RTOS_AppConfigureTimerForRuntimeStats(void) {
-
-
RTOS_RunTimeCounter = 0;
-
-
EnableIRQ(PIT_IRQn);
-
-
}
-
-
-
uint32_t RTOS_AppGetRuntimeCounterValueFromISR(void) {
-
-
return RTOS_RunTimeCounter;
-
- }
Main函数添加外设调用
- BOARD_InitBootPeripherals();
Hello_task任务函数把挂起改为vTaskDelay.
-
-
static void hello_task(void *pvParameters)
-
-
{
-
-
for (;;)
-
-
{
-
-
PRINTF("Hello world.\r\n");
-
-
// vTaskSuspend(NULL);
-
-
vTaskDelay(pdMS_TO_TICKS(100));//kerry
-
-
}
-
-
}
2.3.2 FreeRTOSConfig.h
Run time宏定义打开
-
#defineconfigGENERATE_RUN_TIME_STATS 1
-
- #defineconfigUSE_TRACE_FACILITY 1
添加runtime的宏定义相关代码
-
extern void RTOS_AppConfigureTimerForRuntimeStats(void);
-
-
#defineportCONFIGURE_TIMER_FOR_RUN_TIME_STATS() RTOS_AppConfigureTimerForRuntimeStats()
-
-
extern uint32_t RTOS_AppGetRuntimeCounterValueFromISR(void);
-
-
#define portGET_RUN_TIME_COUNTER_VALUE() RTOS_AppGetRuntimeCounterValueFromISR()
到目前为止,所有代码以及修改完毕。
三,测试结果
下面进行烧录到MIMXRT1064-EVK测试:

上图中Task List中runtime,可以看到hello_task, IDLE的runtime 百分比情况,以已经实现runtime观察功能。
(0 )
(0 )


发表回复
块
导
航
举报
请选择举报类别
- 广告垃圾
- 违规内容
- 恶意灌水
- 重复发帖