4 空閒任務與鉤子函式

2021-08-20 18:03:28 字數 1825 閱讀 5390

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物件,因為此時...