platform get resource的結構體

2021-10-14 11:06:40 字數 2198 閱讀 5647

platform_get_resource的結構體.

platform_get_resource函式原始碼如下:

struct resource *platform_get_resource(struct platform_device *dev,

unsigned int type, unsigned int num)

return null;

}函式分析:

struct resource *r = &dev->resource[i];

這行**使得不管你是想獲取哪乙份資源都從第乙份資源開始搜尋。

if (type == resource_type® && num-- == 0)

這行**首先通過type == resource_type®判斷當前這份資源的型別是否匹配,如果匹配則再通過num-- == 0判斷是否是你要的,如果不匹配重新提取下乙份資源而不會執行num-- == 0這一句**。

通過以上兩步就能定位到你要找的資源了,接著把資源返回即可。如果都不匹配就返回null。

例項分析:

下面通過乙個例子來看看它是如何拿到裝置資源的。

裝置資源如下:

static struct resource s3c_buttons_resource = ,

[1]=,

[2]=,

[3]=,

[4]=,

[5]=,

[6]=

驅動中通過下面**拿到第乙份資源:

struct resource *res;

res = platform_get_resource(pdev, ioresource_mem, 0);

函式進入for裡面,i=0,num_resources=7,拿出resource[0]資源。resource_type®提取出該份資源 的資源型別並與函式傳遞下來的資源型別進行比較,匹配。

num=0(這裡先判斷是否等於0再自減1)符合要求,從而返回該資源。

獲取剩下資源的**如下:

for(i=0; i<6; i++)

button_irqs[i] = buttons_irq->start;

}

分析如下:

for第一次迴圈:

buttons_irq = platform_get_resource(pdev,ioresource_irq,0);

在拿出第乙份資源進行resource_type®判斷資源型別時不符合(此時num-- == 0這句沒有執行),進而拿出第二份資源,此時i=1,num_resources=7,num傳遞下來為0,資源型別判斷時候匹配,num也等於0,從而確定資源並返回。

for第二次迴圈:

buttons_irq = platform_get_resource(pdev,ioresource_irq,1);

拿出第二份資源的時候resource_type®資源型別匹配,但是num傳遞下來時候為1,執行num-- == 0時不符合(但num開始自減1,這導致拿出第三份資源時num==0),只好拿出第三份資源。剩下的以此類推。

總結:struct resource *platform_get_resource(struct platform_device *dev,

unsigned int type, unsigned int num)

unsigned int type決定資源的型別,unsigned int num決定type型別的第幾份資源(從0開始)。即使同型別資源在資源陣列中不是連續排放也可以定位得到該資源。

比如第乙份ioresource_irq型別資源在resource[2],而第二份在resource[5],那

platform_get_resource(pdev,ioresource_irq,0);

可以定位第乙份ioresource_irq資源;

platform_get_resource(pdev,ioresource_irq,1);

可以定位第二份ioresource_irq資源。之所以能定位到資源,在於函式實現中的這一行**:

if (type == resource_type® && num-- == 0)

該行**,如果沒有匹配資源型別,num-- == 0不會執行而重新提取下乙份資源,只有資源匹配了才會尋找該型別的第幾份資源,即使這些資源排放不連續。

邏輯結構,儲存結構,物理結構的區分

邏輯結構 是指資料元素之間的邏輯關係,從邏輯關係上描述資訊。儲存結構 又稱物理結構 資料結構在計算機中的表示 又稱映像 很好理解,但是光靠這些官話,做題保準做乙個錯乙個 不信?下面放一道題 線索二叉樹是一種 結構?a.邏輯 b.邏輯和儲存 c.物理 d.線性 是不是一般人都會想選a,猶豫一點的會想選...

十三 結構型別(4) 結構中的結構

結構陣列 struct date dates 100 struct date dates 結構中的結構 struct dateandtime 巢狀的結構 struct point struct rectangle 如果有變數 struct rectangle r 就可以有 r.pt1.x,r.pt1...

邏輯結構,儲存結構,物理結構的區分

邏輯結構 是指資料元素之間的邏輯關係,從邏輯關係上描述資訊。儲存結構 又稱物理結構 資料結構在計算機中的表示 又稱映像 很好理解,但是光靠這些官話,做題保準做乙個錯乙個 不信?下面放一道題 線索二叉樹是一種 結構?a.邏輯 b.邏輯和儲存 c.物理 d.線性 是不是一般人都會想選a,猶豫一點的會想選...