RTT驅動實現步驟

2022-06-21 08:36:09 字數 1817 閱讀 7271

裝置驅動實現步驟:

1. 按照rt-thread物件模型,擴充套件一物件有兩種方式:

1)定義自己的私有資料結構,然後賦值到rt-thread裝置控制空的user_data指標上;

2)從struct rt_device結構中派生。(推薦)

2. 實現i/o裝置模組中定義的6個公共裝置介面,開始可以為空函式(返回rt_err_t的可預設返回rt_eok)。

3. 根據自己的裝置型別定義自己的私有資料域。

特別是可能有多個類似裝置的情況下(例如串列埠1,2),

裝置介面可以共用一套介面,不同的只是各自的資料域(暫存器基位址)。

4. 根據裝置的型別,註冊到rt-thread裝置框架中。

現以串列埠驅動為例:

/*

stm32f10x.h

*this file contains all the peripheral register's definitions, bits

* high density, high density value line, medium density,

* medium density value line, low density, low density value line

* and xl-density devices.

*/typedef

struct

usart_typedef;

struct

stm32_uart

;

struct

rt_serial_device

;typedef

struct rt_serial_device rt_serial_t;

/*

* serial register */

rt_err_t rt_hw_serial_register(

struct rt_serial_device *serial,

const

char *name,

rt_uint32_t flag,

void *data)

struct stm32_uart* uart;

rt_hw_serial_register(&serial1, "

uart1",

rt_device_flag_rdwr |rt_device_flag_int_rx ,

uart);

rt_serial_device裝置驅動採用派生rt_device實現驅動,實現一套共用的驅動函式-------linux中相當於platform_driver;

rt_serial_device的私有資料儲存具體裝置相關引數(與硬體密切相關)------linux中相當於platform_device。

最後通過rt_hw_serial_register()/rt_device_register()將uart(硬體device)和rt_serial_device(驅動)註冊到系統驅動框架中(rt_device)。

上述採用派生和私有資料相結合的方法可使具體硬體與驅動分開,便於單獨修改硬體;

原來(舊版本)將具體硬體與驅動都通過私有資料註冊到系統驅動框架中。------自己理解。

私有資料方式實現驅動可節省空間,效率可能更高。

當為了實現硬體與業務分開,故可約定俗成:業務用派生實現,硬體用私有資料實現。

RTT 網口驅動分析

rtt 網口驅動的核心是這個檔案ethernetif.c 此檔案定義了網口驅動的架構,還有幾個常用的命令,比如list if set if set dns eth device init eth device init with flag 這些函式是在具體網絡卡晶元的驅動初始化裡呼叫 的,比如我用的...

RTT裝置與驅動之PWM

這裡將pwm當成乙個裝置 pwm簡介 上圖是乙個簡單的 pwm 原理示意圖,假定定時器工作模式為向上計數,當計數值小於閾值時,則輸出一種電平狀態,比如高電平,當計數值大於閾值時則輸出相反的電平狀態,比如低電平。當計數值達到最大值是,計數器從0開始重新計數,又回到最初的電平狀態。高電平持續時間 脈衝寬...

RTT裝置與驅動之硬體定時器

硬體定時器可以對外部時鐘進行計數,利用內部時鐘進行定時。函式描述 rt device t rt device find const char name 查詢定時器裝置 rt err t rt device open rt device t dev,rt uint16 t oflags ofalgs ...