如下,在內核設備初始化時創建并運行一個執行緒cameraout_detect_thread():
cameraout_detect_task = kthread_run(cameraout_detect_thread, s_ctrl, "msm_sensor:camera-out");
然后在執行緒函式中進行輪詢監測,每隔1s讀取一下某個暫存器值:
static int cameraout_detect_thread(void *data)
{
int rc = 0;
int i;
... ...
struct sched_param param = {.sched_priority = 6};
sched_setscheduler(current, SCHED_RR, ¶m);
... ...
// 開始輪詢
while (!kthread_should_stop()) {
msleep(1000); // 每1s延時一次
mutex_lock(&cameraout_detect_mutex);
rc = sensor_i2c_client->i2c_func_tbl->i2c_read(
sensor_i2c_client, 0xa0,
&cur_plug_status, MSM_CAMERA_I2C_BYTE_DATA);
pr_err("zjy cur_status: 0x%x, last_status: 0x%x\n", cur_plug_status, last_plug_status);
... ...
mutex_unlock(&cameraout_detect_mutex);
}
return 0;
}
關鍵代碼如上,在執行緒中開一個無限回圈,然后每一次回圈執行msleep(1000),即計劃每間隔1s執行一次。但是根據最終列印出來的結果,貌似每1s都執行了四次回圈。如下

因為使用的CPU為4核8執行緒。猜測是否因為開的執行緒在每一個內核中都在獨立跑呢?有什么辦法能避免嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/26075.html
標籤:專題技術討論區
上一篇:關于unix信號接收的一個問題
