新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > eCos嵌入式操作系統(tǒng)構建

eCos嵌入式操作系統(tǒng)構建

作者: 時間:2011-05-10 來源:網(wǎng)絡 收藏
5 驅(qū)動程序設計

本文引用地址:http://butianyuan.cn/article/150774.htm

  平臺抽象層完成后,接著要完成系統(tǒng)的設備驅(qū)動程序。設備驅(qū)動程序的中斷模塊分為三個層次:中斷服務程序ISR、中斷滯后服務程序DSR和中斷線程。ISR在響應中斷時立即調(diào)用,DSR由ISR發(fā)出調(diào)用請求后調(diào)用,而中斷線程為驅(qū)動程序的客戶程序。

  硬件中斷在最短的時間內(nèi)交付給ISR處理。硬件抽象層對硬件中斷源進行譯碼并調(diào)用對應的中斷ISR。ISR可以對硬件進行簡單的操作,應使ISR的處理時間盡量短。當ISR返回時,它可將自己的中斷滯后服務程序DSR放入的任務調(diào)度中,DSR可以在不妨礙調(diào)度器正常工作時安全運行。大多數(shù)情況下,DSR將在ISR執(zhí)行完成后立即運行。

  設備驅(qū)動程序一般可分為三個部分,如圖2所示。

  的所用設備驅(qū)動程序都使用設備表入口來描述。使用宏DEVTAB_ENTRY()可生成設備表入口。其格式為:

  DEVTAB_ENTRY(l, name, dep_name, handlers, init, lookup, priv)。

  l:設備表入口的“C”標識符。

  name:該設備的“C”字符串名字,在搜索設備時用到。

  dep_name:對于一個層次設備,此參數(shù)是該設備下層設備的“C”字符串名字。

  handlers:I/O函數(shù)句柄指針,由宏DEVIO_TABLE實現(xiàn)的。

  init:當eCos處于初始化階段時被調(diào)用的函數(shù),該函數(shù)可以進行查找設備,對硬件進行設置等操作。

  lookup:當調(diào)用cyg_io_lookup()函數(shù)對該設備進行操作時調(diào)用的函數(shù)。

  priv:該設備驅(qū)動程序所需的專用數(shù)據(jù)。

  設備入口中的句柄handlers包含了一組設備驅(qū)動程序接口函數(shù),是設備函數(shù)表DEVIO_TAB的指針,DEVIO_TAB包含了一組函數(shù)的指針。設備I/O函數(shù)表通過DEVIO_TAB宏來定義,格式如下:

  DEVIO_TABLE(l, write, read, get_config, set_config)。

  l:改表的“C”標識符,即在DEVTAB_ENTRY中的handlers。

  write:實現(xiàn)向設備傳送數(shù)據(jù)。

  read:實現(xiàn)從設備讀取數(shù)據(jù)。

  get_config:實現(xiàn)讀取設備配置信息。

  set_config:實現(xiàn)對設備的配置操作。

  在eCos的初始化引導過程中,對系統(tǒng)中的所有設備調(diào)用其相應的init()函數(shù)(即DEVTAB_ENTRY宏注冊的初始化函數(shù)),所有對設備的I/O操作通過handlers完成。

  設備驅(qū)動程序包含如下內(nèi)容(xxx:表示某種設備)。

  ◆ 用宏定義DEVIO_TABLE設備I/O函數(shù)表。

  DEVIO_TABLE(xxx_handlers, // I/O函數(shù)句柄指針

  xxx_write, // 寫函數(shù)

  xxx_read, // 讀函數(shù)

  xxx_get_config, // 讀配置

  xxx_set_config)// 設置配置

  ◆ 用宏定義DEVTAB_ENTRY注冊設備入口。

  DEVTAB_ENTRY(xxx_device, // 設備入口名

  “/dev/xxx”, // 設備名,查找設備時用到

  NULL,// 需用到的底層驅(qū)動,這里為空

  xxx_handles, // I/O函數(shù)句柄指針

  xxx_init, // 設備初始化函數(shù)

  xxx_lookup, // 設備搜索

  xxx_priv)// 設備專用數(shù)據(jù)指針

  ◆ 完成初始化函數(shù)xxx_init。完成對硬件的初始化,調(diào)用函數(shù)cyg_drv_interrupt_create建立中斷對象,然后調(diào)用函數(shù)cyg_drv_interrupt_attach完成中斷與硬件向量的連接。

  ◆ 完成中斷服務程序。

  ◆ 完成中斷滯后服務程序。

  ◆ 若有中斷線程,則完成中斷線程。

  ◆ 完成設備搜索函數(shù)xxx_lookup。

  ◆ 完成寫函數(shù)xxx_write。

  ◆ 完成讀函數(shù)xxx_read。

  ◆ 完成讀配置函數(shù)x xx_get_config。

  ◆ 完成設置配置函數(shù)xxx_set_config。

  結論

  經(jīng)過硬件平臺的移植和驅(qū)動程序的編寫,就可在此基礎上開發(fā)各種應用程序了。

  eCos具有非常優(yōu)秀的可移植性;使用多任務搶占機制,具有最小的中斷延遲;支持系統(tǒng)所需的所有同步原語,提供包括設備驅(qū)動程序、內(nèi)存管理、例外處理、標準C和數(shù)學庫;提供各種開發(fā)應用所需的工具,是開發(fā)系統(tǒng)的強有力工具。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

上一頁 1 2 下一頁

評論


相關推薦

技術專區(qū)

關閉