999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

開源平臺Arduino硬件生態擴充研究

2019-07-02 12:12:52邱博文劉近貞
實驗室研究與探索 2019年6期

熊 慧, 邱博文, 劉近貞

(天津工業大學 電氣工程與自動化學院, 天津 300387)

0 引 言

Arduino自2005年由David Cuartielles和Massimo Banzi等人創建以來在開源社區就具有很大的影響力,其豐富的開源庫以及硬件開源模板為實驗教學及電子愛好者們學習、開發提供了極大的幫助。Arduino作為典型的開源電子原型平臺由軟件Arduino集成開發環境 (Integrated Development Environment, IDE)和硬件Arduino板兩部分組成[1-4]。

Arduino IDE是以Pocessing多媒體編程環境為基礎建立起來的,其由Java語言編寫而成,并具有很強的跨平臺性。其類似Java,C語言的開發環境和簡潔,友好的編程界面非常適合初學者學習。目前大部分的Arduino板使用的是傳統的8位AVR單片機作為微控制器[5-7],雖然降低了Arduino板的成本但這在一定程度上也限制了Arduino的發展。

伴隨著未來實驗教學及電子設計的復雜化,智能化[8],勢必會需要使用更高性能的Arduino板。本文以32位微控制器LPC5411x為例,通過新建文件系統,Arduino庫開發和配置文檔說明介紹了把其移植入Arduino平臺的過程,并通過具體例程驗證了本文方法的正確性。

1 硬件平臺概述

本文所使用的硬件平臺以32位LPC5411x作為微控制器,它以Cortex-M4為主核,以Cortex-M0+內核為協處理器。LPC5411x雙核運行頻率都可達到100 MHz,且具有浮點運算單元,高速數字信號處理等功能。它主要被用于物聯網,智能傳感等領域。

使用的開發板型號為LPC54114-Lite,其具有Arduino板型架構,板載調試器和常用的外設擴展,通過該開發板可以非常方便地進行移植效果的評估。

2 Arduino整體架構

針對所移植的微控制器可以把Arduino整體架構進行分層處理,根據LPC5411x的具體特性來進行系統架構的分層和描述。

在LPC5411x 硬件和軟件開發包(Software Development Kit,SDK)的基礎上,如圖1所示可把Arduino整體架構分為5層,分別是硬件層,CMSIS (Cortex Microcontroller Software Interface Standard)層,SDK層,Arduino庫層和應用層。每一層為上層提供統一的接口服務,以屏蔽各層之間的差異性,保證本層及以下層發生變化不會影響到上層,通過這種分層結構可極大地降低系統學習難度和移植的復雜度。

圖1 Arduino系統架構圖

各層所包含的內容及具體職責如下:

(1) 硬件層主要是指由Cortex-M內核和一些外設組成的微控制器硬件平臺。

(2) CMSIS層也稱為硬件抽象層,是Cortex-M微控制器的軟件接口標準。該標準的目的是為芯片廠商和中間件供應商提供連續的、簡單的處理器軟件接口,保證內核層次上的一致性,簡化軟件復用,降低系統移植時間,提高開發效率[9-10]。

(3) SDK層是微控制器供應商為方便開發者使用所提供的軟件開發包,該層可以讓開發者靈活配置外設,而且提供了許多例程供開發者參考。除此之外有些供應商還提供已經移植好的實時操作系統讓用戶更方便地開發出實時性較好的應用。

(4) Arduino庫是對SDK的二次封裝,早期的庫是由C語言編寫而成,后期引入了C++語言來進行面向對象的編程[11]。Arduino庫為用戶提供了簡單易懂的編程接口,用戶只需掌握對庫函數的使用,便可以簡單高效地開發出所需要的應用程序。

(5) 應用層由類似于C和C++的wirting語言編寫而成,編寫的源碼被稱為Sketch。用戶可以方便地在Arduino IDE上找到許多應用示例進行參考,而且開源社區和官方網址也提供了大量的源代碼支持[12]。

由Arduino的整體架構可知,Arduino庫是通過SDK層實現對硬件的支持,所以必須針對LPC5411x的SDK接口函數來重新編寫Arduino庫。

3 移植流程

Arduino IDE通過底層的配置文檔來識別每個板子的庫文件,及其編譯和下載方式。本章節將對如何添加LPC54114-Lite的文件目錄,如何開發Arduino庫及如何編寫配置文檔進行說明。

3.1 文件系統移植

3.1.1 hardware文件目錄介紹

Arduino IDE (版本 1.5.5)安裝目錄下面存放著所有基本編程所需要的文件和工具。與硬件平臺緊密相關的庫文件,編譯下載工具分別存放在hardware/arduino和hardware/tools目錄下。

在hardware/arduino目錄下面存放著不同系例微控制器的子目錄,目前主要有avr和sam兩個系列。兩個系列的目錄下都包含了各自微控制器平臺的配置文檔以及針對本系列微控制器編寫的庫文件。其中cores文件夾包含了所需要的庫文件,variants文件夾包含了與開發板比較相關的聲明文件。boards.txt和platform.txt是兩個比較重要的配置文檔,將在下文中進行說明。

