Contiki-系統(tǒng)移植課件_第1頁
Contiki-系統(tǒng)移植課件_第2頁
Contiki-系統(tǒng)移植課件_第3頁
Contiki-系統(tǒng)移植課件_第4頁
Contiki-系統(tǒng)移植課件_第5頁
已閱讀5頁,還剩125頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第11章Contiki系統(tǒng)移植11.1認識Contiki開發(fā)套件11.2搭建Contiki開發(fā)環(huán)境11.3Contiki系統(tǒng)移植實例返回第11章Contiki系統(tǒng)移植11.1認識Co11.1認識Contiki開發(fā)套件進行6LoWPAN嵌入式物聯(lián)網(wǎng)應用開發(fā),需要相關(guān)硬件和軟件。在硬件方面,本章基于聯(lián)創(chuàng)中控(北京)科技有限公司自主研發(fā)的UI-IOT-IPv6教學科研平臺,用于了解6LoWPAN開發(fā)套件各個模塊的硬件資源、使用說明及各種運行模式,同時介紹6LoWPAN嵌入式物聯(lián)網(wǎng)應用開發(fā)環(huán)境的搭建方法。11.1.1Contiki開發(fā)套件介紹UI-IOT-IPv6平臺在硬件設(shè)計上分成兩個區(qū)域:移動互聯(lián)網(wǎng)網(wǎng)關(guān)板、物聯(lián)網(wǎng)無線節(jié)點板,其中物聯(lián)網(wǎng)無線節(jié)點板采用UI-WSN系列物聯(lián)網(wǎng)套件,如圖11-1和圖11-2所示。11.1.2跳線設(shè)置及硬件連接(1)無線協(xié)調(diào)器直接安裝到實驗主板對應插槽中,跳線使用如圖11-3所示。下一頁返回11.1認識Contiki開發(fā)套件進行6LoWPAN11.1認識Contiki開發(fā)套件①模式一:調(diào)試STM32F103,STM32F103串口連接到網(wǎng)關(guān)(默認)。②模式二:調(diào)試STM32F103,STM32F103串口連接到調(diào)試擴展板。(2)無線節(jié)點板上提供了兩組跳線用于選擇調(diào)試不同的處理器,跳線使用如圖11-4所示。①模式一:調(diào)試CC2530,CC2530串口連接到調(diào)試擴展板。②模式二:調(diào)試STM32F103,STM32F103串口連接到調(diào)試擴展板(默認)。(3)通過調(diào)試接口板的轉(zhuǎn)接,無線節(jié)點可以使用仿真器進行調(diào)試,同時還可以使用RS232串口。調(diào)試接口板的連接如圖11-5所示。上一頁返回11.1認識Contiki開發(fā)套件①模式一:調(diào)試S11.2搭建Contiki開發(fā)環(huán)境11.2.1Contiki源代碼結(jié)構(gòu)Contiki是一個高度可移植的操作系統(tǒng),它的設(shè)計就是為了獲得良好的可移植性,因此其源代碼的組織很有特點。下面簡單介紹Contiki的源代碼組織結(jié)構(gòu)以及各部分代碼的作用。打開Contiki源文件目錄,可以看到主要有以下部分。1.appsapps目錄下是一些應用程序,例如ftp、shell、webserver等,在項目程序開發(fā)過程中可以直接使用。使用這些應用程序的方式為,在項目的Makefile中,定義APPS=[應用程序名稱]。在以后的示例中會具體看到如何使用apps。下一頁返回11.2搭建Contiki開發(fā)環(huán)境11.2.1Con11.2搭建Contiki開發(fā)環(huán)境2.corecore目錄下是Contiki的核心源代碼,包括網(wǎng)絡(net)、文件系統(tǒng)(cfs)、外部設(shè)備(dev)、鏈接庫(lib)等,并且包含了時鐘、I/O、ELF裝載器、網(wǎng)絡驅(qū)動等的抽象。3.cpucpu目錄下是Contiki目前支持的微處理器,例如arm、avr、msp430等。如果需要支持新的微處理器,可以在這里添加相應的源代碼。4.docdoc目錄是Contiki幫助文檔目錄,對Contiki應用程序開發(fā)很有參考價值。使用前需要先用Doxygen進行編譯。上一頁下一頁返回11.2搭建Contiki開發(fā)環(huán)境2.core上一頁11.2搭建Contiki開發(fā)環(huán)境5.examplesexamples目錄下是針對不同平臺的示例程序。6.platformplatform目錄下是Contiki支持的硬件平臺,例如mx231cc、micaz、sky、win32等。Contiki的平臺移植主要在這個目錄下完成。這一部分的代碼與相應的硬件平臺相關(guān)。7.toolstools目錄下是開發(fā)過程中常用的一些工具,例如CFS相關(guān)的makefsdata、網(wǎng)絡相關(guān)的tunslip、模擬器Cooja和Mspsim等。為了獲得良好的可移植性,除了CPU和platform中的源代碼與硬件平臺相關(guān)以外,其他目錄中的源代碼都盡可能與硬件無關(guān)。編譯時,根據(jù)指定的平臺來鏈接對應的代碼。上一頁返回11.2搭建Contiki開發(fā)環(huán)境5.example11.2搭建Contiki開發(fā)環(huán)境11.2.2Contiki系統(tǒng)移植過程嵌入式的操作系統(tǒng)在硬件平臺上的移植,一直以來讓很多新手望而卻步,因為移植一個操作系統(tǒng)比寫一個C語言程序復雜多了。那么究竟怎樣移植Contiki系統(tǒng)到STM32上呢?移植過程中需要修改源碼的哪個部分呢?通過下面的分析,讀者就知道了。Contiki采用事件驅(qū)動機制,通常有兩種方法產(chǎn)生事件:一是通過時鐘定時,定時時間到就產(chǎn)生一個事件;二是通過某種中斷,某個中斷發(fā)生,就產(chǎn)生某個事件,例如外部中斷。由于Contiki是非搶占的操作系統(tǒng),所以移植時時鐘一定是必要的,移植Contiki系統(tǒng)的重點就在SysTick上。下面以一個實例詳細介紹Contiki系統(tǒng)移植的整個過程。下一頁返回11.2搭建Contiki開發(fā)環(huán)境11.2.2Con11.2搭建Contiki開發(fā)環(huán)境1.創(chuàng)建IARforARM空工程將本書配套的軟件資源包中“03-系統(tǒng)代碼”目錄下的contiki-2.6解壓后整個文件夾拷貝到PC機任意目錄下,比如D:\根目錄,進入Contiki系統(tǒng)源碼的contiki-2.6\zonesion\example\iar目錄下,創(chuàng)建testSample目錄,然后在testSample目錄下創(chuàng)建一個IARforARM空工程,工程名稱以及工作空間的名稱為“testSample”,過程如下:(1)創(chuàng)建一個空的ARM工程,將之命名為“testSample”。單擊“開始”->“程序”->“IARSystems”->“IAREmbeddedWorkbenchforARM5.41”->“IAREmbeddedWorkbench”,單擊“Project”選項,選擇“CreateNewProject”,創(chuàng)建工程,如圖11-6所示。上一頁下一頁返回11.2搭建Contiki開發(fā)環(huán)境1.創(chuàng)建IAR11.2搭建Contiki開發(fā)環(huán)境(2)保存工作空間并將之命名為“testSample”。單擊“File”->“Saveworkspace”,保存工程,創(chuàng)建完工程后,在testSample工程目錄下即可看到新增了幾個文件,如圖11-7所示。2.給工程添加組目錄在工程名上單擊鼠標右鍵,選擇“Add”->“AddGroup”,填寫組目錄名稱。按照添加組目錄的方法,依次添加如圖11-8所示的組目錄結(jié)構(gòu)。添加子目錄的方法,以core目錄下的子目錄sys為例,只要在core文件夾上單擊鼠標右鍵,選擇“Add”->“Group”即可。3.在組目錄里添加.c等文件(1)添加Contiki系統(tǒng)文件。在工程sys目錄名上單擊鼠標右鍵。選擇“Add”->“AddFiles...”。添加Contiki的系統(tǒng)文件:autostart.c、ctimer.c、etimer.c、process.c、timer.c。這幾個文件位于Contiki系統(tǒng)源碼的contiki-2.6\core\sys目錄下。上一頁下一頁返回11.2搭建Contiki開發(fā)環(huán)境(2)保存工作空間并11.2搭建Contiki開發(fā)環(huán)境(2)添加STM32官方庫文件。將STM32F10x_StdPeriph_Lib_V3.5.0(ST公司提供的STM32標準庫文件,3.5版本庫放在Contiki系統(tǒng)源碼的contiki-2.6\cpu\arm\stm32f10x目錄下。(3)在工程的cpu組目錄下添加Contiki系統(tǒng)時鐘文件clock.c,該文件所在目錄為:contiki-2.6\cpu\arm\stm32f10x。4.創(chuàng)建contiki-main.c文件移植Contiki系統(tǒng)所需要的Contiki系統(tǒng)文件、STM32官方庫所需文件都添加完畢后,若想讓程序執(zhí)行就必須有main()函數(shù),因為1~3步添加的都是一些相應的支持文件,下面在工程的zonesion\proj組目錄下新建一個contiki-main.c文件,創(chuàng)建方法如下:上一頁下一頁返回11.2搭建Contiki開發(fā)環(huán)境(2)添加STM311.2搭建Contiki開發(fā)環(huán)境單擊“File”->“New”->“File”或者直接單擊“File”下面的“NewDocument”按鈕創(chuàng)建一個空白文件。按下“Ctrl+S”組合鍵保存,保存路徑選擇當前工程testSample根目錄,保存文件名為“contiki-main.c”。然后將已創(chuàng)建的contiki-main.c文件添加到工程的zonesion\proj組目錄下。添加完成后整個工程目錄結(jié)構(gòu)如圖11-9所示。添加完.c文件后,就需要配置工程,如硬件芯片型號選擇、頭文件路徑等。配置方法及步驟如下:在工程名上單擊鼠標右鍵,選擇“Options”->“GeneralOptions”配置頁面,勾選“Device”,然后選擇“ST”->“STM32F10xxB”。在“Debugger”配置頁面,將“Driver”選項設(shè)置成“J-Linker/J-Trace”。配置完工程選項之后,就需要在工程配置選項里面添加頭文件路徑和宏定義,否則在編譯.c文件時就找不到相應頭文件,會出現(xiàn)編譯錯誤。上一頁下一頁返回11.2搭建Contiki開發(fā)環(huán)境單擊“File”->11.2搭建Contiki開發(fā)環(huán)境添加方法:將頭文件路徑復制到“C/C++Compiler”配置選項中的“Additionnalincludederectories”輸入框中;將宏定義添加到“Definedsymbols”輸入框中,如圖11-10所示。5.系統(tǒng)時鐘移植沒有系統(tǒng)時鐘,系統(tǒng)就跑不起來,在本次移植過程中并不需要修改clock.c文件,因為該clock.c文件已修改好,直接拿過來使用即可。下面對clock.c源碼進行相應解析。1)系統(tǒng)時鐘初始化系統(tǒng)時鐘初始化是整個STM32工作的核心,根據(jù)STM32的主頻,以及CLOCK_SENCOND的參數(shù),可以設(shè)置系統(tǒng)時鐘中斷的時間。上一頁下一頁返回11.2搭建Contiki開發(fā)環(huán)境添加方法:將頭文件路11.2搭建Contiki開發(fā)環(huán)境2)系統(tǒng)時鐘中斷處理函數(shù)要讓Contiki操作系統(tǒng)運行起來,關(guān)鍵就是啟動系統(tǒng)時鐘,對應到Contiki系統(tǒng)的進程就是啟動etimer進程。etimer_process由Contiki系統(tǒng)提供,這里只需對系統(tǒng)時鐘進行初始化并定時更新系統(tǒng)時鐘(用戶自定義current_clock),并判斷etimer的下一個定時時刻是否已到(通過比較current_clock與etimer的定時時刻來判定)。如果時鐘等待序列中有等待時鐘的進程,那么就調(diào)度etimer進程執(zhí)行,通過其來喚醒相關(guān)進程。6.實驗結(jié)果系統(tǒng)移植結(jié)束后,將程序燒寫到STM32無線節(jié)點開發(fā)板上驗證Contiki系統(tǒng)是否移植成功。具體步驟為:上一頁下一頁返回11.2搭建Contiki開發(fā)環(huán)境2)系統(tǒng)時鐘中斷處理11.2搭建Contiki開發(fā)環(huán)境(1)正確連接JLINK仿真器、串口線到PC機和STM32開發(fā)板(見圖11-5),在PC機上打開串口調(diào)試助手或者超級終端,設(shè)置接收的波特率為115200。(2)在IARforARM開發(fā)環(huán)境中打開移植工程文件(或雙擊testSample.eww文件)。(3)通過5V電源適配器給STM32開發(fā)板通電(將STM32電源開關(guān)撥到“ON”,讓STM32開發(fā)板上電,下同),然后打開J-FlashARM軟件,單擊“Target”->“Connect”,連接成功后,LOG窗口會提示“ConnectedSuccessfully”,接下來通過IAR選擇“Project”->“Downloadanddebug”,將程序下載到STM32開發(fā)板中。上一頁下一頁返回11.2搭建Contiki開發(fā)環(huán)境(1)正確連接JL11.2搭建Contiki開發(fā)環(huán)境(4)下載完后可以單擊“Debug”->“Go”讓程序全速運行;也可以將STM32開發(fā)板重新上電或者按下復位按鈕讓剛才下載的程序重新運行。(5)程序成功運行后,若在串口顯示區(qū)顯示“HelloWorld!”,即表明Contiki系統(tǒng)已成功移植到STM32開發(fā)板。上一頁返回11.2搭建Contiki開發(fā)環(huán)境(4)下載完后可以單11.3Contiki系統(tǒng)移植實例本節(jié)通過6個實例進一步介紹基于Contiki系統(tǒng)的嵌入式物聯(lián)網(wǎng)應用的關(guān)鍵技術(shù)。11.3.1LED控制基于Contiki系統(tǒng),學習使用Contiki進程控制LED燈以及掌握其相關(guān)原理。1.實例要求實現(xiàn)一個blink_process進程,該進程可使STM32開發(fā)板上的D4、D5燈閃爍。LED燈的顯示一共有3種狀態(tài):D4點亮、D5點亮、D4和D5同時點亮。2.實例代碼blink_process進程定義在工程根目錄下的blink.c文件中,源代碼如下:下一頁返回11.3Contiki系統(tǒng)移植實例本節(jié)通過6個實例進11.3Contiki系統(tǒng)移植實例#include"contiki.h"#include"dev/leds.h"#include<stdio.h>staticstructetimeret_blink;staticuint8_tblinks;PROCESS(blink_process,"blinkledprocess");//定義blink進程AUTOSTART_PROCESSES(&blink_process);//將blink進程定義成自啟動PROCESS_THREAD(blink_process,ev,data){PROCESS_BEGIN();//進程開始上一頁下一頁返回11.3Contiki系統(tǒng)移植實例#include"c11.3Contiki系統(tǒng)移植實例blinks=0;while(1){etimer_set(&et_blink,CLOCK_SECOND);//設(shè)置定時器1sPROCESS_WAIT_EVENT_UNTIL(ev==PROCESS_EVENT_TIMER);leds_off(LEDS_ALL);//關(guān)燈leds_on(blinks&LEDS_ALL);//開燈blinks++;printf("Blink...(state%0.2X)\n\r",leds_get());}PROCESS_END();//進程結(jié)束}上一頁下一頁返回11.3Contiki系統(tǒng)移植實例blinks=0;上一11.3Contiki系統(tǒng)移植實例代碼中l(wèi)eds_on(blinks&LEDS_ALL)函數(shù)實現(xiàn)兩個LED燈點亮的不同方式,其中函數(shù)參數(shù)實現(xiàn)具體選擇哪一個LED燈點亮。在實例中,LED燈的顯示一共有3種狀態(tài):D4點亮、D5點亮、D4和D5同時點亮。盡管讀者對blink_process進程的基本功能已有初步了解,但對進程定義,以及進程執(zhí)行難以理解。另外聲明變量最好不要放在PROCESS_BEGIN之前,因為進程再次被調(diào)用,總是從頭開始執(zhí)行,直到PROCESS_BEGIN宏中的switch判斷才跳轉(zhuǎn)到斷點case_LINE_。也就是說,進程被調(diào)用時總是會執(zhí)行PROCESS_BEGIN之前的代碼。上一頁下一頁返回11.3Contiki系統(tǒng)移植實例代碼中l(wèi)eds_on11.3Contiki系統(tǒng)移植實例3.實例結(jié)果(1)正確連接JLINK仿真器、串口線到PC機和STM32開發(fā)板,在PC機上打開串口調(diào)試助手或者超級終端,設(shè)置接收的波特率為115200。(2)在IARforARM開發(fā)環(huán)境中打開例程文件(或雙擊blink.eww文件,注意事先將blink整個文件夾拷貝到系統(tǒng)源碼目錄的D:\contiki-2.6\zonesion\example\iar文件夾下,下同)。(3)通過5V電源適配器給STM32開發(fā)板通電,然后打開J-FlashARM軟件,單擊“Target”->“Connect”,連接成功后,LOG窗口會提示“ConnectedSuccessfully”,接下來通過IAR選擇“Project”->“Downloadanddebug”,將程序下載到STM32開發(fā)板中。上一頁下一頁返回11.3Contiki系統(tǒng)移植實例3.實例結(jié)果上一頁下11.3Contiki系統(tǒng)移植實例(4)下載完后可以單擊“Debug”->“Go”,讓程序全速運行;也可以將STM32開發(fā)板重新上電或者按下復位按鈕讓剛才下載的程序重新運行。(5)程序成功運行后,此時在STM32開發(fā)板可觀察到D4和D5有規(guī)則地點亮,同時在串口顯示區(qū)有如下顯示:StartingContiki2.6onSTM32F10xautostart_start:startingprocess'blinkledprocess'Blink...(state00)Blink...(state01)Blink...(state02)Blink...(state03)上一頁下一頁返回11.3Contiki系統(tǒng)移植實例(4)下載完后可以單擊11.3Contiki系統(tǒng)移植實例11.3.2Contiki多線程基于Contiki系統(tǒng),學習使用Contiki多線程編程以及掌握其相關(guān)原理。1.實例要求實現(xiàn)兩個進程:一個是顯示“HelloWorld!”的進程,設(shè)置成4秒顯示1次;另一個是使LED燈閃爍的blink進程,設(shè)置成1秒執(zhí)行1次。2.實例代碼源碼實現(xiàn)過程如下:(1)定義helloworld進程:PROCESS(helloworld_process,"Helloworldprocess");上一頁下一頁返回11.3Contiki系統(tǒng)移植實例11.3.2Cont11.3Contiki系統(tǒng)移植實例(2)定義LED燈閃爍進程:PROCESS(blink_process,"LEDblinkprocess");(3)兩個進程定義結(jié)束之后在自動啟動進程的參數(shù)列表里面加上兩個進程名:AUTOSTART_PROCESSES(&hello_world_process,&blink_process);(4)編寫helloworld_process進程和blink_process進程的執(zhí)行體:PROCESS_THREAD(hello_world_process,ev,data){PROCESS_BEGIN();etimer_set(&et_hello,CLOCK_SECOND*4);//設(shè)置定時器4s上一頁下一頁返回11.3Contiki系統(tǒng)移植實例(2)定義LED燈11.3Contiki系統(tǒng)移植實例while(1){PROCESS_WAIT_EVENT();if(ev==PROCESS_EVENT_TIMER){printf("HelloWorld!\n\r");etimer_reset(&et_hello);}}PROCESS_END();}//LED燈閃爍進程PROCESS_THREAD(blink_process,ev,data)上一頁下一頁返回11.3Contiki系統(tǒng)移植實例while(1){上一11.3Contiki系統(tǒng)移植實例{PROCESS_BEGIN();blinks=0;while(1){etimer_set(&et_blink,CLOCK_SECOND);//設(shè)置定時器1sPROCESS_WAIT_EVENT_UNTIL(ev==PROCESS_EVENT_TIMER);leds_off(LEDS_ALL);leds_on(blinks&LEDS_ALL);blinks++;printf("Blink...(state%0.2X)\n\r",leds_get());}PROCESS_END();}上一頁下一頁返回11.3Contiki系統(tǒng)移植實例{PROCESS_B11.3Contiki系統(tǒng)移植實例3.實例結(jié)果(1)正確連接JLINK仿真器、串口線到PC機和STM32開發(fā)板,在PC機上打開串口調(diào)試助手或者超級終端,設(shè)置接收的波特率為115200。(2)在IARforARM開發(fā)環(huán)境中打開例程文件(或雙擊blink-hello.eww文件)。(3)通過5V電源適配器給STM32開發(fā)板通電,然后打開J-FlashARM軟件,單擊“Target”->“Connect”,連接成功后,LOG窗口會提示“ConnectedSuccessfully”,接下來通過IAR選擇“Project”->“Downloadanddebug”,將程序下載到STM32開發(fā)板中。(4)下載完后可以單擊“Debug”->“Go”讓程序全速運行;也可以將STM32開發(fā)板重新上電或者按下復位按鈕讓剛才下載的程序重新運行。上一頁下一頁返回11.3Contiki系統(tǒng)移植實例3.實例結(jié)果上一頁下11.3Contiki系統(tǒng)移植實例(5)程序成功運行后,在串口顯示區(qū)顯示:StartingContiki2.6onSTM32F10xautostart_start:startingprocess'Blinkledprocess'autostart_start:startingprocess'LEDblinkprocess'Blink...(state01)Blink...(state02)Blink...(state03)HelloWorld!Blink...(state00)Blink...(state01)Blink...(state02)上一頁下一頁返回11.3Contiki系統(tǒng)移植實例(5)程序成功運行后,11.3Contiki系統(tǒng)移植實例Blink...(state03)HelloWorld!….串口顯示區(qū)的信息表示兩個進程開始運行,顯示“Blink…(state01)”時,STM32開發(fā)板上D4點亮,顯示“Blink…(state02)”時,可看到D5點亮,顯示“Blink…(state03)”時,D4和D5同時點亮。串口顯示區(qū)顯示“HelloWorld!”時,表明helloworld進程已開始工作。上一頁下一頁返回11.3Contiki系統(tǒng)移植實例Blink...(s11.3Contiki系統(tǒng)移植實例11.3.3Contiki進程間的通信進程通信的方式有多種,本次實驗基于Contiki系統(tǒng),使用的是共享內(nèi)存的方式。共享內(nèi)存的方式是指相互通信的進程間設(shè)有公共內(nèi)存,一組進程向公共內(nèi)存中寫,另一組進程從公共內(nèi)存中讀,通過這種方式實現(xiàn)兩組進程間的信息交換。共享內(nèi)存是最有用的進程間通信方式,也是最快的進程間通信形式。兩個不同進程A、B共享內(nèi)存本質(zhì)上是同一塊物理內(nèi)存被映射到進程A、B各自的進程地址空間。進程A可以即時看到進程B對共享內(nèi)存中數(shù)據(jù)段的更新。上一頁下一頁返回11.3Contiki系統(tǒng)移植實例11.3.3Cont11.3Contiki系統(tǒng)移植實例1.實例要求實現(xiàn)兩個進程:一個count進程,另一個print進程。在count進程中添加LED燈翻轉(zhuǎn)效果,以便觀看count進程是否執(zhí)行,同時設(shè)置一個靜態(tài)變量count,只要count的值發(fā)生變化,print進程可即時看到count數(shù)值的變化,并將其通過串口顯示出來。2.實例代碼兩個進程的實現(xiàn)源碼如下:staticprocess_event_tevent_data_ready;/*定義count進程和print進程*/PROCESS(count_process,"countprocess");PROCESS(print_process,"printprocess");/*將兩個進程設(shè)置成自啟動*/上一頁下一頁返回11.3Contiki系統(tǒng)移植實例1.實例要求上一頁下11.3Contiki系統(tǒng)移植實例AUTOSTART_PROCESSES(&count_process,&print_process);PROCESS_THREAD(count_process,ev,data)//count進程執(zhí)行體{staticstructetimercount_timer;staticintcount=0;PROCESS_BEGIN();event_data_ready=process_alloc_event();etimer_set(&count_timer,CLOCK_SECOND/2);//設(shè)置定時器2sleds_init();//LED初始化leds_on(1);//點亮LED1while(1){上一頁下一頁返回11.3Contiki系統(tǒng)移植實例AUTOSTART_P11.3Contiki系統(tǒng)移植實例PROCESS_WAIT_EVENT_UNTIL(ev==PROCESS_EVENT_TIMER);//2s結(jié)束后leds_toggle(LEDS_ALL);//LED反轉(zhuǎn)count++;//將event_data_ready事件?count數(shù)據(jù)傳遞給print進程process_post(&print_process,event_data_ready,&count);etimer_reset(&count_timer);}//復位count_timer,相當于繼續(xù)延時2sPROCESS_END();}PROCESS_THREAD(print_process,ev,data)//打印進程執(zhí)行體{PROCESS_BEGIN();上一頁下一頁返回11.3Contiki系統(tǒng)移植實例PROCESS_WAI11.3Contiki系統(tǒng)移植實例while(1){PROCESS_WAIT_EVENT_UNTIL(ev==event_data_ready);printf("counteris%d\n\r",(*(int*)data));}PROCESS_END();}3.實例結(jié)果(1)正確連接JLINK仿真器、串口線到PC機和STM32開發(fā)板,在PC機上打開串口調(diào)試助手或者超級終端,設(shè)置接收的波特率為115200。(2)在IARforARM開發(fā)環(huán)境中打開例程文件(或雙擊event-post.eww文件)。上一頁下一頁返回11.3Contiki系統(tǒng)移植實例while(1){上一11.3Contiki系統(tǒng)移植實例(3)通過5V電源適配器給STM32開發(fā)板通電,然后打開J-FlashARM軟件,單擊“Target”->“Connect”,連接成功后,LOG窗口會提示“ConnectedSuccessfully”,接下來通過IAR選擇“Project”->“Downloadanddebug”,將程序下載到STM32開發(fā)板中。(4)下載完后可以單擊“Debug”->“Go”讓程序全速運行;也可以將STM32開發(fā)板重新上電或者按下復位按鈕讓剛才下載的程序重新運行。(5)程序成功運行后,在串口顯示區(qū)顯示:StartingContiki2.6onSTM32F10xautostart_start:startingprocess'countprocess'autostart_start:startingprocess'printprocess'上一頁下一頁返回11.3Contiki系統(tǒng)移植實例(3)通過5V電11.3Contiki系統(tǒng)移植實例counteris1counteris2counteris3counteris4counteris5counteris6counteris7….上一頁下一頁返回11.3Contiki系統(tǒng)移植實例counteris11.3Contiki系統(tǒng)移植實例11.3.4按鍵位檢測從第4章的實例可知,按下K1鍵或者K2鍵就會觸發(fā)1個按鍵中斷服務程序,那么在本實例中,其實也是一樣的,因為按鍵中斷服務程序是最底層的程序,基于Contiki系統(tǒng)要實現(xiàn)按鍵實驗,也脫離不開最底層的按鍵中斷服務程序,Contiki系統(tǒng)沒有中斷,而是各種各樣的事件,當某一事件來臨時,就會執(zhí)行相應的進程代碼。1.實例要求實現(xiàn)一個buttons_test進程,在buttons_test進程中實現(xiàn)按鍵位操作即可。2.實例代碼buttons_test進程關(guān)鍵源碼如下:上一頁下一頁返回11.3Contiki系統(tǒng)移植實例11.3.4按鍵位檢11.3Contiki系統(tǒng)移植實例PROCESS(buttons_test_process,"ButtonTestProcess");//buttons_test進程的定義AUTOSTART_PROCESSES(&buttons_test_process);//button_test進程設(shè)置成自啟動PROCESS_BEGIN();while(1){PROCESS_WAIT_EVENT_UNTIL(ev==sensors_event);//在sensors_event到來之前將此進程掛起sensor=(structsensors_sensor*)data;if(sensor==&button_1_sensor){//如果檢測到按鈕1PRINTF("Button1Press\n\r");上一頁下一頁返回11.3Contiki系統(tǒng)移植實例PROCESS(but11.3Contiki系統(tǒng)移植實例leds_toggle(LEDS_1);//翻轉(zhuǎn)D4}if(sensor==&button_2_sensor){//如果檢測到按鈕2PRINTF("Button2Press\n\r");leds_toggle(LEDS_2);//翻轉(zhuǎn)D5}}PROCESS_END();為了更好地理解這個按鍵流程,給出按鍵進程部分流程,如圖11-11所示。上一頁下一頁返回11.3Contiki系統(tǒng)移植實例leds_toggleContiki-系統(tǒng)移植課件11.3Contiki系統(tǒng)移植實例3.實例結(jié)果(1)正確連接JLINK仿真器、串口線到PC機和STM32開發(fā)板,在PC機上打開串口調(diào)試助手或者超級終端,設(shè)置接收的波特率為115200。(2)在IARforARM開發(fā)環(huán)境中打開例程文件(或雙擊key-detect.eww文件)。(3)通過5V電源適配器給STM32開發(fā)板通電,然后打開J-FlashARM軟件,單擊“Target”->“Connect”,連接成功后,LOG會提示“ConnectedSuccessfully”,接下來通過IAR選擇“Project”->“Downloadanddebug”將程序下載到STM32開發(fā)板中。(4)下載完后可以單擊“Debug”->“Go”讓程序全速運行;也可以將STM32開發(fā)板重新上電或者按下復位按鈕讓剛才下載的程序重新運行。上一頁下一頁返回11.3Contiki系統(tǒng)移植實例3.實例結(jié)果上一頁下11.3Contiki系統(tǒng)移植實例(5)程序成功運行后,在STM32開發(fā)板上按下K1鍵和K2鍵,可觀察到D4和D5燈點亮,同時在串口顯示區(qū)有如下顯示:StartingContiki2.6onSTM32F10xautostart_start:startingprocess'ButtonTestProcess'Button1PressButton2Press串口顯示區(qū)的“StartingContiki2.6onSTM32F10x”表明Contiki-OS成功移植到STM32開發(fā)板中,“Button1Press”表明button_test進程成功被調(diào)用,并執(zhí)行相應按鍵檢測操作。上一頁下一頁返回11.3Contiki系統(tǒng)移植實例(5)程序成功運行后,11.3Contiki系統(tǒng)移植實例11.3.5Timer實例Contiki系統(tǒng)提供一組timer庫,除用于Contiki系統(tǒng)本身,也可用于應用程序。timer庫包含一些實用功能,例如檢查一個時間周期是否過期、在預定時間將系統(tǒng)從低功耗模式喚醒以及實時任務的調(diào)度。定時器也可在應用程序中使用,以使系統(tǒng)與其他任務協(xié)調(diào)工作,或使系統(tǒng)在恢復運行前的一段時間內(nèi)進入低功耗模式。Contiki有一個時鐘模塊和一組定時器模塊:timer、stimer、ctimer、etimer、rtimer。其中etimer庫主要用于調(diào)度事件按預定時間周期來觸發(fā)Contiki系統(tǒng)的進程,其可使進程等待一段時間,以便于系統(tǒng)的其他功能運行,或在這段時間讓系統(tǒng)進入低功耗模式。上一頁下一頁返回11.3Contiki系統(tǒng)移植實例11.3.5Time11.3Contiki系統(tǒng)移植實例etimer提供時間事件,etimer成員的timer包含起始時刻和間隔時間,故此timer只記錄到期時間。通過比較到期時間和新的當前時鐘,從而判斷是否到期。當etimer時間到期,會給相應的進程傳遞PROCEE_EVENT_TIMER事件,從而使該進程運行。Contiki系統(tǒng)有一個全局靜態(tài)變量timerlist,保存各etimer,其是etimer鏈,從第一個etimer到最后的NULL。1.實例要求應用etimer定時器模塊,實現(xiàn)一個clock_test進程,需要在clock_test的執(zhí)行體中實現(xiàn)定時器的操作。2.實例代碼clock_test進程關(guān)鍵源碼如下:PROCESS(clock_test_process,"Clocktestprocess");上一頁下一頁返回11.3Contiki系統(tǒng)移植實例etimer提供時間11.3Contiki系統(tǒng)移植實例AUTOSTART_PROCESSES(&clock_test_process);PROCESS_BEGIN();etimer_set(&et,2*CLOCK_SECOND);PROCESS_YIELD();printf("Clocktickandetimertest,1sec(%uclockticks):\n\r",CLOCK_SECOND);i=0;etimer_reset(&et);sec=clock_seconds();printf("%luseconds\n\r",sec);leds_toggle(LEDS_GREEN);i++;}上一頁下一頁返回11.3Contiki系統(tǒng)移植實例AUTOSTART_P11.3Contiki系統(tǒng)移植實例printf("Done!\n\r");PROCESS_END();3.實例結(jié)果(1)正確連接JLINK仿真器、串口線到PC機和STM32開發(fā)板,在PC機上打開串口調(diào)試助手或者超級終端,設(shè)置接收的波特率為115200。(2)在IARforARM開發(fā)環(huán)境中打開例程文件(或雙擊timer-test.eww文件)。(3)通過5V電源適配器給STM32開發(fā)板通電,然后打開J-FlashARM軟件,單擊“Target”->“Connect”,連接成功后,LOG窗口會提示“ConnectedSuccessfully”,接下來通過IAR選擇“Project”->“Downloadanddebug”將程序下載到STM32開發(fā)板中。上一頁下一頁返回11.3Contiki系統(tǒng)移植實例printf("Don11.3Contiki系統(tǒng)移植實例(4)下載完后可以單擊“Debug”->“Go”讓程序全速運行;也可以將STM32開發(fā)板重新上電或者按下復位按鈕讓剛才下載的程序重新運行。(5)程序成功運行后,此時在串口顯示區(qū)有如下實驗結(jié)果:StartingContiki2.6onSTM32F10xautostart_start:startingprocess'Clocktestprocess'Clocktickandetimertest,1sec(100clockticks):300ticks400ticks500ticks600ticks700ticks上一頁下一頁返回11.3Contiki系統(tǒng)移植實例(4)下載完后可以單擊11.3Contiki系統(tǒng)移植實例800ticks900ticks1000ticks1100ticks1200ticksClocksecondstest(5s):17seconds22seconds27seconds32seconds37seconds上一頁下一頁返回11.3Contiki系統(tǒng)移植實例800ticks上一11.3Contiki系統(tǒng)移植實例42seconds47seconds52seconds57seconds62secondsDone!串口顯示“StartingContiki2.6onSTM32F10x”表明Contiki-OS成功移植到STM32開發(fā)板。上一頁下一頁返回11.3Contiki系統(tǒng)移植實例42seconds上11.3Contiki系統(tǒng)移植實例11.3.6LCD屏顯示實例基于Contiki系統(tǒng)的LCD屏顯示,主要分成兩部分:LCD屏驅(qū)動的實現(xiàn)、LCD屏顯示進程的實現(xiàn)。LCD屏驅(qū)動的實現(xiàn)參見本書第6.4節(jié)實例內(nèi)容,本節(jié)主要實現(xiàn)LCD屏顯示進程。1.實例要求實現(xiàn)LCD屏驅(qū)動和LCD屏顯示進程,讓LCD屏分行顯示不同顏色的“ThisisaLCDexample”。2.實例代碼下面是LCD屏顯示進程的實現(xiàn)源碼:PROCESS(lcd_process,"lcdprocess");//定義LCD屏顯示進程AUTOSTART_PROCESSES(&lcd_process);//將LCD屏顯示進程設(shè)置成自動啟動上一頁下一頁返回11.3Contiki系統(tǒng)移植實例11.3.6LCD11.3Contiki系統(tǒng)移植實例PROCESS_THREAD(lcd_process,ev,data)//進程執(zhí)行體{PROCESS_BEGIN();char*tail="LCDprocessexample";char*head="Contiki2.6";Display_Clear_Rect(0,0,LCDW,12,0xffff);//將LCD屏頂端的160*12的區(qū)域清屏成白色Display_ASCII6X12((LCDW-strlen(head)*6)/2,1,0x0000,head);//頂端居中顯示head的內(nèi)容//以不同行?不同顏色顯示ThisisaLCDexample2017.10.17*/Display_ASCII6X12(1,24,0xf800,"This");Display_ASCII6X12(1,36,0x07e0,"is");上一頁下一頁返回11.3Contiki系統(tǒng)移植實例PROCESS_THR11.3Contiki系統(tǒng)移植實例Display_ASCII6X12(1,48,0x0f0f0,"a");Display_ASCII6X12(1,60,0xffff,"LCD");Display_ASCII6X12(1,72,0x0000,"example");Display_ASCII6X12(1,84,0x0000,"2017.10.17");//將LCD屏的底部160*12的區(qū)域清屏成白色Display_Clear_Rect(0,LCDH-12,LCDW,12,0xffff);//在LCD屏底部居中黑色字體顯示LCDprocessexampleDisplay_ASCII6X12((LCDW-strlen(tail)*6)/2,LCDH-12,0x0000,tail);//函數(shù)實現(xiàn)參見6.4節(jié)PROCESS_END();}上一頁下一頁返回11.3Contiki系統(tǒng)移植實例Display_ASC11.3Contiki系統(tǒng)移植實例3.實例結(jié)果(1)正確連接JLINK仿真器、串口線到PC機和STM32開發(fā)板,在PC機上打開串口調(diào)試助手或者超級終端,設(shè)置接收的波特率為115200。(2)在IARforARM開發(fā)環(huán)境中打開例程文件(或雙擊lcd.eww文件)。(3)通過5V電源適配器給STM32開發(fā)板通電,然后打開J-FlashARM軟件,單擊“Target”->“Connect”,連接成功后,LOG窗口會提示“ConnectedSuccessfully”,接下來通過IAR選擇“Project”->“Downloadanddebug”將程序下載到STM32開發(fā)板中。上一頁下一頁返回11.3Contiki系統(tǒng)移植實例3.實例結(jié)果上一頁下11.3Contiki系統(tǒng)移植實例(4)下載完后可以單擊“Debug”->“Go”讓程序全速運行;也可以將STM32開發(fā)板重新上電或者按下復位按鈕讓剛才下載的程序重新運行。(5)程序成功運行后,可觀察到STM32開發(fā)板的LCD屏顯示如圖11-12所示內(nèi)容。上一頁返回11.3Contiki系統(tǒng)移植實例(4)下載完后可以單擊圖11-1Contiki移植開發(fā)套件返回圖11-1Contiki移植開發(fā)套件返回圖11-2無線節(jié)點調(diào)試擴展接口板(左)和JLINK仿真器(右)返回圖11-2無線節(jié)點調(diào)試擴展接口板(左)和JLINK仿圖11-3模式一(左)和模式二(右)返回圖11-3模式一(左)和模式二(右)返回圖11-4模式一(左)和模式二(右)返回圖11-4模式一(左)和模式二(右)返回圖11-5調(diào)試接口板的連接返回圖11-5調(diào)試接口板的連接返回圖11-6創(chuàng)建工程testSample返回圖11-6創(chuàng)建工程testSample返回圖11-7testSample工程區(qū)文件返回圖11-7testSample工程區(qū)文件返回圖11-8testSample組目錄返回圖11-8testSample組目錄返回圖11-9testSample工程目錄文件結(jié)構(gòu)返回圖11-9testSample工程目錄文件結(jié)構(gòu)返回圖11-10添加頭文件路徑和宏定義返回圖11-10添加頭文件路徑和宏定義返回圖11-11按鍵進程部分流程返回圖11-11按鍵進程部分流程返回圖11-12基于Contiki系統(tǒng)的LCD屏顯示返回圖11-12基于Contiki系統(tǒng)的LCD屏顯示第11章Contiki系統(tǒng)移植11.1認識Contiki開發(fā)套件11.2搭建Contiki開發(fā)環(huán)境11.3Contiki系統(tǒng)移植實例返回第11章Contiki系統(tǒng)移植11.1認識Co11.1認識Contiki開發(fā)套件進行6LoWPAN嵌入式物聯(lián)網(wǎng)應用開發(fā),需要相關(guān)硬件和軟件。在硬件方面,本章基于聯(lián)創(chuàng)中控(北京)科技有限公司自主研發(fā)的UI-IOT-IPv6教學科研平臺,用于了解6LoWPAN開發(fā)套件各個模塊的硬件資源、使用說明及各種運行模式,同時介紹6LoWPAN嵌入式物聯(lián)網(wǎng)應用開發(fā)環(huán)境的搭建方法。11.1.1Contiki開發(fā)套件介紹UI-IOT-IPv6平臺在硬件設(shè)計上分成兩個區(qū)域:移動互聯(lián)網(wǎng)網(wǎng)關(guān)板、物聯(lián)網(wǎng)無線節(jié)點板,其中物聯(lián)網(wǎng)無線節(jié)點板采用UI-WSN系列物聯(lián)網(wǎng)套件,如圖11-1和圖11-2所示。11.1.2跳線設(shè)置及硬件連接(1)無線協(xié)調(diào)器直接安裝到實驗主板對應插槽中,跳線使用如圖11-3所示。下一頁返回11.1認識Contiki開發(fā)套件進行6LoWPAN11.1認識Contiki開發(fā)套件①模式一:調(diào)試STM32F103,STM32F103串口連接到網(wǎng)關(guān)(默認)。②模式二:調(diào)試STM32F103,STM32F103串口連接到調(diào)試擴展板。(2)無線節(jié)點板上提供了兩組跳線用于選擇調(diào)試不同的處理器,跳線使用如圖11-4所示。①模式一:調(diào)試CC2530,CC2530串口連接到調(diào)試擴展板。②模式二:調(diào)試STM32F103,STM32F103串口連接到調(diào)試擴展板(默認)。(3)通過調(diào)試接口板的轉(zhuǎn)接,無線節(jié)點可以使用仿真器進行調(diào)試,同時還可以使用RS232串口。調(diào)試接口板的連接如圖11-5所示。上一頁返回11.1認識Contiki開發(fā)套件①模式一:調(diào)試S11.2搭建Contiki開發(fā)環(huán)境11.2.1Contiki源代碼結(jié)構(gòu)Contiki是一個高度可移植的操作系統(tǒng),它的設(shè)計就是為了獲得良好的可移植性,因此其源代碼的組織很有特點。下面簡單介紹Contiki的源代碼組織結(jié)構(gòu)以及各部分代碼的作用。打開Contiki源文件目錄,可以看到主要有以下部分。1.appsapps目錄下是一些應用程序,例如ftp、shell、webserver等,在項目程序開發(fā)過程中可以直接使用。使用這些應用程序的方式為,在項目的Makefile中,定義APPS=[應用程序名稱]。在以后的示例中會具體看到如何使用apps。下一頁返回11.2搭建Contiki開發(fā)環(huán)境11.2.1Con11.2搭建Contiki開發(fā)環(huán)境2.corecore目錄下是Contiki的核心源代碼,包括網(wǎng)絡(net)、文件系統(tǒng)(cfs)、外部設(shè)備(dev)、鏈接庫(lib)等,并且包含了時鐘、I/O、ELF裝載器、網(wǎng)絡驅(qū)動等的抽象。3.cpucpu目錄下是Contiki目前支持的微處理器,例如arm、avr、msp430等。如果需要支持新的微處理器,可以在這里添加相應的源代碼。4.docdoc目錄是Contiki幫助文檔目錄,對Contiki應用程序開發(fā)很有參考價值。使用前需要先用Doxygen進行編譯。上一頁下一頁返回11.2搭建Contiki開發(fā)環(huán)境2.core上一頁11.2搭建Contiki開發(fā)環(huán)境5.examplesexamples目錄下是針對不同平臺的示例程序。6.platformplatform目錄下是Contiki支持的硬件平臺,例如mx231cc、micaz、sky、win32等。Contiki的平臺移植主要在這個目錄下完成。這一部分的代碼與相應的硬件平臺相關(guān)。7.toolstools目錄下是開發(fā)過程中常用的一些工具,例如CFS相關(guān)的makefsdata、網(wǎng)絡相關(guān)的tunslip、模擬器Cooja和Mspsim等。為了獲得良好的可移植性,除了CPU和platform中的源代碼與硬件平臺相關(guān)以外,其他目錄中的源代碼都盡可能與硬件無關(guān)。編譯時,根據(jù)指定的平臺來鏈接對應的代碼。上一頁返回11.2搭建Contiki開發(fā)環(huán)境5.example11.2搭建Contiki開發(fā)環(huán)境11.2.2Contiki系統(tǒng)移植過程嵌入式的操作系統(tǒng)在硬件平臺上的移植,一直以來讓很多新手望而卻步,因為移植一個操作系統(tǒng)比寫一個C語言程序復雜多了。那么究竟怎樣移植Contiki系統(tǒng)到STM32上呢?移植過程中需要修改源碼的哪個部分呢?通過下面的分析,讀者就知道了。Contiki采用事件驅(qū)動機制,通常有兩種方法產(chǎn)生事件:一是通過時鐘定時,定時時間到就產(chǎn)生一個事件;二是通過某種中斷,某個中斷發(fā)生,就產(chǎn)生某個事件,例如外部中斷。由于Contiki是非搶占的操作系統(tǒng),所以移植時時鐘一定是必要的,移植Contiki系統(tǒng)的重點就在SysTick上。下面以一個實例詳細介紹Contiki系統(tǒng)移植的整個過程。下一頁返回11.2搭建Contiki開發(fā)環(huán)境11.2.2Con11.2搭建Contiki開發(fā)環(huán)境1.創(chuàng)建IARforARM空工程將本書配套的軟件資源包中“03-系統(tǒng)代碼”目錄下的contiki-2.6解壓后整個文件夾拷貝到PC機任意目錄下,比如D:\根目錄,進入Contiki系統(tǒng)源碼的contiki-2.6\zonesion\example\iar目錄下,創(chuàng)建testSample目錄,然后在testSample目錄下創(chuàng)建一個IARforARM空工程,工程名稱以及工作空間的名稱為“testSample”,過程如下:(1)創(chuàng)建一個空的ARM工程,將之命名為“testSample”。單擊“開始”->“程序”->“IARSystems”->“IAREmbeddedWorkbenchforARM5.41”->“IAREmbeddedWorkbench”,單擊“Project”選項,選擇“CreateNewProject”,創(chuàng)建工程,如圖11-6所示。上一頁下一頁返回11.2搭建Contiki開發(fā)環(huán)境1.創(chuàng)建IAR11.2搭建Contiki開發(fā)環(huán)境(2)保存工作空間并將之命名為“testSample”。單擊“File”->“Saveworkspace”,保存工程,創(chuàng)建完工程后,在testSample工程目錄下即可看到新增了幾個文件,如圖11-7所示。2.給工程添加組目錄在工程名上單擊鼠標右鍵,選擇“Add”->“AddGroup”,填寫組目錄名稱。按照添加組目錄的方法,依次添加如圖11-8所示的組目錄結(jié)構(gòu)。添加子目錄的方法,以core目錄下的子目錄sys為例,只要在core文件夾上單擊鼠標右鍵,選擇“Add”->“Group”即可。3.在組目錄里添加.c等文件(1)添加Contiki系統(tǒng)文件。在工程sys目錄名上單擊鼠標右鍵。選擇“Add”->“AddFiles...”。添加Contiki的系統(tǒng)文件:autostart.c、ctimer.c、etimer.c、process.c、timer.c。這幾個文件位于Contiki系統(tǒng)源碼的contiki-2.6\core\sys目錄下。上一頁下一頁返回11.2搭建Contiki開發(fā)環(huán)境(2)保存工作空間并11.2搭建Contiki開發(fā)環(huán)境(2)添加STM32官方庫文件。將STM32F10x_StdPeriph_Lib_V3.5.0(ST公司提供的STM32標準庫文件,3.5版本庫放在Contiki系統(tǒng)源碼的contiki-2.6\cpu\arm\stm32f10x目錄下。(3)在工程的cpu組目錄下添加Contiki系統(tǒng)時鐘文件clock.c,該文件所在目錄為:contiki-2.6\cpu\arm\stm32f10x。4.創(chuàng)建contiki-main.c文件移植Contiki系統(tǒng)所需要的Contiki系統(tǒng)文件、STM32官方庫所需文件都添加完畢后,若想讓程序執(zhí)行就必須有main()函數(shù),因為1~3步添加的都是一些相應的支持文件,下面在工程的zonesion\proj組目錄下新建一個contiki-main.c文件,創(chuàng)建方法如下:上一頁下一頁返回11.2搭建Contiki開發(fā)環(huán)境(2)添加STM311.2搭建Contiki開發(fā)環(huán)境單擊“File”->“New”->“File”或者直接單擊“File”下面的“NewDocument”按鈕創(chuàng)建一個空白文件。按下“Ctrl+S”組合鍵保存,保存路徑選擇當前工程testSample根目錄,保存文件名為“contiki-main.c”。然后將已創(chuàng)建的contiki-main.c文件添加到工程的zonesion\proj組目錄下。添加完成后整個工程目錄結(jié)構(gòu)如圖11-9所示。添加完.c文件后,就需要配置工程,如硬件芯片型號選擇、頭文件路徑等。配置方法及步驟如下:在工程名上單擊鼠標右鍵,選擇“Options”->“GeneralOptions”配置頁面,勾選“Device”,然后選擇“ST”->“STM32F10xxB”。在“Debugger”配置頁面,將“Driver”選項設(shè)置成“J-Linker/J-Trace”。配置完工程選項之后,就需要在工程配置選項里面添加頭文件路徑和宏定義,否則在編譯.c文件時就找不到相應頭文件,會出現(xiàn)編譯錯誤。上一頁下一頁返回11.2搭建Contiki開發(fā)環(huán)境單擊“File”->11.2搭建Contiki開發(fā)環(huán)境添加方法:將頭文件路徑復制到“C/C++Compiler”配置選項中的“Additionnalincludederectories”輸入框中;將宏定義添加到“Definedsymbols”輸入框中,如圖11-10所示。5.系統(tǒng)時鐘移植沒有系統(tǒng)時鐘,系統(tǒng)就跑不起來,在本次移植過程中并不需要修改clock.c文件,因為該clock.c文件已修改好,直接拿過來使用即可。下面對clock.c源碼進行相應解析。1)系統(tǒng)時鐘初始化系統(tǒng)時鐘初始化是整個STM32工作的核心,根據(jù)STM32的主頻,以及CLOCK_SENCOND的參數(shù),可以設(shè)置系統(tǒng)時鐘中斷的時間。上一頁下一頁返回11.2搭建Contiki開發(fā)環(huán)境添加方法:將頭文件路11.2搭建Contiki開發(fā)環(huán)境2)系統(tǒng)時鐘中斷處理函數(shù)要讓Contiki操作系統(tǒng)運行起來,關(guān)鍵就是啟動系統(tǒng)時鐘,對應到Contiki系統(tǒng)的進程就是啟動etimer進程。etimer_process由Contiki系統(tǒng)提供,這里只需對系統(tǒng)時鐘進行初始化并定時更新系統(tǒng)時鐘(用戶自定義current_clock),并判斷etimer的下一個定時時刻是否已到(通過比較current_clock與etimer的定時時刻來判定)。如果時鐘等待序列中有等待時鐘的進程,那么就調(diào)度etimer進程執(zhí)行,通過其來喚醒相關(guān)進程。6.實驗結(jié)果系統(tǒng)移植結(jié)束后,將程序燒寫到STM32無線節(jié)點開發(fā)板上驗證Contiki系統(tǒng)是否移植成功。具體步驟為:上一頁下一頁返回11.2搭建Contiki開發(fā)環(huán)境2)系統(tǒng)時鐘中斷處理11.2搭建Contiki開發(fā)環(huán)境(1)正確連接JLINK仿真器、串口線到PC機和STM32開發(fā)板(見圖11-5),在PC機上打開串口調(diào)試助手或者超級終端,設(shè)置接收的波特率為115200。(2)在IARforARM開發(fā)環(huán)境中打開移植工程文件(或雙擊testSample.eww文件)。(3)通過5V電源適配器給STM32開發(fā)板通電(將STM32電源開關(guān)撥到“ON”,讓STM32開發(fā)板上電,下同),然后打開J-FlashARM軟件,單擊“Target”->“Connect”,連接成功后,LOG窗口會提示“ConnectedSuccessfully”,接下來通過IAR選擇“Project”->“Downloadanddebug”,將程序下載到STM32開發(fā)板中。上一頁下一頁返回11.2搭建Contiki開發(fā)環(huán)境(1)正確連接JL11.2搭建Contiki開發(fā)環(huán)境(4)下載完后可以單擊“Debug”->“Go”讓程序全速運行;也可以將STM32開發(fā)板重新上電或者按下復位按鈕讓剛才下載的程序重新運行。(5)程序成功運行后,若在串口顯示區(qū)顯示“HelloWorld!”,即表明Contiki系統(tǒng)已成功移植到STM32開發(fā)板。上一頁返回11.2搭建Contiki開發(fā)環(huán)境(4)下載完后可以單11.3Contiki系統(tǒng)移植實例本節(jié)通過6個實例進一步介紹基于Contiki系統(tǒng)的嵌入式物聯(lián)網(wǎng)應用的關(guān)鍵技術(shù)。11.3.1LED控制基于Contiki系統(tǒng),學習使用Contiki進程控制LED燈以及掌握其相關(guān)原理。1.實例要求實現(xiàn)一個blink_process進程,該進程可使STM32開發(fā)板上的D4、D5燈閃爍。LED燈的顯示一共有3種狀態(tài):D4點亮、D5點亮、D4和D5同時點亮。2.實例代碼blink_process進程定義在工程根目錄下的blink.c文件中,源代碼如下:下一頁返回11.3Contiki系統(tǒng)移植實例本節(jié)通過6個實例進11.3Contiki系統(tǒng)移植實例#include"contiki.h"#include"dev/leds.h"#include<stdio.h>staticstructetime

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論