• 沒有找到結果。

跑馬燈實驗 实验一 1 eCos 基礎實驗

N/A
N/A
Protected

Academic year: 2022

Share "跑馬燈實驗 实验一 1 eCos 基礎實驗"

Copied!
5
0
0

加載中.... (立即查看全文)

全文

(1)

1 eCos 基礎實驗

Tel:010-62981113-2940/2942/2940/2945 http://www.unsp.com

E-mail:unsp@sunplus.com.cn 3

1 eCos 基礎實驗

实验一 跑馬燈實驗

【實驗目的】

1、 熟悉 eCos 下編程方法;

2、 掌握線程的創建、啟動方法。

【實驗設備】

1、 裝有 Windows 系統和 S+core IDE 集成開發環境的 PC 機一台;

2、 淩陽 SPCE3200 嵌入式精簡開發板一套;

3、 本實驗用到開發板的模組有:SPCE3200 模組,LED 燈電路模組。

【實驗要求】

1、 實現功能:使用設備檔案系統,完成對 IOB 口輸出控制;

2、 實驗現象:實現跑馬燈功能,LED1~LED4 不停迴圈閃爍。

【實驗原理】

本實驗是 eCos 作業系統下的應用程式常式。eCos 作業系統以庫的形式,與應用程式進行靜態 編譯,因此首先要利用 eCos config tool 生成 eCos 庫,然後才能編譯 eCos 應用程式。在 eCos 庫中已 完成相關驅動的編寫,如 IOB、IOA、4×4Key 等。本書屬於 eCos 三本書的最後一本,之前的兩本 書分別是 eCos 傻瓜書、SPCE3200 嵌入式 eCos 系統驅動開發。因此對於一些前面已有的內容,如 eCos 環境配置、eCos 驅動編寫,這裏不再贅述。

eCos 應用程式入口函數是 cyg_user_start(),在這個函數中需要做的事情有:

1、 創建線程,根據需要創建一個或多個;

2、 啟動線程,創建的每個線程都需要啟動一次;

創建線程需要調用 API 函數 cyg_therad_create(),調用方法如下:

【函數原形】void cyg_thread_create(

cyg_addrword_t sched_info, cyg_thread_entry_t *entry, cyg_addrword_t entry_data, char * name,

(2)

實驗指導書(SPCE3200 精簡開發板——eCos 平臺篇)

4 Tel:010-62981113-

void * stack_base, cyg_ucount32 stack_size, cyg_handle_t * handle, cyg_thread * thread);

【功 能】創建一個線程

【參 數】 sched_info : 設置線程優先順序,範圍 0~31。其中優先順序 0 優先順序別最高 entry : 線程的入口函數

entry_data : 線程入口函數的參數 name : 線程的識別字

stack_base : 線程堆疊的基底位址 stack_size : 線程堆疊的大小 handle : 線程的返回控制碼 thread : 線程資訊的返回指標

【頭 文 件】使用本函數需要包含<cyg/kernel/kapi.h>

注:本函數可以在初始化或線程中調用。

創建完線程以後,預設線程狀態是掛起態,因此需要調用 cyg_thread_resume()恢 復掛起的線程,調用方法如下:

【函數原形】cyg_thread_resume(cyg_handle_t thread);

【功 能】可以在初始化、線程或 DSR 中調用,使線程繼續執行。

【參 數】cyg_handle_t thread---創建線程時返回的線程控制碼。

【頭 文 件】使用本函數需要包含<cyg/kernel/kapi.h>

eCos 完成線程的創建後,開始線程調度並跳越到各個線程的入口函數執行。在 eCos 系統中,

所有設備都是以檔案的形式被打開並進行讀/寫操作的,本實驗中使用 POSIX 相容的檔案操作介面函 數對底層設備進行操作。POSIX 是 Portable Operating System Interface for UNIX 的首字母縮寫詞,是 一套 IEEE 和 ISO 標準。這個標準定義了應用程式和作業系統之間的一個介面。只要保證他們的程 式設計的符合 POSIX 標準,開發人員就能確信他們的程式可以和支援 POSIX 的作業系統互聯。這 樣的作業系統包括大部分版本的 UNIX。 POSIX 標準現在由 IEEE 的一個分支機搆 Portable Applications Standards Committee(PASC)維護。POSIX 常用的介面函數如下:

【函數原型】int open(const char *path, int oflag, ...);

【功 能】打開名為 path 的檔案或設備,成功打開後返回檔案控制碼。

【參 數】path : 檔案路徑或設備名,如 IOB 設備的名稱為“/dev/iob"

2940/2942/2944/2945 http://www.unsp.com E-mail:unsp@sunplus.com.cn

(3)

1 eCos 基礎實驗

Tel:010-62981113-2940/2942/2940/2945 http://www.unsp.com

E-mail:unsp@sunplus.com.cn 5

oflag : 打開方式。可選值可以參考表 1.1

【返 回 值】成功打開後返回檔案控制碼,失敗返回-1

【頭 文 件】使用本函數需要包含<unistd.h>和<cyg/fileio/fileio.h>

表 1.1 打開方式對照表

打開方式 意義

唯讀方式打開 O_RDONLY

只寫方式打開 O_WRONLY

讀寫方式打開(等同於 O_RDONLY | O_WRONLY)

O_RDWR

如果檔案不存在則首先創建 O_CREAT

獨佔方式打開 O_EXCL

