目录

修改FreeRTOS代码

创建任务

编写任务函数

添加定时器模块

配置定时器模块​初始化,并注册中断函数

编写中断函数

打印下系统信息

打印FreeRTOS系统信息现象


Freertos---SDK修改(和修改代码一个效果)

修改FreeRTOS代码

main.c中添加
uint8_t CPU_RunInfo[400];
volatile uint32_t CPU_RunTime;FreeRTOSconfig.h中修改
/* Run time and task stats gathering related definitions. */
#define configGENERATE_RUN_TIME_STATS            0
#define configUSE_TRACE_FACILITY                 0
#define configUSE_STATS_FORMATTING_FUNCTIONS     0///修改为
/* Run time and task stats gathering related definitions. */
#define configGENERATE_RUN_TIME_STATS            1
#define configUSE_TRACE_FACILITY                 1
#define configUSE_STATS_FORMATTING_FUNCTIONS     1extern volatile uint32_t CPU_RunTime;
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() (CPU_RunTime = 0ul)
#define portGET_RUN_TIME_COUNTER_VALUE() CPU_RunTime

创建任务

/*创建任务*/
void rtos_start(void)
{xTaskCreate(   (TaskFunction_t )                   LED1_Task,(        char * )                     "LED1_Task",(const configSTACK_DEPTH_TYPE)      configMINIMAL_STACK_SIZE ,(void *                   )           NULL,(UBaseType_t     )                 14,(TaskHandle_t *)                     NULL ) ;xTaskCreate(    (TaskFunction_t )                   LED2_Task,(        char * )                     "LED2_Task",(const configSTACK_DEPTH_TYPE)      configMINIMAL_STACK_SIZE ,(void *                   )           NULL,(UBaseType_t     )                 14,(TaskHandle_t *)                     NULL ) ;xTaskCreate(    (TaskFunction_t )                   LED3_Task,(        char * )                     "LED3_Task",(const configSTACK_DEPTH_TYPE)      configMINIMAL_STACK_SIZE ,(void *                   )           NULL,(UBaseType_t     )                 14,(TaskHandle_t *)                     NULL ) ;xTaskCreate(    (TaskFunction_t )                   LED4_Task,(        char * )                     "LED4_Task",(const configSTACK_DEPTH_TYPE)      configMINIMAL_STACK_SIZE ,(void *                   )           NULL,(UBaseType_t     )                 14,(TaskHandle_t *)                     NULL ) ;xTaskCreate(    (TaskFunction_t )                   main_Task,(        char * )                     "main_Task",(const configSTACK_DEPTH_TYPE)      configMINIMAL_STACK_SIZE ,(void *                   )           NULL,(UBaseType_t     )                 14,(TaskHandle_t *)                     NULL ) ;vTaskStartScheduler();}

编写任务函数

void LED1_Task( void *pvParameters )
{(void) pvParameters;uint8_t count = 0;while(1){count++;if(20 == count){count = 0;u1_printf("LED1_Task  running & !\r\n");}PINS_DRV_TogglePins(PTD, 1 << 0);vTaskDelay(800);}
}void LED2_Task( void *pvParameters )
{(void) pvParameters;uint8_t count = 0;while(1){count++;if(20 == count){count = 0;u1_printf("LED2_Task  running & !\r\n");}PINS_DRV_TogglePins(PTD, 1 << 1);vTaskDelay(400);}
}void LED3_Task( void *pvParameters )
{(void) pvParameters;uint8_t count = 0;while(1){count++;if(20 == count){count = 0;u1_printf("LED3_Task  running & !\r\n");}PINS_DRV_TogglePins(PTD, 1 << 15);vTaskDelay(200);}
}void LED4_Task( void *pvParameters )
{(void) pvParameters;uint8_t count = 0;while(1){count++;if(20 == count){count = 0;u1_printf("LED4_Task  running & !\r\n");}PINS_DRV_TogglePins(PTD, 1 << 16);vTaskDelay(100);}
}TaskHandle_t TEST_task_handler;/*创建一个任务并删除自身*/
void TEST_Task( void *pvParameters )
{(void) pvParameters;taskENTER_CRITICAL();u1_printf("test Task running & delete!\r\n");vTaskDelete(TEST_task_handler);taskEXIT_CRITICAL();
}/*主循环*/
void main_Task( void *pvParameters )
{(void) pvParameters;uint32_t pinstate;ftm_state_t ftmStateStruct;/* 初始化FTM模块 */FTM_DRV_Init(INST_FLEXTIMER_MC1, &flexTimer_mc1_InitConfig,&ftmStateStruct);/* 配置并使定时器能溢出中断 */INT_SYS_InstallHandler(FTM0_Ovf_Reload_IRQn,&ftmTimerISR,(isr_t*) 0U);INT_SYS_EnableIRQ(FTM0_Ovf_Reload_IRQn);/* 初始化计数器 */FTM_DRV_InitCounter(INST_FLEXTIMER_MC1, &flexTimer_mc1_TimerConfig);FTM_DRV_CounterStart(INST_FLEXTIMER_MC1);while(1){pinstate = KEY_Proc (0);if(pinstate ==BTN1_PRES ){xTaskCreate(    (TaskFunction_t )               TEST_Task,(        char * )                     "TEST_Task",(const configSTACK_DEPTH_TYPE)      configMINIMAL_STACK_SIZE ,(void *                   )           NULL,(UBaseType_t     )                 1,(TaskHandle_t *)                  TEST_task_handler ) ;taskENTER_CRITICAL();Printf_CPU_RunInfo();taskEXIT_CRITICAL();}vTaskDelay(20);}
}