在hardware/tools目錄下面存放著需要使用的編譯器及下載工具,本文使用的編譯器具體版本為“g++_arm_none_eabi_2014q3”。所使用的在線編程(In System Programmability,ISP)工具是Flash Magic中的命令行工具“FM.EXE”。

3.1.2 添加文件目錄

首先需要在hardware/arduino目錄下新建一個以移植目標板所屬系列名命名的文件夾。根據本文所移植的目標板,此文件夾命名為“LPC”。

在新建好的文件夾下面新建“cores”“libraries”“system”“variants”4個文件夾,再新建“boards”“platform”兩個文本文檔。

3.2 Arduino庫開發

3.2.1 開發環境搭建

考慮到編寫庫文件的便利性及可調試性,本文采用Keil MDK作為開發調試平臺,庫文件經過編寫調試成功后再移植到Arduino IDE相應的目錄下。同時也要清楚的認識到Keil MDK所使用的編譯器Armcc與ARM-GCC的差異性,以防在Arduino IDE下編譯時出現不必要的錯誤[13-14]。

在Keil MDK上新建一個LPC54114工程,并參考上文中提到的目錄結構進行工程目錄的搭建,也可以在SDK中找到相應的CMSIS文件和庫文件進行初始化的搭建。

3.2.2 庫文件的編寫

進行庫文件的編寫時,先把Arduino IDE中avr系列的main.cpp和Arduino.h文件添加到已創建的工程目錄下。除此之外還必須新建一個名為loop.cpp的文件,并新建setup()和loop()兩個函數,以此來仿照Arduino IDE的編程結構。

在進行相應外設庫文件編寫時,先在主函數中對開發板進行統一的初始化,然后依照相應外設頭文件中函數的聲明,在源文件中基于SDK接口完成對此函數的實現。

3.2.3 庫文件的移植

把編寫,調試好的庫文件添加到新建好的cores文件夾中。libraries文件夾用于存放串行外設接口(Serial Peripheral Interface,SPI)和Wire等擴展庫文件。variants文件夾用于存放編寫庫文件時與開發板密切相關的引腳聲明文件,除此之外還需要把SDK中的CMSIS文件和lib庫文件添加到system文件夾中。

3.3 配置文檔

3.3.1 編譯與下載流程分析

配置文檔的最終目的是定義Arduino IDE如何對源碼進行編譯及下載,所以熟知這些流程將更有利于對配置文檔的編寫。

本文使用ARM-GCC進行源程序的編譯,使用ISP方式進行程序下載。具體編譯下載流程[6]如圖2所示:

此過程分為兩個步驟,① 把源文件生成hex或者bin文件;② 執行下載操作。下面將對這兩個過程進行具體說明:

(1) Sketch文件是一個以ino為擴展名的文件,該文件先轉化為.cpp文件,而后同Arduino IDE文件

圖2 編譯下載流程框圖

系統中的庫文件及啟動文件分別編譯為各自的.o文件。生成的眾多.o文件被鏈接成為名為cores.a的靜態庫。lib.a文件是由SDK中的庫函數編譯,鏈接生成的靜態庫,這兩個靜態庫在.ld鏈接腳本文件的參與下生成相應的.elf可執行文件。最后轉化為hex或者bin文件并計算其占Flash的大小[7]。

(2) 把生成的hex或者bin文件通過ISP或者其他方式下載到微控制器的Flash中[15]。

3.3.2 board.txt

本文檔包含了許多與硬件相關的定義及與編譯,下載有關的宏定義,這些定義大部分將在platform.txt中用到,使用的每一個板子都應該在此文檔中聲明自己的名稱及硬件相關信息。根據LPC54114-Lite板的功能特點,部分配置信息如下:

[……]

LPC54114.name=LPC54114-Lite

LPC54114.build.mcu=cortex-m4

LPC54114.build.ldscript=LPC54114J256_cm4_flash.ld

LPC54114.upload.tool=FM.EXE

LPC54114.build.variant_system_lib=lib.a

LPC54114.build.f_cpu=48000000L

[……]

配置完成后,重啟IDE會在目標板的選項中出現該目標板的名稱,具體效果見圖3。

3.3.3 platform.txt

platform.txt 文檔用來定義目標板分類,IDE版本,源碼編譯及下載流程。

(1) 目標板分類及IDE版本。合理的目標板分類及IDE版本聲明有利于未來的維護,升級。本文使用的IDE版本為1.5.5,定義目標板類別為“LPC (32-bits) Boards”,具體書寫內容如下:

name=LPC (32-bits) Boards

version=1.5.5

(2) 變量聲明。正如C和C++中的那樣,在platform.txt中也可以定義自己的變量,其變量名中通常有逗號進行分隔。以“compiler.c.cmd=arm-none-eabi-gcc” 為例,其中 “compiler.c.cmd”為聲明的變量,“arm-none-eabi-gcc”為給此變量賦的值。引用變量時需要在變量名兩邊加上“{}”。