禁止取得終端控制 O_NOCTTY

清除檔案原有內容 O_TRUNC

追加方式打開 O_APPEND

採用非阻塞檔案/O 方式 O_NONBLOCK

注:可以使用“|"運算同時使用多種打開方式。

【函數原型】int cyg_fs_fsetinfo( int fd, int key, void *buf, int len );

【功 能】向 fd 檔案發送 key 命令,命令參數由 buf 確定,命令長度由 len 確定。

【參 數】fd : 檔案控制碼 key : 命令 buf : 命令參數 len : 命令長度

【返 回 值】成功操作返回 0,否則返回錯誤

【頭 文 件】使用本函數需要包含<cyg/fileio/fileio.h>

【函數原型】ssize_t write(int fd, const void *buf, size_t nbyte);

【功 能】向檔案寫入資料

【參 數】fd : 檔案控制碼

buf : 待寫入的資料的首位址

nbyte : 待寫入資料的長度(單位:位元組)

【返 回 值】成功寫入的資料長度(單位:位元組)

(4)

實驗指導書(SPCE3200 精簡開發板——eCos 平臺篇)

6 Tel:010-62981113-

【頭 文 件】使用本函數需要包含<cyg/fileio/fileio.h>

本實驗中,需要創建一個線程來完成跑馬燈功能,線程中首先初始化IOB驅動,IOB驅動使用設 備檔案系統存取。然後定義一個變數賦初值為 0x04,向IOB驅動輸出這個變數,每輸出一次變數左 移一位元,然後延時一段時間,使LED燈依次閃爍實現跑馬燈效果。程式流程如圖 1.1。

圖 1.1 IOB 主程序流程圖

【實驗步驟】

1、 打開 S+core IDE,使用“S+core IDE eCos Project"範本採用預設設置新建一個工程;

2、 刪除工程檔案夾下的“default_install"目錄;

3、 打開 eCos config tool,使用預設範本建立源碼包,並依次添加“File IO"、“IOB support for Score SPCE3200"兩個組件包;

4、 以“default.ecc"為檔案名將 eCos 範本保存至工程目錄下並將其編譯;

5、 按照實驗原理的描述編寫程式;

6、 修改、編譯(Rebuild All)直到沒有任何錯誤;

7、 用跳線將J17 的插腳都短接,如圖 1.2:

圖 1.2開發板硬體跳線連接圖

8、 利用 EZWriter 或 RedBoot 下載程式到開發板上並脫機運行(注:eCos 工程不能用 RedBoot 除錯),觀察 LED1~LED4 依次點亮。

2940/2942/2944/2945 http://www.unsp.com E-mail:unsp@sunplus.com.cn

(5)

1 eCos 基礎實驗

Tel:010-62981113-2940/2942/2940/2945 http://www.unsp.com

E-mail:unsp@sunplus.com.cn 7

【範例路徑】

在大學計畫網站(score.unsp.com)或者 32 位元嵌入式開發系統光碟都會提供本實驗的參考程 式,路徑如下:

\Example_eCos_Board\1.Kernel_Exa\ex01_Run_LED

上課補充:

文字檔 : ASCII寫出去 只能循序存取 所以速度較慢 二進制檔 :

用二進制寫出去,比較節省空間,存取速度比較快(直接存取也可以循序存取) 檔案分成兩種 二進制檔跟文字檔

文字檔有時候能說成循序檔→變成檔案才能存起來

A:98放在DRAM電關掉就不見了,所以要存起來 要存在硬碟或FLASH Linux 或eCos把所有的I/O都當作檔案在處理,所以要處理檔案,

用檔案的基本觀念:

開檔open file→

輸入 r 輸出 w 讀取 read 寫入 write 關檔 close

線程- 台灣稱為執 緒(早期有的 稱為引線)

thread 執行緒就是要求CPU執 的最 單位(執 緒就是 個 作) 現在作業系統可執行多執行緒multithread

process行程 一個執行中的程式→一個process就是一個thread 現在的OS一個process可以很多個thread

fd稱為檔案敘述 (邏輯檔名)

參考文獻

相關文件

實際上,輸入熱泵 1kW 電能,可以獲得 2~4kW 的熱能,而電熱水器輸入 1k W 電能,至多只能獲得 1kW

為避免雜訊的干擾,一般在按鍵輸入時,會接一個電阻來將輸入端的電壓提高到高電位 (VDD),這個電阻就稱為提昇電阻。如圖中的 R(10KΩ)。常用的提昇電阻大約為 1K~100K Ω之間。在 PIC16F877 中

若電路含旁路或負載電容則 ac 負載線會疊在 Q 點上,此時 Q

選取本地根資料夾Æ右 1Æ開新檔案Æ輸入檔案名稱( index.html),Enter 鍵Æ右 1Æ設成 首頁 Æ重複〝右 1〝 本地根資料夾〞 Æ開新檔案Æ輸入檔案名稱,Enter

如圖1-16所示,NOT運算會改變邏輯準位。輸入為 HIGH (1) 時,輸出為LOW (0)。當輸入為LOW時,輸出

(一)大陸物品有條件准許輸入,應符合「大陸物品有條件准許輸入項目、輸入

寫一個程式,

雙壓力閥在何時才有壓力(訊號)輸出(A) 其中一個輸入口有壓力(訊號)輸出 (B) 經指定的一 個輸入口有壓力(訊號),並且另一個輸入口沒有壓力(訊號) (C)