王 偉
(西華大學 電氣信息學院,成都 610039)
計算機的發展經歷了半個多世紀,從體積大運算慢的計算機,往運算速度快的巨型機與體積小的微處理器兩個方向發展,單位體積的運算速度大大提高,功耗大大降低。從微處理器的發展來看,各種MCU、FPGA、SoC五花八門層出不窮;軟件的角度來看,操作系統方面包括Scheduler、RTOS等,應用軟件方面包括計算軟件等。本文給出了一種基于開源軟硬件技術的嵌入計算平臺,用于某一具體項目中來證明開源軟硬件技術在實際工程應用中的高效率。
嵌入計算平臺有別于一般意義的嵌入式系統,目前市面上的很多嵌入式智能產品其實并不具有或者只有少量先進的智能算法,很少用到現代信息處理和現代控制理論的最新成果。傳統的學術研究開發模式基于某些先進的算法,都是在Matlab上實現的,真正轉換為嵌入式C或其他能運行在小型嵌入式系統中的算法很少,這就影響到產學研的過程。借助敏捷開發的思想,讓開發的迭代過程加快,真正實現產學研結合。
本文中,硬件選用 Arduino(AVR單片機)、Raspberrypi(ARM11),軟件在AVR芯片上采用Scheduler或者RTOS,在ARM芯片上采用Linux,計算軟件采用Scilab。
開放源碼與封閉源碼的對比如表1所列。單片機一次投板成本在200元左右,周期1周。片上系統一次投板版成本在2 000元左右。

表1 開放源碼與封閉源碼的對比
開源技術開啟了一場新工業革命,打破了原有的嵌入式開發模式。現有的計算平臺系統結構框圖和嵌入計算平臺結構框圖分別如圖1、圖2所示。
兩塊名片大小的開源硬件結構如圖3所示,與名片的尺寸對比如表2所列,與PC的功耗對比如表3所列。

圖2 嵌入計算平臺結構框圖

圖3 兩塊名片大小的開源硬件開發板(標尺為inch)

表2 Arduino、Raspberry和名片的尺寸對比

表3 Arduino、Raspberry和PC的功耗對比
從圖1~3以及表2~3,可以看出,采用開源的Arduino和Raspberrypi,無論從尺寸大小還是功率消耗方面,在嵌入計算應用領域上都具有明顯的優勢。
在過去的半個多世紀里,計算機軟硬件技術和電氣工程理論水平得到了長足的發展,但是智能控制、軟件算法、軟件工程、芯片技術、電路設計與制造、傳感器技術都在各自的方向不斷發展,這一發展又與日益增長的客戶需求發生了矛盾。工程師們可以充分減少產品開發成本、技術風險和開發時間,在比過去短得多的時間里將更可靠、更便宜的產品投放市場,迎接市場的挑戰。為此我們嘗試從軟硬件角度、算法理論、項目管理思想等多角度去理解一個典型實時聲音圖像識別控制系統。
(1)SPI總線
SPI(Serial Peripheral Interface,串行外設接口),一般由 MOSI、MISO、CLK三條線組成,三線制串行通信接口。Raspberrypi與Arduino的SPI總線連接如圖4所示。

圖4 SPI通信接口連接
(2)實現基于中斷方式的流控通信機制
Raspberrypi為700MHz的處理器,而Arduino為16 MHz的處理器,兩片不對稱的芯片要進行通信,采用基于中斷控制的流控方式通信機制,具體實現流程如圖5所示。
以上流程實現了慢速的從處理器主導通信的流程,也就是慢速處理器決定通信狀態機的狀態關系。
①FreeRTOS,基于時間觸發的調度器和實時操作系統設計,包含內存管理、隊列管理、任務調度幾個部分。抽象的內存管理算法來自μC/OS,原因是在ANSI C中,malloc和free的使用是危險的。隊列管理包括數據隊列、任務隊列,原因包括計算機是基于流水線的串行處理的原理實現的。
②Linux,源于Unix,誕生于1993,由程序愛好者編寫。

圖5 中斷控制的流控方式通信機制
③Scilab,誕生于1990年代的法國自動化信息學會。從用戶體驗的角度來說,它與Matlab這類的數值計算軟件類似。唯一不同的是,這是一款開源的數值計算軟件,并且可以稍加修改移植到ARM-Linux系統之上,實現低成本的智能計算與控制的解決方案。
①Arduino,一種來自意大利的開源社區的成熟的單片機方案。開源的開放環境使用Java語言寫成,基于processing,avr-gcc和其他開源軟件。.net microframework簡單實用,用上層開發模式來開發。Processing、Wiring則是一種新型的編程語言實現。
②Raspberrypi,來自英國劍橋大學的開源的SoC片上系統,基于 ARM11,集成 CPU、GPU、內存,外部接GPIO、USB、RJ45。具體電路采用成熟方案,或者采用廠家的OEM模塊進行積木式搭建設計。既保證了系統的穩定性,也減少系統搭建的時間。當然并不代表我們就可以忽略電路知識以及電路設計的一些技術積累和細節。
Posix是開源軟件領域的一個重要標準,Linux基于Debian,由業余愛好者整合和移植上萬個軟件包。
這部分將成為本系統中最核心、最有難度的部分,也是決定產品成敗的關鍵點。數學很重要,除此之外,便是實踐。這是嵌入式系統開發工程師應該秉承的理念。
① 數值計算:采用Scilab開源數值計算軟件,并移植到ARM-Linux環境中。
② 圖形識別:采用Opencv開源嵌入式圖像識別庫,二值灰度表示圖像和圖像的幾何學變換。
③ 聲音識別:采用Simon開源嵌入式聲音識別庫,兩階段識別算法,在英語語音識別系統中,常用的聲學模型基本單元是單詞(word),上下文無關音素(monophone),上下文相關音素(triphone,biphone)和音節(syllable)。
當前階段,本系統已經搭建起來。實現基本功能的移植,已經展現出其開放開源的好處,以及低成本的實現。
對于軟件產品來說,軟件開發就是其所有。對于嵌入式產品來說,除了硬件電路,還有大量的軟件開發,甚至還有機械結構或者工業設計。這樣看來,嵌入式系統的開發,特別是優秀的嵌入式產品的開發的過程,是一個比較復雜的項目管理過程。
技術、過程、人是嵌入式系統開發的三要素,過程起到了樞紐的作用,將技術和人貫穿起來,如何使技術和人能最大程度的發揮其作用,也成了開發者和項目管理者所面臨的重大挑戰。
[1] 張曉丹.應用計算方法教程[M].北京:機械工業出版社,2008.
[2] 胡廣書.數字信號處理[M].北京:清華大學出版社,2006:71-76.
[3] 嚴蔚敏.數據結構[M].北京:清華大學出版社,2012.
[4] 馬龍華.基于Scilab的ARM-Linux嵌入式計算及應用[M].北京:科學出版社,2011.
[5] 譚浩強.C程序設計[M].北京:清華大學出版社,2011.
[6] 錢能.C++程序設計教程[M].北京:清華大學出版社,2011.