亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        開源平臺Arduino硬件生態(tài)擴充研究

        2019-07-02 12:12:52邱博文劉近貞
        實驗室研究與探索 2019年6期
        關(guān)鍵詞:開發(fā)板微控制器文件夾

        熊 慧, 邱博文, 劉近貞

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

        0 引 言

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

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

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

        1 硬件平臺概述

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

        使用的開發(fā)板型號為LPC54114-Lite,其具有Arduino板型架構(gòu),板載調(diào)試器和常用的外設(shè)擴展,通過該開發(fā)板可以非常方便地進行移植效果的評估。

        2 Arduino整體架構(gòu)

        針對所移植的微控制器可以把Arduino整體架構(gòu)進行分層處理,根據(jù)LPC5411x的具體特性來進行系統(tǒng)架構(gòu)的分層和描述。

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

        圖1 Arduino系統(tǒng)架構(gòu)圖

        各層所包含的內(nèi)容及具體職責(zé)如下:

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

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

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

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

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

        由Arduino的整體架構(gòu)可知,Arduino庫是通過SDK層實現(xiàn)對硬件的支持,所以必須針對LPC5411x的SDK接口函數(shù)來重新編寫Arduino庫。

        3 移植流程

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

        3.1 文件系統(tǒng)移植

        3.1.1 hardware文件目錄介紹

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

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

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

        3.1.2 添加文件目錄

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

        在新建好的文件夾下面新建“cores”“l(fā)ibraries”“system”“variants”4個文件夾,再新建“boards”“platform”兩個文本文檔。

        3.2 Arduino庫開發(fā)

        3.2.1 開發(fā)環(huán)境搭建

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

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

        3.2.2 庫文件的編寫

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

        在進行相應(yīng)外設(shè)庫文件編寫時,先在主函數(shù)中對開發(fā)板進行統(tǒng)一的初始化,然后依照相應(yīng)外設(shè)頭文件中函數(shù)的聲明,在源文件中基于SDK接口完成對此函數(shù)的實現(xiàn)。

        3.2.3 庫文件的移植

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

        3.3 配置文檔

        3.3.1 編譯與下載流程分析

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

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

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

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

        圖2 編譯下載流程框圖

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

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

        3.3.2 board.txt

        本文檔包含了許多與硬件相關(guān)的定義及與編譯,下載有關(guān)的宏定義,這些定義大部分將在platform.txt中用到,使用的每一個板子都應(yīng)該在此文檔中聲明自己的名稱及硬件相關(guān)信息。根據(jù)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會在目標(biāo)板的選項中出現(xiàn)該目標(biāo)板的名稱,具體效果見圖3。

        3.3.3 platform.txt

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

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

        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命令來實現(xiàn)的,通過對不同的recipe命令賦值,控制不同文件的編譯,鏈接方式。以“recipe.c.o.pattern”命令為例,其用于控制將*.c文件翻譯成*.o文件的過程,賦值格式如下所示:

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

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

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

        4 移植效果驗證

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

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

        圖3 開發(fā)板選項

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

        圖4 編譯結(jié)果圖

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

        圖5 下載結(jié)果圖

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

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

        5 結(jié) 語

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

        猜你喜歡
        開發(fā)板微控制器文件夾
        磁力文件夾
        物聯(lián)網(wǎng)技術(shù)在微控制器實驗教學(xué)中的應(yīng)用
        電子制作(2017年14期)2017-12-18 07:07:58
        調(diào)動右鍵 解決文件夾管理三大難題
        Microchip最新推出兩款PIC32 Curiosity開發(fā)板
        淺析單片機開發(fā)板的設(shè)計與制作
        電子制作(2017年22期)2017-02-02 07:10:14
        TC一鍵直達常用文件夾
        電腦迷(2015年1期)2015-04-29 21:24:13
        Mouser為您呈上開發(fā)關(guān)鍵之STMicroelectronics Nucleo開發(fā)板
        Arduino和Atmel發(fā)布Arduino Zero開發(fā)板
        Atmel針對新一代物聯(lián)網(wǎng)應(yīng)用發(fā)布全新32位微控制器
        最新STM32設(shè)計工具增加對混合信號微控制器的支持
        亚洲av午夜福利精品一区二区| 五月天国产精品| 欧美激情国产一区在线不卡| 国产午夜精品久久久久九九| 国产精品丝袜美女久久| 免费a级毛片高清在钱| 国产夫妇肉麻对白| 日射精情感性色视频| 岛国AV一区二区三区在线观看| 国产精品天堂avav在线| 国产精品av免费网站| 亚洲精品粉嫩美女一区| 亚洲综合激情五月丁香六月| 欧美亚洲综合另类| 一区二区三区在线蜜桃| 久久精品国产精品亚洲艾| 色与欲影视天天看综合网| 中文字幕久无码免费久久| 大学生被内谢粉嫩无套| 亚洲五月七月丁香缴情| 国产成人精品久久二区二区91 | 中文字幕久久久人妻无码 | 精品亚洲a∨无码一区二区三区| 国产国语熟妇视频在线观看 | 日本久久久| 国产精品很黄很色很爽的网站| 情爱偷拍视频一区二区| 亚洲国产精品无码专区| 亚洲成a人片在线| 国产精品久久国产精品久久| 好大好爽我要高潮在线观看| 大肉大捧一进一出好爽视色大师 | 大香焦av一区二区三区| 国产在线精品一区在线观看| 国产艳妇av在线出轨| 国产另类人妖在线观看| 国产太嫩了在线观看| 亚洲国产成人精品无码区在线观看| 亚洲地区一区二区三区| 国产成人激情视频在线观看| 精品国产午夜肉伦伦影院|