(3) 編譯及下載流程。編譯過程是由一系列recipe命令來實現的,通過對不同的recipe命令賦值,控制不同文件的編譯,鏈接方式。以“recipe.c.o.pattern”命令為例,其用于控制將*.c文件翻譯成*.o文件的過程,賦值格式如下所示:

recipe.c.o.pattern={變量} {變量}……

下載流程是由tools命令來實現的,通過對“tools.FM.upload.pattern”的賦值,來控制具體的下載操作,其中FM為下載工具的名稱。

根據上文中提到的編譯,下載流程,分別完成對recipe和tools命令的賦值,便可實現對編譯及下載流程的控制。

4 移植效果驗證

以Arduino IDE自帶的Blink例程來驗證移植方法的正確性,測試流程如下:

(1) 如圖3所示,選中Arduino IDE開發板選項卡中的“LPC54114-Lite”。

圖3 開發板選項

(2) 加載“Example”中Blink例程,進行編譯,IDE打印編譯結果如圖4所示,可執行文件的大小被成功計算出,驗證了編譯過程的正確性。

圖4 編譯結果圖

(3) 開發板在ISP的模式下與電腦進行連接,在IDE上選擇對應的COM端口并進行下載操作,IDE上打印出的結果信息如圖5所示,由打印出的信息可知可執行文件被成功下載。

圖5 下載結果圖

(4) 重新設置開發板為Flash啟動模式,上電后Blink例程成功運行。

通過該測試流程可以驗證本文移植方法的正確性,在不斷完善庫文件的情況下,可以通過Arduino IDE對LPC54114-Lite開發板進行正常的嵌入式開發。

5 結 語

為了滿足未來實驗教學及電子設計領域向復雜化和智能化發展對硬件的需求,本文以LPC5411x微控制器為例介紹了擴充Arduino硬件生態的一種方法。分析了Arduino整體架構并對其進行分層描述,通過在Arduino IDE底層添加文件目錄,庫文件及配置文檔可以實現其對LPC5411x微控制器的支持。通過具體例程驗證了本文方法的正確性,為擴充Arduino硬件生態和開源平臺的應用范圍提供了重要參考。

主站蜘蛛池模板: 亚洲成人一区在线| 狠狠干综合| 国产在线观看一区二区三区| 日韩欧美综合在线制服| 成人国产一区二区三区| 欧美日韩亚洲国产主播第一区| 亚洲一区二区三区国产精品 | 国产成人高清在线精品| 欧美日韩91| 国产欧美精品一区二区| 国产亚洲视频免费播放| 谁有在线观看日韩亚洲最新视频| 国产在线拍偷自揄拍精品| 欧美五月婷婷| 国产91色| 永久免费精品视频| 69视频国产| 韩国自拍偷自拍亚洲精品| 亚洲视频免费在线看| 国内精品久久人妻无码大片高| 国产玖玖玖精品视频| 欧美精品啪啪一区二区三区| 99久久亚洲综合精品TS| 国产青榴视频| 久久99热66这里只有精品一 | 91精品国产综合久久香蕉922| 日本一本正道综合久久dvd| 五月天福利视频| 亚洲欧美精品在线| 国产精品hd在线播放| 久久黄色免费电影| 久久中文字幕不卡一二区| 国产精品xxx| 91小视频在线观看免费版高清| 国产精品白浆在线播放| 国产原创第一页在线观看| 国产福利一区视频| 国产欧美日韩专区发布| 国产精品美女网站| 亚洲欧美日韩中文字幕在线一区| 亚洲视频免费播放| av大片在线无码免费| 国产十八禁在线观看免费| 中文字幕人成乱码熟女免费| 久久亚洲AⅤ无码精品午夜麻豆| 中文成人在线| 乱色熟女综合一区二区| 国产自无码视频在线观看| 国产打屁股免费区网站| 免费人成在线观看视频色| a色毛片免费视频| 青草视频免费在线观看| 亚洲人成网站18禁动漫无码| 日本色综合网| 久久五月天综合| 欧美成人午夜在线全部免费| 亚洲精选高清无码| 国产亚洲精品97在线观看| 欧美日韩精品综合在线一区| 在线观看无码a∨| 老司国产精品视频91| 日本高清免费不卡视频| 在线毛片免费| 国产成人精品免费av| 免费av一区二区三区在线| 亚洲一区二区三区香蕉| 亚洲欧美一区二区三区蜜芽| 毛片免费在线视频| 99精品免费在线| 国产97公开成人免费视频| 亚洲高清在线天堂精品| 在线观看无码av免费不卡网站| 999精品视频在线| 亚洲最大综合网| 亚洲天堂在线免费| 九九精品在线观看| av天堂最新版在线| 最新亚洲人成无码网站欣赏网| 日本道中文字幕久久一区| 欧美日韩高清在线| 国产亚洲精品无码专| 国产综合另类小说色区色噜噜|