匿名飛控執行緒初始化和排程是怎麼實現的

2021-10-06 19:30:15 字數 1097 閱讀 8367

目錄

一、執行緒初始化

先看下scheduler_setup()函式,

二、任務排程器

函式在檔案ano_scheduler.c中,scheduler_setup()初始化後,在while迴圈中執行scheduler_run()

void scheduler_setup(void)

}}

for迴圈裡執行的次數task_num,是個巨集定義

#define task_num (sizeof(sched_tasks)/sizeof(sched_task_t))

sched_tasks是執行緒的結構體陣列

static sched_task_t sched_tasks =,,

,,,,

,};typedef struct

sched_task_t;

sched_task_t是結構體宣告,用結構體陣列的長度除以乙個結構體的長度就得到陣列的執行緒數量task_num

for迴圈裡

sched_tasks[index].interval_ticks = tick_per_second/sched_tasks[index].rate_hz;

計算的interval_ticks是執行緒結構體中的時間間隔及執行週期,

查詢定義 tick_per_second  是每秒滴答次數

#define tick_per_second    1000

rate_hz是結構體矩陣的第二列,表示執行的頻率,這樣執行緒執行週期就等於總次數除以執行的頻率。

if判斷指定最小週期等於1ms

scheduler_run()是在while迴圈中一直執行著

//這個函式放到main函式的while(1)中,不停判斷是否有執行緒應該執行

void scheduler_run(void)

}}

task_num上面說過,for迴圈還是逐個執行緒去判斷

如果當前時間減去上一次執行的時間,大於等於該執行緒的執行週期

執行緒上次執行就等於當前時間,然後執行執行緒函式,task_func()是結構體矩陣的第一列,是對應的要執行的執行緒函式。

匿名內部類的初始化

package codelib.innerclasses public inte ce destination package codelib.innerclasses author administrator public class innerclassinittest public strin...

seetaface初始化引數調優

這個引數調整,主要是針對人臉檢測模組初始化引數做的修改,修改後的效果是人臉距離攝像頭的檢測距離變短,人臉識別,特徵提取,相似度計算的計算速度提公升.具體修改如下 seeta facedetection detector seeta fd frontal v1.0.bin detector.setmi...

直接初始化和複製初始化

關於這個問題,國內外都有許多爭論,但我至今未找到滿意的答案,至於為為什麼,這就是今天要說明的。可能大家都有看過c primer,我看的是第四版,中文版,英文水平不怎麼樣。其中第13章,描述說,複製建構函式可用於 1.根據另乙個同型別的物件顯式或隱式初始化乙個物件 2.複製乙個物件,將它作為引數傳遞給...