添加定时器模块

配置定时器模块初始化,并注册中断函数

    ftm_state_t ftmStateStruct;/* 初始化FTM模块 */FTM_DRV_Init(INST_FLEXTIMER_MC1, &flexTimer_mc1_InitConfig,&ftmStateStruct);/* 配置并使定时器能溢出中断 */INT_SYS_InstallHandler(FTM0_Ovf_Reload_IRQn,&ftmTimerISR,(isr_t*) 0U);INT_SYS_EnableIRQ(FTM0_Ovf_Reload_IRQn);/* 初始化计数器 */FTM_DRV_InitCounter(INST_FLEXTIMER_MC1, &flexTimer_mc1_TimerConfig);FTM_DRV_CounterStart(INST_FLEXTIMER_MC1);

编写中断函数

void ftmTimerISR(void)
{//ftm周期中断  50us进来一此CPU_RunTime++;FTM_DRV_ClearStatusFlags(INST_FLEXTIMER_MC1, (uint32_t)FTM_TIME_OVER_FLOW_FLAG);  //清除FTM状态标志位
}

打印下系统信息

//打印CPU信息
void Printf_CPU_RunInfo()
{uint32_t GetFrequency ;uint32_t ConvertFreqToPeriodTicks ;memset(CPU_RunInfo,0,400); //信息缓冲区清零vTaskList((char *)&CPU_RunInfo); //获取任务运行时间信息u1_printf("------------------------------------------------\r\n");u1_printf("Name         Status   Priority   Residue   Number\r\n");u1_printf("%s", CPU_RunInfo);u1_printf("------------------------------------------------\r\n\n");memset(CPU_RunInfo,0,400); //信息缓冲区清零vTaskGetRunTimeStats((char *)&CPU_RunInfo);u1_printf("Task name Run count usage\r\n");u1_printf("%s", CPU_RunInfo);u1_printf("------------------------------------------------\r\n\n");GetFrequency = FTM_DRV_GetFrequency(INST_FLEXTIMER_MC1);ConvertFreqToPeriodTicks = FTM_DRV_ConvertFreqToPeriodTicks(INST_FLEXTIMER_MC1,20000);u1_printf("GetFrequency = %d\r\n\n",GetFrequency);u1_printf("ConvertFreqToPeriodTicks = %d\r\n\n",ConvertFreqToPeriodTicks);
}

打印FreeRTOS系统信息现象

参考资料14. CPU使用率统计 — FreeRTOS内核实现与应用开发实战指南—基于STM32 文档 (embedfire.com)

