簡體   English   中英

.Net Core 似乎以大約 1000 / 秒的速度讀取 GPIO 引腳。 go 如何更快?

[英].Net Core seems to max out reading GPIO pin at about 1000 / second. How to go faster?

我寫了一個 C#.Net Core 3.1 應用程序來讀取橙色 Pi 零的 GPIO 上的引腳 state 變化。 我正在使用 System.Devices.Gpio IoT 庫。 我正在運行 Armbian Focal(基於 Ubuntu 20.04)。

我正在嘗試讀取方波信號的頻率,這會使 GPIO 上的引腳上升和下降。 所以我試圖讀取 1 秒內出現了多少個上升(或下降)邊沿。

我已經嘗試在循環中輪詢引腳,並注冊到事件/回調以進行引腳更改,但我似乎無法以每秒大約 1000 次(1 Khz)的速度讀取

不幸的是,我需要每秒至少閱讀 5000 次(最好是更多)。

我認為限制不在硬件方面。 我認為這是事實,即 .Net Core 運行在 CLR 之上,這是一個額外的層,會減慢速度。

我正在考慮在 Python 中編寫應用程序的這一部分(我將把應用程序的 rest 留在 C# /.Net Core 中),但我不知道它會加快速度嗎? 我知道 Python 是當今 SBC 的事實上的編程語言,這就是我考慮它的原因(大量社區支持和示例)。 但它是一種解釋性語言。 會不會比編譯的 C# 慢? 但話又說回來,也許 Python 直接與 Linux 對話,這與通過 CLR 的 C#.Net Core 不同。 Python 也被烘焙到 Ubuntu 中,因此緊密集成可能有一些好處。

我知道 C 將是最快的,但也是最難編寫的語言(除了匯編)。 我對 C 和 Python 都不太熟悉,但我認為 Python 的學習曲線會不那么陡峭。

總之,我的問題是:我可以在.Net Core 中做些什么來加快讀取 GPIO 的速度嗎? 也許使用第三方庫而不是 System.Devices.Gpio 有幫助(我對此表示懷疑)? 限制可能是在硬件上還是在 Amrbian(Ubuntu)中(我懷疑)? 我是否應該費心在 Python 中嘗試它,或者這會浪費時間嗎?

抱歉,我知道我的問題可能不符合 StackOverflow 政策。 我只是想知道是否有人在讀取 GPIO 引腳 state 方面有任何經驗(例如在 KHz 范圍內測量頻率)——在橙色或樹莓派或類似的東西上......

我會很感激任何指示。

謝謝你。

盡管用更快的語言(可能是 Python,肯定是 C)重新編寫代碼會有所幫助,但最后我們決定放置一個硬件輔助(正如我讀過的其他帖子中的一些建議)。 我們將使用Raspberry Pi 射頻頻率計數器解決方案。

不過,感謝@r_ahlskog和 PMF 的輸入。 非常感謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM