硬汉嵌入式论坛

 找回密码
 立即注册
查看: 9435|回复: 10
收起左侧

[ThreadX全家桶] ThreadX的CPU利用率实现方式一:原装的任务切入切出API接口函数实现

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115791
QQ
发表于 2020-6-7 07:22:12 | 显示全部楼层 |阅读模式
简单改造实现了个,效果不是很好,CPU利用率不准:


  1. /*
  2. *********************************************************************************************************
  3. *        函 数 名: _tx_execution_isr_enter 等函数
  4. *        功能说明: ThreadX的CPU利用率实现
  5. *        形    参: 无
  6. *        返 回 值: 无
  7. *********************************************************************************************************
  8. */
  9. void _tx_execution_isr_enter(void)
  10. {
  11.         
  12. }
  13. static int tick = 0;
  14. void _tx_execution_isr_exit(void)
  15. {

  16.         if(tick ++ > CALCULATION_PERIOD)
  17.         {
  18.                 tick = 0;

  19.                 if(osCPU_TotalIdleTime > 1000)
  20.                 {
  21.                         osCPU_TotalIdleTime = 1000;
  22.                 }
  23.                 osCPU_Usage = (100 - osCPU_TotalIdleTime / 10);
  24.                 osCPU_TotalIdleTime = 0;
  25.         }
  26. }

  27. void _tx_execution_thread_exit(void)
  28. {
  29.        TX_THREAD      *p_tcb;                /* 定义一个任务控制块指针 */

  30.        p_tcb = &AppTaskIdleTCB;
  31.         
  32.         if(tx_thread_identify()  ==p_tcb )
  33.         {
  34.                 osCPU_IdleSpentTime = tx_time_get() - osCPU_IdleStartTime;
  35.                 osCPU_TotalIdleTime += osCPU_IdleSpentTime;
  36.         }
  37. }

  38. void _tx_execution_thread_enter(void)
  39. {
  40.         TX_THREAD      *p_tcb;                /* 定义一个任务控制块指针 */

  41.         p_tcb = &AppTaskIdleTCB;
  42.         
  43.         if(tx_thread_identify() == p_tcb )
  44.         {
  45.                 osCPU_IdleStartTime = tx_time_get();
  46.         }
  47. }
复制代码


回复

使用道具 举报

23

主题

1443

回帖

1512

积分

至尊会员

积分
1512
发表于 2020-6-8 10:51:04 | 显示全部楼层
我用这个方老是编译错误。。。
代码不规范,亲人两行泪!
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2021-1-9 12:09:14 | 显示全部楼层
感觉这几个函数不是让干这个用的
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2021-8-8 22:40:04 | 显示全部楼层
是不是因为tx_time_get()获得的时间颗粒度太大了,100Hz调度任务的话时间最小分辨率就是10ms,有的任务执行一下就休眠了,感觉得用个硬件定时器获取时间
回复

使用道具 举报

681

主题

3487

回帖

5555

积分

论坛元老

积分
5555
发表于 2021-8-9 09:13:37 | 显示全部楼层
ziniu 发表于 2021-8-8 22:40
是不是因为tx_time_get()获得的时间颗粒度太大了,100Hz调度任务的话时间最小分辨率就是10ms,有的任务执行 ...

请问下,你们一般使用  threadx  os 系统,或者是其他的 os 系统,系统节拍一般设置的是 多少时间 ?  如 1ms, 10ms, 5ms 等 ??
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2021-8-9 15:30:48 | 显示全部楼层
hpdell 发表于 2021-8-9 09:13
请问下,你们一般使用  threadx  os 系统,或者是其他的 os 系统,系统节拍一般设置的是 多少时间 ?  如 ...

一般默认100Hz就可以,频率太高的话系统切换任务开销大。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115791
QQ
 楼主| 发表于 2021-8-9 18:21:41 | 显示全部楼层
ziniu 发表于 2021-8-8 22:40
是不是因为tx_time_get()获得的时间颗粒度太大了,100Hz调度任务的话时间最小分辨率就是10ms,有的任务执行 ...

现在用的这个方案

基于STM32H7的ThreadX内核原装的任务,中断和空闲执行时间统计功能,支持AC5,AC6,IAR和GCC
http://www.armbbs.cn/forum.php?m ... 7297&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

26

主题

181

回帖

259

积分

高级会员

积分
259
发表于 2025-2-21 21:42:25 | 显示全部楼层
我这边负的CPU使用率都出来了。。。用的空闲计数方式。。。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115791
QQ
 楼主| 发表于 2025-2-22 08:51:01 | 显示全部楼层
ccschen 发表于 2025-2-21 21:42
我这边负的CPU使用率都出来了。。。用的空闲计数方式。。。

这个帖子有点老了,早期的时候做出来了。后来官方有推出了自己的原生支持方案。
回复

使用道具 举报

26

主题

181

回帖

259

积分

高级会员

积分
259
发表于 2025-2-22 12:18:20 | 显示全部楼层
eric2013 发表于 2025-2-22 08:51
这个帖子有点老了,早期的时候做出来了。后来官方有推出了自己的原生支持方案。

是的,没注意到要加上函数bsp_InitDWT()
        DEM_CR         |= (unsigned int)DEM_CR_TRCENA;   
        DWT_CYCCNT      = (unsigned int)0u;
        DWT_CR         |= (unsigned int)DWT_CR_CYCCNTENA;
不加的话,单独上电全速运行,可能会计算不出来,是100%,不加的话,调试也可以统计。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115791
QQ
 楼主| 发表于 2025-2-23 06:25:47 | 显示全部楼层
ccschen 发表于 2025-2-22 12:18
是的,没注意到要加上函数bsp_InitDWT()
        DEM_CR         |= (unsigned int)DEM_CR_TRCENA;   
        DWT_CY ...

DWT是官方后来推出的用法。采用的这个时钟周期计数器做的计算。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-19 07:54 , Processed in 0.274679 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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