巧用loopback模式,定位CAN阻塞問題

2021-10-05 15:44:13 字數 1004 閱讀 1427

最近做的乙個can通訊專案,軟體在開發板上執行的時候跑的沒有一點問題,在專案的pcb上跑的時候can傳送總是阻塞在檢查can郵箱是否空閒裡無法跳出,can傳送函式如下:

/**

* @brief

* @param argument:

* @retval

*/uint8_t can_txmessage(can_handletypedef* hcan, message* txmessage)

else

while( hal_can_gettxmailboxesfreelevel(hcan) == 0 );

/*呼叫hal庫的can傳送介面*/

hal_retval = hal_can_addtxmessage(hcan,&can_txheader,txmessage->data,&txmailbox);

hal_delay(1);

if(hal_retval != hal_ok)

return 1;

return 0;

}

單步除錯發現總是卡死在

while( hal_can_gettxmailboxesfreelevel(hcan) == 0 );
這裡。這一句是檢測郵箱空閒的,卡在這裡是郵箱全滿了。

一開始很矇b,郵箱清空是硬體自動完成軟體不能操作的。因為開發板是stm32f4系列的,專案用的是f1系列的,再加上用can分析儀偶爾能收到can訊息,所以開始武斷的排除了硬體問題,然後一直在查軟體。抓耳撓腮,扯掉n根頭髮(/ □ \)折騰了一天之後,終於在一次除錯的時候碰了一下pcb接線後,can分析儀的燈一直在閃,這就意味著can通訊是順暢的。這才發現是pcb上一根地線接觸不良,拔掉地線後問題復現,接好後問題消失。

總結:loopback模式可以不依賴硬體檢查軟體是否工作正常,如果loopback通過的話90%的情況檢查硬體情況,還有就是考慮邏輯,實際資料通訊頻率等邏輯問題。下次再除錯類似的驅動先用loopback檢查軟體,切記!

CSS定位模式

前兩天在面試美團前端職位的時候,被面試官問到了css中的定位,才發現自己對其只是簡單的了解,深入一點就被卡住了,所以今天反思一下,總結css中的一些定位知識。文件流 css的定位機制有3種 普通流 浮動和定位。普通流就是正常的文件流,沒有用css樣式去控制的html文件結構,你寫的介面的順序就是網頁...

CSS定位模式

定位模式有三種 常規流 normal flow 浮動 float 絕對定位 absolute positioning 一 常規流 1 塊級格式化上下文 2 行級格式化上下文 二 浮動 例如,如下 p標籤不受影響,而span受影響 src width 120 alt house got7是南韓jyp ...

理解定位模式

position一共有幾個屬性 static 是position的預設屬性,它的位置取決於合模型 absolute 絕對定位 絕對定位的元素會完全地從常規文件流中脫離。對於包圍它的元素而言,它會將該絕對定位元素視為不存在,就像是漂浮起來一般。通過 top,right,bottom,和 left 四個...