使用cypress平台上時,除錯a+g sensor時,通過hid協議在android上列舉出hid的裝置檔案,因為a+g是一體的,所以cypress將a+g的資料通過乙個hid通道資料傳送,android層主動傳送取資料的命令,cpress 這面將資料傳送到hid裝置檔案中,但是遇到有時候a+g的資料錯亂,但是有時候又不會。
mmodule 中存放主要的資料結構,迴圈中會呼叫while
(true
)
if(
eventnum
>
0)
return
eventnum
;
num
=poll
(mmodule
.pollfds
,mmodule
.count+1
,-1);
if(
num
<=0)
usleep(50
*1000
);
for(
inti =0
;i <
mmodule
.count+1
;i++)
mmodule
.pollfds
[pipedata[0
]].fd
=pipedata[2
];
logi
("hidsensor: sensor hal fd = %d"
,pipedata[2
]);
}
else
mmodule
.sensors[i
-1]->
getdata
(eventque
);
}
elseif(
mmodule
.pollfds[i
].revents !=0
)
mmodule
.pollfds[i
].revents =0
;
}
}
return-1
;
mmodule
.sensors[i
-1]->
getdata
(eventque
);
因為資料錯亂的原因:我們分析有以下原因:
1.不同的程序排程,懷疑理由:在pc端開不同的執行緒讀取資料,會發生讀出的資料錯亂,但是很顯然,迴圈是乙個線層,通過加鎖也無法避免看來不是這個原因。
2.底層資料錯誤,實際通過pc端資料順序讀取不會出現問題。
後來突然想到每個sensor的例項都要enable一次,enable函式會開啟hid的裝置檔案,意味著a和g的裝置描述符不同的,雖然開啟檔案相同。應該是檔案讀寫指標不對,後來定義了乙個靜態fd檔案描述符,a+g共享乙個,後來成功解決資料錯亂的原因。
結論:1. 由於程序級檔案描述符表的存在,不同的程序中會出現相同的檔案描述符,它們可能指向同乙個檔案,也可能指向不同的檔案
2. 兩個不同的檔案描述符,若指向同乙個開啟檔案控制代碼,將共享同一檔案偏移量。因此,如果通過其中乙個檔案描述符來修改檔案偏移量(由呼叫read()、write()或lseek()所致),那麼從另一 個描述符中也會觀察到變化,無論這兩個檔案描述符是否屬於不同程序,還是同乙個程序,情況都是如此。
3.但是在同一執行緒中不會同步偏移量。
pytorch fine tuning注意事項
前言 這篇文章算是論壇pytorch forums關於引數初始化和finetune的總結,也是我在寫 中用的算是 最佳實踐 吧。最後希望大家沒事多逛逛論壇,有很多高質量的回答。引數初始化 引數的初始化其實就是對引數賦值。而我們需要學習的引數其實都是variable,它其實是對tensor的封裝,同時...
PHP Open Flash Chart注意事項
1.在html頁面必須src正確的swfobject.js的路徑 可以用firebug檢視絕對路徑是否正確 2.在html頁面必須指定正確的swfobject使用時的open flash chart.swf的位置 可以用firebug檢視絕對路徑是否正確 3.在html頁面必須制定正確的data f...
Spring Hibernate整合注意事項
1 spring jar包 需要額外加入 commons pool 和commons dbcp 若包含 spring 自帶的測試,還需要引入 spring test 2 spring beans.xml 如果使用了 spring annotation 則需要加入以下兩項配置 前提是已經匯入了bean...