cpu使用率的計算,先去統計cpu的空閒率,100%-空閒率=cpu使用率。
臨界區的概念:臨界區有進入和退出操作,在進入臨界區和退出臨界區這段時間內執行的**是獨享cpu使用權的!
rt_enter_critical(); //進入臨界區
tick = rt_tick_get();
while (rt_tick_get() - tick < 10)
rt_exit_critical();//退出臨界區
計算原理:這段在臨界區內執行的**在10個系統滴答時間內讓total_count自加,這裡的loop是乙個迴圈,loop加100次,total_count才加一次,作用是讓cpu完全發揮作用,這裡是計算了完全使用cpu時,total_count能自加多少個。
然後是系統不進入臨界區來執行這段**,因為這段**放在空閒任務中,只有其他任務執行完之後才會執行空閒任務(count++),得到的是count。
count/total_count就是cpu的空閒率,用100%減去空閒率就是使用率。
/*
* 程式清單:空閒任務鉤子例程
* * 這個例程設定了乙個空閒任務鉤子用於計算cpu使用率,並建立乙個執行緒迴圈列印cpu使用率
* 通過修改cpu使用率列印執行緒中的休眠tick時間可以看到不同的cpu使用率
*/#include #include #define thread_priority 25
#define thread_stack_size 512
#define thread_timeslice 5
/* 指向執行緒控制塊的指標 */
static rt_thread_t tid = rt_null;
#define cpu_usage_calc_tick 10
#define cpu_usage_loop 100
static rt_uint8_t cpu_usage_major = 0, cpu_usage_minor = 0;
/* 記錄cpu使用率為0時的總count數 */
static rt_uint32_t total_count = 0;
/* 空閒任務鉤子函式 */
static void cpu_usage_idle_hook()
rt_exit_critical();
}count = 0;
/* 計算cpu使用率 */
tick = rt_tick_get();
while (rt_tick_get() - tick < cpu_usage_calc_tick)
/* 計算整數百分比整數部分和小數部分 */
if (count < total_count)
else
}void cpu_usage_get(rt_uint8_t *major, rt_uint8_t *minor)
/* cpu使用率列印執行緒入口 */
static void thread_entry(void *parameter)
}int cpu_usage_init()
/* 如果設定了rt_samples_autorun,則加入到初始化執行緒中自動執行 */
#if defined (rt_samples_autorun) && defined(rt_using_components_init)
#endif
/* 匯出到 msh 命令列表中 */
msh_cmd_export(cpu_usage_init, idle hook sample);
空閒任務 鉤子函式
空閒任務 鉤子函式 本章和上一章實驗效果一樣都是低功耗 比上一章多乙個函式 include sys.h include delay.h include usart.h include led.h include timer.h include lcd.h include key.h include ...
FreeRtos 空閒任務與空閒任務鉤子函式
以下基礎知識 自正點原子pdf資料。前面例子中建立的任務大部份時間都處於阻塞態。這種狀態下所有的任務都不可執行,所以也不能被排程器選中。但處理器總是需要 來執行 所以至少要有乙個任務處於執行態。為了保證這 一點,當呼叫 vtaskstartscheduler 時,排程器會自動建立乙個空閒任務。空閒任...
mounted鉤子函式 對vue中鉤子函式的理解
1 beforecreate 鉤子 該階段元件例項剛建立,元件屬性計算之前 可理解為元件屬性還未初始化,未繫結,未掛載元素el 比如 el,data,methods等,如果你試圖在beforecreated鉤子中獲取這些屬性值,會得到ubdefined 的結果,但是 可以獲取到this物件,因為此時...