Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
CPU使用率
博流_BL61x_BL808
rt-thread 统计CPU使用率
发布于 2024-01-27 17:36:50 浏览:906
订阅该版
1、在位于bsp/bouffalo_lab/bl808/m0/board/board.c的头部新增 ```c #include "cpu_load.h" ``` 2、在位于bsp/bouffalo_lab/bl808/m0/board/board.c文件中rt_hw_board_init()的末尾加入如下代码: ```c #ifdef CPU_LOAD_MONITOR rt_thread_inited_sethook(thread_init_hook); rt_scheduler_sethook(sched_hook); #endif ``` 3、然后把cpu_load.h和cpu_load.c文件放入bsp/bouffalo_lab/bl808/m0/applications目录下: cpu_load.h ```c #ifndef _CPU_LOAD_H_ #define _CPU_LOAD_H_ #include
#include
#include
#include "bflb_mtimer.h" #define CPU_LOAD_MONITOR typedef struct { struct rt_thread *thread; uint64_t count; uint64_t base; }task_monitor_t; void thread_init_hook(rt_thread_t thread); void sched_hook(struct rt_thread* from, struct rt_thread* to); #endif ``` cpu_load.c ```c #include "cpu_load.h" #ifdef CPU_LOAD_MONITOR #define CPU_LOAD_MONITOR_SIZE 20 static task_monitor_t task_monitor_list[CPU_LOAD_MONITOR_SIZE] = {0}; static uint32_t task_count = 0; static uint64_t monitor_base = 0; void thread_init_hook(rt_thread_t thread) { int found; int index; rt_enter_critical(); found = 0; for(index = 0; index < task_count; index++) { if(thread == task_monitor_list[index].thread) { found = 1; break; } } if(!found) { if(task_count < CPU_LOAD_MONITOR_SIZE) { task_monitor_list[task_count].thread = thread; task_count++; } } else { task_monitor_list[index].base = 0; } rt_exit_critical(); } void sched_hook(struct rt_thread* from, struct rt_thread* to) { int task_found = 0; int index = 0; static uint64_t base = 0; if(!base) { base = bflb_mtimer_get_time_us(); monitor_base = base; } uint64_t time = bflb_mtimer_get_time_us(); for(index = 0; index < task_count; index++) { if(task_monitor_list[index].thread == from) { task_found = 1; break; } } if(task_found != 1) { printf("error occur !!!\n"); } else { if(task_monitor_list[index].base == 0) { task_monitor_list[index].base = time; task_monitor_list[index].count = time; } else { task_monitor_list[index].count += time-base; } } base = time; } int cpu_load(int argc, const char **argv) { (void)argc; (void)argv; uint64_t time = bflb_mtimer_get_time_us() - monitor_base; for(int i = 0; i < task_count; i++) { printf("%02d: %2d%%", i, (task_monitor_list[i].count- \ task_monitor_list[i].base)*100/time); printf(" %p ", task_monitor_list[i].thread); printf(" task:%s\n", task_monitor_list[i].thread->parent.name); } rt_enter_critical(); monitor_base = bflb_mtimer_get_time_us(); for(int i = 0; i < task_count; i++) { task_monitor_list[i].base = monitor_base; task_monitor_list[i].count = monitor_base; } rt_exit_critical(); return 0; } MSH_CMD_EXPORT(cpu_load, cpu monitor); #endif ``` 4、执行在m0目录下执行scons编译M0核固件 3、目前每敲击一次cpu_load命令,则从新开始统计各任务CPU占比,可根据自身需求选择是否重新统计及观测窗口。
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
梦非梦
这家伙很懒,什么也没写!
文章
1
回答
1
被采纳
0
关注TA
发私信
相关文章
1
RT-Thread Nano 支持CPU使用率计算吗?
2
多核CPU占用率多少合适呢?
3
cpu利用率的值不会改变
4
F743怎么计算CPU的使用率?
5
对线程进行CPU资源分配问题
6
cpu uage计算问题
7
请教cpu使用率分析
8
BL808编译rt-thread下载润了,但也就止于此
9
求助rt-smart在适配riscv64虚拟地址和物理地址映射关系
10
BL808 rt-smart 运行hello.elf报错
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部