|
发表于 2019-6-20 11:34:00
|
显示全部楼层
楼主看看我给RTX增加CPU使用率的方法,简单高效:
在os_idle_demon函数所在文件中定义如下代码:
- volatile U32 os_idleCnt = 0;
- __task void os_idle_demon(void)
- {
- /* The idle demon is a system task, running when no other task is ready */
- /* to run. The 'os_xxx' function calls are not allowed from this task. */
- for (;;) {
- /* HERE: include optional user code to be executed when no task runs.*/
- os_idleCnt++;
- }
- }
- static U32 os_idleMax = 0;
- void os_cpu_usage_startup(void)
- {
- U32 cnt0 = 0;
- os_dly_wait(1);
- cnt0 = os_idleCnt;
- os_dly_wait(50);
- cnt0 = os_idleCnt - cnt0;
- os_idleMax = cnt0;
- }
- U8 os_cpu_usage(void)
- {
- static U32 last_tick = 0;
- static U32 last_cnt = 0;
- U32 cnt, ticks;
- if (last_cnt == 0) {
- last_cnt = os_idleCnt | 1;
- last_tick = os_time;
- return 0;
- }
- cnt = os_idleCnt - last_cnt;
- ticks = os_time - last_tick;
- last_cnt = os_idleCnt | 1;
- last_tick = os_time;
- if (ticks == 0) {
- return 0;
- }
- cnt = cnt * 50 / ticks;
- cnt = (os_idleMax - cnt) * 100 / os_idleMax;
- return (U8)cnt;
- }
复制代码 其中以下两个函数导出供外部调用即可:
- void os_cpu_usage_startup(void);
- U8 os_cpu_usage(void);
复制代码 然后在第一个线程(即启动线程)中调用os_cpu_usage_startup函数,例如:
- static void __ThreadStartup(void)
- {
- // CPU使用率接口
- os_cpu_usage_startup();
- // 其它系统加载和初始化
- }
复制代码 之后,就可以在某一个线程中,周期性的调用os_cpu_usage函数来获得CPU使用率了。使用率是取值[0,100]的整数。
|
|