單片機不像一些應(yīng)用軟件,和硬件結(jié)合十分緊密,必須要求“高效”,所以匯編語言是最好選擇,其次就是C語言了。其他語言編譯效率都太低,滿足不了要求。
創(chuàng)新互聯(lián)是專業(yè)的青銅峽網(wǎng)站建設(shè)公司,青銅峽接單;提供成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行青銅峽網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
在前一小節(jié)中介紹了點亮第一個LED燈,這里我們準備進階嘗試下,輸出第一段PWM波形。(PWM也就是脈寬調(diào)制,一種可調(diào)占空比的技術(shù),得到的效果就是:如果用示波器測量引腳會發(fā)現(xiàn)有方波輸出,而且高電平、低電平的時間是可調(diào)的。)
這里爪爪熊準備寫成一個golang的庫,并開源到github上,后續(xù)更新將直接更新到github中,如果你有興趣可以和我聯(lián)系。 github.com/dpawsbear/bear_rpi_go
我在很多的教程中都看到說樹莓派的PWM(硬件)只有一個GPIO能夠輸出,就是 GPIO1 。這可是不小的打擊,因為我想使用至少四個 PWM ,還是不死心,想通過硬件手冊上找尋蛛絲馬跡,看看究竟怎么回事。
手冊上找尋東西稍等下講述,這里先提供一種方法測試 樹莓派3B 的 PWM 方法:用指令控制硬件PWM。
這里通過指令的方式掌握了基本的pwm設(shè)置技巧,決定去翻一下手冊看看到底PWM怎么回事,這里因為沒有 BCM2837 的手冊,根據(jù)之前文章引用官網(wǎng)所說, BCM2835 和 BCM2837 應(yīng)該是一樣的。這里我們直接翻閱 BCM2835 的手冊,直接找到 PWM 章節(jié)。找到了如下圖:
圖中可以看到在博通的命名規(guī)則中 GPIO 12、13、18、19、40、41、45、52、53 均可以作為PWM輸出。但是只有兩路PWM0 PWM1。根據(jù)我之前所學知識,不出意外應(yīng)該是PWM0 和 PWM1可以輸出不一樣的占空比,但是頻率應(yīng)該是一樣的。因為沒有示波器,暫時不好測試。先找到下面對應(yīng)圖:
根據(jù)以上兩個圖對比可以發(fā)現(xiàn)如下規(guī)律:
對照上面的表可以看出從 BCM2837 中印出來的能夠使用在PWM上的就這幾個了。
為了驗證個人猜想是否正確,這里先直接使用指令的模式,模擬配置下是否能夠正常輸出。
通過上面一系列指令模擬發(fā)現(xiàn),(GPIO1、GPIO26)、(GPIO23、GPIO24)是綁定在一起的,調(diào)節(jié)任意一個,另外一個也會發(fā)生變化。也即是PWM0、PWM1雖然輸出了兩路,可以理解成兩路其實都是連在一個輸出口上。這里由于沒有示波器或者邏輯分析儀這類設(shè)備(僅有一個LED燈),所以測試很簡陋,下一步是使用示波器這類東西對頻率以及信號穩(wěn)定性進行下測試。
小節(jié):樹莓派具有四路硬件輸出PWM能力,但是四路中只能輸出兩個獨立(占空比獨立)的PWM,同時四路輸出的頻率均是恒定的。
上面大概了解清楚了樹莓派3B的PWM結(jié)構(gòu),接下來就是探究如何使用Go語言進行設(shè)置。
因為拿到了手冊,這里我想直接操作寄存器的方式進行設(shè)置,也是順便學習下Go語言處理寄存器的過程。首先需要拿到pwm 系列寄存器的基地址,但是翻了一圈手冊,發(fā)現(xiàn)只有偏移,沒有找到基地址。
經(jīng)過了一段時間的努力后,決定寫一個 樹莓派3B golang包開源放在github上,只需要寫相關(guān)程序進行調(diào)用就可以了,以下是相關(guān)demo(pwm)(在GPIO.12 上輸出PWM波,放上LED燈會有呼吸燈的效果,具體多少頻率還沒有進行測試)
以下是demo(pwm) 源碼
C++適合本地程序的開發(fā)。Go語言適合網(wǎng)絡(luò)程序和本地程序的開發(fā)。Go的優(yōu)點:垃圾回收,語意明確,格式統(tǒng)一。?Go的缺點:效率目前沒有C++高,但對于桌面程序而言,效率問題不大,因為硬件已經(jīng)很快了。c++過于復雜了,加入很多炫技的內(nèi)容。這些內(nèi)容脫離了事情的本質(zhì)。
最明顯的就是所謂的面向?qū)ο蟆;诿嫦驅(qū)ο蟮墓こ倘绻銐虼蟮那闆r下,會帶來很大的耦合度,如果再加上內(nèi)存管理,多線程等等。項目后期基本上沒辦法維護和增加功能。
關(guān)于c++的語言復雜性,你可以問知乎上的任何一位高手。沒一個敢說自己精通c++。你也可以去看一下所有的c++編繹器,沒有任何一個敢說自己完全實現(xiàn)了c++的標準。不同的編繹器之間實現(xiàn)細節(jié)又不同。所以功能再強大沒有實用性,就失去了意義,只會制造更多的問題。
創(chuàng)建 PayPal 的目的是使金融服務(wù)民主化,并使個人和企業(yè)能夠加入并在全球經(jīng)濟中蓬勃發(fā)展。這項工作的核心是 PayPal 的支付平臺,該平臺使用專有技術(shù)和第三方技術(shù)的組合來高效、安全地促進全球數(shù)百萬商家和消費者之間的交易。隨著支付平臺變得越來越大、越來越復雜,PayPal 尋求對其系統(tǒng)進行現(xiàn)代化改造并縮短新應(yīng)用程序的上市時間。
Go 在生成干凈、高效的代碼方面的有著極高的價值。這些代碼可以隨著軟件部署的擴展而輕松擴展,這使得該語言非常適合支持 PayPal 的目標。
支付處理平臺的核心是 PayPal 用 C++ 開發(fā)的專有 NoSQL 數(shù)據(jù)庫。然而,代碼的復雜性大大降低了開發(fā)人員發(fā)展平臺的能力。Go 的簡單代碼布局、goroutine(輕量級執(zhí)行線程)和通道(用作連接并發(fā) goroutine 的管道)使 Go 成為 NoSQL 開發(fā)團隊簡化和現(xiàn)代化平臺的自然選擇。
作為概念驗證,一個開發(fā)團隊花了六個月的時間學習 Go 并在 Go 中從頭開始重新實現(xiàn) NoSQL 系統(tǒng),在此期間,他們還提供了有關(guān)如何在 PayPal 更廣泛地實施 Go 的見解。截至今天,已遷移 30% 的集群以使用新的 NoSQL 數(shù)據(jù)庫。
隨著 PayPal 的平臺變得越來越復雜,Go 提供了一種輕松簡化大規(guī)模創(chuàng)建和運行軟件的復雜性的方法。該語言為 PayPal 提供了出色的庫和快速工具,以及并發(fā)、垃圾收集和類型安全。
借助 Go,PayPal 使其開發(fā)人員能夠?qū)⒏鄷r間從 C++ 和 Java 開發(fā)的噪音中解放出來,從而能夠花更多時間查看代碼和進行戰(zhàn)略性思考。
在這個新改寫的 NoSQL 系統(tǒng)取得成功后,PayPal 內(nèi)更多的平臺和內(nèi)容團隊開始采用 Go。Natarajan 目前的團隊負責 PayPal 的構(gòu)建、測試和發(fā)布管道——所有這些都是在 Go 中構(gòu)建的。該公司擁有一個大型構(gòu)建和測試農(nóng)場,它使用 Go 基礎(chǔ)設(shè)施進行完全管理,以支持整個公司的開發(fā)人員的構(gòu)建即服務(wù)(和測試即服務(wù))。
憑借 PayPal 所需的分布式計算能力,Go 是刷新系統(tǒng)的正確語言。PayPal 需要并發(fā)和并行的編程,為高性能和高度可移植性而編譯,并為開發(fā)人員帶來模塊化、可組合的開源架構(gòu)的好處——Go 已經(jīng)提供了所有這些以及更多幫助 PayPal 對其系統(tǒng)進行現(xiàn)代化改造。
安全性和可支持性是 PayPal 的關(guān)鍵問題,該公司的運營管道越來越多地由 Go 主導,因為該語言的簡潔性和模塊化幫助他們實現(xiàn)了這些目標。PayPal 對 Go 的部署為開發(fā)人員提供了一個創(chuàng)意平臺,使他們能夠為 PayPal 的全球市場大規(guī)模生產(chǎn)簡單、高效和可靠的軟件。
隨著 PayPal 繼續(xù)使用 Go 對其軟件定義網(wǎng)絡(luò) (SDN) 基礎(chǔ)設(shè)施進行現(xiàn)代化改造,除了更易于維護的代碼外,他們還看到了性能優(yōu)勢。例如,Go 現(xiàn)在為路由器、負載平衡和越來越多的生產(chǎn)系統(tǒng)提供動力。
作為一家全球性企業(yè),PayPal 需要其開發(fā)團隊有效管理兩種規(guī)模:生產(chǎn)規(guī)模,尤其是與許多其他服務(wù)器(如云服務(wù))交互的并發(fā)系統(tǒng);和開發(fā)規(guī)模,尤其是由許多程序員協(xié)同開發(fā)的大型代碼庫(如開源開發(fā))
PayPal 利用 Go 來解決這些規(guī)模問題。該公司的開發(fā)人員受益于 Go 將解釋型動態(tài)類型語言的編程易用性與靜態(tài)類型編譯語言的效率和安全性相結(jié)合的能力。隨著 PayPal 對其系統(tǒng)進行現(xiàn)代化改造,對網(wǎng)絡(luò)和多核計算的支持至關(guān)重要。Go 不僅提供了這種支持,而且提供的速度很快——在單臺計算機上編譯一個大型可執(zhí)行文件最多需要幾秒鐘。
PayPal 目前有 100 多名 Go 開發(fā)人員,未來選擇采用 Go 的開發(fā)人員將更容易獲得該語言的批準,這要歸功于公司已經(jīng)在生產(chǎn)中的許多成功實現(xiàn)。
最重要的是,PayPal 開發(fā)人員使用 Go 提高了他們的生產(chǎn)力。Go 的并發(fā)機制使得編寫充分利用 PayPal 的多核和聯(lián)網(wǎng)機器的程序變得很容易。使用 Go 的開發(fā)人員還受益于它可以快速編譯為機器代碼的事實,并且他們的應(yīng)用程序獲得了垃圾收集的便利和運行時反射的強大功能。
今天 PayPal 的第一類語言是 Java 和 Node,Go 主要用作基礎(chǔ)設(shè)施語言。雖然 Go 可能永遠不會在某些應(yīng)用程序中取代 Node.js,但 Natarajan 正在推動讓 Go 成為 PayPal 的第一類語言。
通過他的努力,PayPal 還在評估遷移到 Google Kubernetes Engine (GKE) 以加快其新產(chǎn)品的上市時間。GKE 是一個用于部署容器化應(yīng)用程序的托管、生產(chǎn)就緒環(huán)境,并帶來了 Google 在開發(fā)人員生產(chǎn)力、自動化操作和開源靈活性方面的最新創(chuàng)新。
對于 PayPal 而言,部署到 GKE 將使 PayPal 更容易部署、更新和管理其應(yīng)用程序和服務(wù),從而實現(xiàn)快速開發(fā)和迭代。此外,PayPal 會發(fā)現(xiàn)更容易運行機器學習、通用 GPU、高性能計算和其他受益于 GKE 支持的專用硬件加速器的工作負載。
對 PayPal 來說最重要的是,Go 開發(fā)和 GKE 的結(jié)合使公司能夠輕松擴展以滿足需求,因為 Kubernetes 自動擴展將使 PayPal 能夠處理用戶對服務(wù)不斷增長的需求——在最重要的時候保持它們可用,然后在安靜的時間來省錢。
標題名稱:go語言對接硬件 go語言開發(fā)接口
鏈接URL:http://vcdvsql.cn/article30/hhjpso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、域名注冊、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)