硬體延時任務 hwdelay task

2021-10-04 07:25:46 字數 2138 閱讀 1295

hwdelay_task.h

#ifndef _hwdelay_task_h_

#define _hwdelay_task_h_

#include

#include

#define delay_mailbox_max 5

/* * 值為10us, 那麼該延時任務的誤差就有10us, 該值設定要大量測試

* 10us 出現了傳送一次指令, 執行兩次的情況(一次)

* 20us 小幅度測試沒出現異樣

*/#define delay_hwtimer_interval_us 20

/* * 這個結果值要大於0

*/#define hwdelaytask_calc_delay_count(us) (us < delay_hwtimer_interval_us ? 1 : us/delay_hwtimer_interval_us)

/* * 這個 s 值不能超過 2147.483647; 因為 int 所能表示的最大範圍為 2147483647

*/#define hwdelaytask_calc_delay_count2(s, us) (((s*1000000)+us)/delay_hwtimer_interval_us)

struct delaymailbox

;extern rt_mailbox_t mbguiddatadelayhandle;

int8_t delaytask_init()

;int8_t delaytask_add

(struct delaymailbox* dmb)

;#endif

hwdelay_task.c

#include

"hwdelay_task.h"

#include

"bsp_gpt.h"

#define delay_hwtimer_dev_name "gpt2"

/* 定時器名稱 */

static

struct imxrt_gpt* dev_hwtimer_hwdelay;

static int8_t state;

static

volatile

struct delaymailbox delaymbs[delay_mailbox_max]=;

static

volatile uint8_t delaymbsfront =0;

//隊首

static

volatile uint8_t delaymbsrear =0;

//隊尾,最後乙個元素的索引+1

rt_mailbox_t mbguiddatadelayhandle;

static

void

ht_timeout_cb

(void

* dev, uint32_t size)

i =(i+1

)%delay_mailbox_max;

}return;}

int8_t delaytask_init()

hwtimerval_t timerval =

;bsp_gpt_start

(dev_hwtimer_hwdelay,

&timerval, hwtimer_mode_period)

;return0;

}int8_t delaytask_add

(struct delaymailbox* dmb)

delaymbs[delaymbsrear]

.count = dmb->count;

delaymbs[delaymbsrear]

.data = dmb->data;

delaymbs[delaymbsrear]

.send_mb = dmb->send_mb;

delaymbsrear =

(delaymbsrear+1)

%delay_mailbox_max;

//printf("delaymbsrear: %d\r\n", delaymbsrear);

return0;

}

延時任務與定時任務

1.延時任務 at命令的使用 1 開啟終端,在根目錄下建立乙個新的目錄取名為 at 2 進入 at目錄下,執行watch n 1 ls l at命令,對其進行監控 3 同時開啟另乙個終端,執行命令 at 某個將來的具體時刻 表示將來在某個時刻執行你特定的操作 例如下圖便是在17 20在 at目錄下建...

延時任務和定時任務

1.at 延時 at l 檢視任務 at r 任務編號 刪除任務 etc at.allow 白名單,白名單中存在的使用者可以使用at,白名單優先順序高,黑白名單中使用者同時存在,白名單生效 etc at.deny 黑名單,存在的使用者不能使用at 2.crontab 定時 由crond.servic...

Linux 延時任務與定時任務

延時任務 系統的延時任務是通過at命令是實現的,負責這個延時任務的服務是atd服務,通常這個服務是預設開啟的 延時任務的發起過程 1 at time 表示在某一時刻發起任務 2 dosomething 任務具體執行的內容 3 ctrl d 儲存該命令 延時任務的常見命令 延時任務的黑名單 延時任務白...