S32K144之SDK版:FTM定时器(测试打印系统信息)相关推荐

  1. S32K144之SDK版: bootloader 跳转APP测试

    一,实验设计 /** bootloader实验* 实验目的:* 将bootloader 和 app 工程烧录进入开发板,在bootloader程序里,使用按键KEY1,跳转进入APP程序** BOOT ...

  2. S32K144之SDK版:CAN模块应用

    一,添加CAN模块 二,配置GPIO 三,配置CAN模块参数 四,代码补全 #define EPS_Report_ID 0x18F #define EPS_ECU_ID 0x314 #define R ...

  3. S32K144之SDK版看门狗模块

    添加看门狗模块(使用抽象后的) 配置时钟 看门狗配置 保存生成配置代码 初始化看门狗和喂狗 WDG_Init(&wdg_pal1_Instance, &wdg_pal1_Config0 ...

  4. S32K144之SDK版:FLASH(内部模拟EEPROM)模块应用

    基础知识 资源大小 资源分类 添加配置模块 设置保护区 代码补全 头文件 源文件 初始化 void Flash_Init(void) {uint8_t ret = 0;ret = FLASH_SUCC ...

  5. C# 博思得 POSTEK 打印机 打码机 SDK 二次开发 指令打印

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.调用SDK实现打印 前言 提示: 公司要实现 BarTender的类似功能.POSTEK 提供了开发C++ 的 S ...

  6. 解读vs2003、vs2005、vs2008开发Windows CE环境、默认SDK开发包及测试

    文章来自http://swanmsg.blog.sohu.com/184427819.html 以前做过一些嵌入式开发,那么从以前做产品.做项目设计到嵌入式的开发,零碎时间累计到现在也有一年载已.本人 ...

  7. ThermalLabel SDK 应用于海报|标签打印

    ThermalLabel SDK 应用于海报|标签打印 使用C#和VB.NET创建,预览和打印条形码热敏标签 .NET的ThermalLabel SDK是.NET标准类库(DLL),可让您通过编写纯. ...

  8. 测试打印 lua 的 _G 所有显示的字段内容

    -- jave.lin - tiny_testing.lua - 测试打印 lua 的 _G--[=[local bit = require("bit")--local band, ...

  9. S32K程序,基于S32k144官方开发版 包含大部分驱动,和UDS程序,UDS服务需要自己改

    S32K程序,基于S32k144官方开发版 包含大部分驱动,和UDS程序,UDS服务需要自己改 :731000661854305913时间煮雨_______

  10. c语言打印空心数字图形,(完整word版)C语言编写打印实心和空心菱形【源码】

    <(完整word版)C语言编写打印实心和空心菱形[源码]>由会员分享,可在线阅读,更多相关<(完整word版)C语言编写打印实心和空心菱形[源码](13页珍藏版)>请在人人文库 ...

最新文章

  1. 【转载】JDBC连接各种数据库的字符串
  2. 用ul和li实现表格table效果 (转)
  3. 现代操作系统:第三章 内存管理
  4. Linux系统调用在glibc中的实现
  5. SSM实现个人博客-day02
  6. Oracle 标准大页和透明大页
  7. [Educational Round 5][Codeforces 616F. Expensive Strings]
  8. MyBatis-Plus_查询返回实体对象还是map?
  9. 针对vue ui启动项目抛error
  10. [转载] python cmp函数比较字典_Python 字典(Dictionary) cmp()方法
  11. Cohen-Sutherland算法概述
  12. 百度万年历接口实现和分析
  13. 论文笔记:Reciprocal Multi-Layer Subspace Learning for Multi-View Clustering
  14. SSM——SpringMVC笔记1
  15. 互联网2018校招时间_供参考
  16. 个人见解:什么是WBS?
  17. 我的理想600字作文计算机方面,我的理想作文600字当一名老师(共8篇)
  18. 【NEON 和 VFP 编程】VFP 指令
  19. linux下查找文件并按时间顺序排序的方法
  20. 机器学习(五)logistic回归进行二分类以及多分类(Python代码)

热门文章

  1. 写给在写毕业论文的你们免安装深度学习线上GPU环境准备
  2. php xirr,一个傻瓜式的计算方法,教你算出投资的真实收益率
  3. jsp+css实现图片自动轮换
  4. 用C++编写天体运动
  5. CTO也糊涂的常用术语:功能模块、业务架构、用户需求、文档……
  6. 快速上云(手把手教你把项目同步上云)
  7. 英语口语收集(十五)
  8. 华中科技大学计算机组成原理 -运算器设计(全部通关)
  9. AdMob Mediation
  10. linux 反垃圾邮件网关,反垃圾邮件神器--开源邮件网关ScrolloutF1之二--基本配置