1. 打開S+core IDE 以eCos創造一個專案
2. 於專案目錄下,找到default_install資料夾將它刪除
3. 打開eCos Configuration Tool
4. 點選Build > packages
5. 增加 file IO跟IOB support for Score SPCE3200兩個packages
6. 命名為default.ecc存於eCos專案目錄下編譯
7. 運行程式下載至開發版上觀察結果
#include <cyg/hal/hal_arch.h> // CYGNUM_HAL_STACK_SIZE_TYPICAL
#include <cyg/kernel/kapi.h>
#include <cyg/fileio/fileio.h>
#include <stdio.h>
#include <stdlib.h>
#include <cyg/io/spce3200_iob.h>
#include <cyg/infra/testcase.h> // test macros
#include <unistd.h>
#define C_IOB2_OUT_EN 0x00000400 // P_IOB_GPIO_SETUP
#define C_IOB3_OUT_EN 0x00000800 // P_IOB_GPIO_SETUP
#define C_IOB4_OUT_EN 0x00001000 // P_IOB_GPIO_SETUP
#define C_IOB5_OUT_EN 0x00002000 // P_IOB_GPIO_SETUP
//===================================================
主要執行緒,完成LED跑馬燈功能
//===================================================
void Run_LED(cyg_addrword_t data)
{
cyg_int32 fd_LED; // IOB驅動標識符
cyg_uint32 Key;
printf(" RunLED thread start\n");
fd_LED = open("/dev/iob", O_WRONLY | O_NONBLOCK); // 打開IOB驅動
Key = C_IOB2_OUT_EN
| C_IOB3_OUT_EN
| C_IOB4_OUT_EN
| C_IOB5_OUT_EN
;
cyg_fs_fsetinfo(fd_LED, CYGNUM_DEVS_IOB_SPCE3200_ATTRIB, &Key, 4); // 設置IOB為輸出
Key = 0x4; // '00000100'==>LED1(IOB2)亮
while(1)
{
write(fd_LED, &Key, 1); // 寫IOB輸出值
printf(" Key = %d\n", Key);
Key = Key << 1;
if(Key > 0x3C)
Key = 0x4;
cyg_thread_delay(50); // 延時
}
}
cyg_uint8 Run_LED_Stack[4096]; // 執行緒用到的堆棧
cyg_handle_t Run_LED_Handle; // 執行緒控制碼
cyg_thread Run_LED_Info; // 執行緒信息結構體
//====================================================
void cyg_user_start(void)
{
cyg_thread_create( 20, // 執行緒優先級
Run_LED, // 執行緒函數
0, // 執行緒參數
"light_LED", // 執行緒名稱
(void *)Run_LED_Stack, // 執行緒堆棧基址
4096, // 執行緒堆疊大小
&Run_LED_Handle, // 返回執行緒控制碼
&Run_LED_Info // 返回執行緒信息結構體
);
cyg_thread_resume( Run_LED_Handle); // 啟動執行緒
}