我有一個運行裸機的應用程式,它通過 CAN 控制外圍設備。在其原始形式中,我的應用程式將訊息傳遞給 CAN“驅動程式”,它實際上是一個緩沖層。傳入的訊息被拉出硬體緩沖區,并且:
- 由中斷處理程式推入佇列,使用另一個 CAN HAL。
- 發送到緊急輔助處理程式,該處理程式在 ISR 的背景關系中運行。
現在,我需要用基于 SocketCAN 的外設驅動程式替換緩沖層和 HAL。
--------------------- | ---------------------
| | | | |
| Peripheral driver | Emergency | | Peripheral driver |
| | ^ | | |
----------------^---- | | ----------------^----
|Queue | | | |Queue |
| |Dequeue | | | |Dequeue
-----v--------------- --------------------- | -----v---------------
| | | | | | |
| CAN driver (queues) <-------- ISR | | | SocketCAN |
| | | | | | |
--------------------- ----------^---------- | ---------------------
| Tx | |
| | |
-----v--------------- | |
| | | |
| CAN HAL | Rx | |
| |------------------- |
--------------------- |
在最初的設定中,在 ISR 中處理 CAN 接收意味著盡快處理緊急訊息。我對 SocketCAN 的理解是它(或我不熟悉的套接字世界)處理傳入幀的排隊,這意味著緊急訊息必須等到外圍驅動程式將所有到達的東西都拉出佇列在緊急情況之前。
當然,有一種方法可以首先處理某些訊息。我該怎么做?
uj5u.com熱心網友回復:
我對 socketcan 不是很熟悉,但你所問的通常是通過硬體過濾來完成的。但是,socket-can不支持硬體 CAN 過濾器,并且在閱讀了一些檔案之后,我認為您無法獲得特定 CAN 訊息的過濾器識別符號。
但是理論上,您可以在同一設備上使用一組單獨的過濾器打開第二個插座罐,并以不同的方式處理它們。
uj5u.com熱心網友回復:
我想我正在尋找的答案是您必須為套接字設定一個信號和信號處理程式,或 SIGIO 處理程式。
然后拓撲將再次看起來像原始拓撲(圖的左側)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/426703.html
上一篇:UDP服務器并發測驗
下一篇:如何讓C 接受ngrok地址?
