chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

基于pSoSystem操作系統(tǒng)實現(xiàn)通用網(wǎng)絡代碼框架的設計

電子設計 ? 來源:廈門大學學報:自然科學 ? 作者:陳海華,胡林,楊 ? 2021-05-27 10:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者:陳海華,胡林,楊晨暉

pSoSystem操作系統(tǒng)簡介

pSoSystem是一種專門用以嵌入式處理器的高性能的、模塊化的操作系統(tǒng)?;陂_放操作系統(tǒng)標準,它提供了一種復雜的多任務運行環(huán)境。同時,它也提供了一系列的集成開發(fā)工具,這些開發(fā)工具可用于Unix系統(tǒng),也可用于Windows系統(tǒng)。另外,由于pSoSystem是一種模塊化的操作系統(tǒng),所以,開發(fā)人員可以根據(jù)需要,選用不同的操作系統(tǒng)模塊。這樣,就使得我們沒有必要把一個龐大的操作系統(tǒng)全部加載到嵌入式系統(tǒng)設備上。比如說,如果我們的應用系統(tǒng)不需要支持文件功能,則可以不用加載文件系統(tǒng)。這樣,就可以大大縮減操作系統(tǒng)的尺寸.pSoSystem的整個系統(tǒng)結構如圖1所示。

圖1pSOS系統(tǒng)框圖

pSoSystem網(wǎng)絡設備驅(qū)動程序概述

網(wǎng)絡驅(qū)動在pSoSystem里有作專門的處理,它不是直接和pSOS+內(nèi)核模塊的I/Osupervisor打交道,而是和pNA+網(wǎng)絡模塊打交道。和I/O監(jiān)管層一樣,為了屏蔽具體硬件之間的差異,pNA+也為網(wǎng)絡驅(qū)動程序提供了一個中間層,稱之為NI(NetworkInterface)層。在NI層,它為上層提供了一系列的標準網(wǎng)絡接口函數(shù)(如網(wǎng)卡初始化,網(wǎng)絡包發(fā)送等),這些接口函數(shù)是在網(wǎng)絡驅(qū)動程序里實現(xiàn),而由pNA+模塊里的其它網(wǎng)絡層調(diào)用。要編寫網(wǎng)絡驅(qū)程,就是要具體實現(xiàn)這幾個接口函數(shù)。圖2是網(wǎng)絡驅(qū)動程序在pSoSystem中的模型圖。

圖2網(wǎng)絡驅(qū)動模型

通用網(wǎng)絡驅(qū)動模型的設計

通用網(wǎng)絡驅(qū)動模型的整體設計思想,就是將獨立于具體硬件的操作抽象出來,以形成一個通用的代碼框架。具體來說,主要包括以下幾個部分:

a) 底層驅(qū)動和上層應用的分離層次模型設計;

b) 由上述分離層次所得到的相應接口函數(shù)的設計;

c) 網(wǎng)卡數(shù)據(jù)包接收、發(fā)送的抽象代碼框架的設計;

下面,本文將就上述3個方面的設計作一個較為全面的分析。

底層驅(qū)動和上層應用的分離層次模型設計

顯然,這一塊的設計是整個驅(qū)動模型設計的首要部分。只有將底層驅(qū)動和上層應用有效地分離出來,才能保證代碼的獨立性與重用性,從而也使得驅(qū)動程序的開發(fā)者不用過多地關心上層應用,符合現(xiàn)代軟件的設計思想。關于這一部分的設計,pSoSys2tem已經(jīng)幫助我們完成,其所提供的網(wǎng)絡驅(qū)動模型就是一個典型的軟件分層設計實例。詳情請看圖2.

接口函數(shù)的設計

一般來說,根據(jù)上述所設計的驅(qū)動程序分層模型,都會為上下兩層的溝通提供一些標準的接口函數(shù)。顯然,這些接口函數(shù)的實現(xiàn),大部分是和底層硬件具體相關的,但其操作步驟卻是大同小異的。因此,在我們的通用驅(qū)動模型框架里,就是要抽象出獨立于具體硬件的一般操作,以形成一個通用的代碼框架,在這里,我們一般就以偽C代碼形式來給出各個接口函數(shù)的一般實現(xiàn)。

(1)NiLan接口函數(shù)的設計與分析

NiLan是pNA+層和網(wǎng)絡驅(qū)動掛接的一個最為重要的接口函數(shù)。實際上,早在pNA+模塊的加載過程中,pNA+就安裝了此函數(shù),其相應的偽C代碼如下:

UCHAR *SetUpNI(UCHAR *FreeMemPtr)

{InstallNi((int(*)()) Nilan, IPaddr,

BSP-LAN1-MTU,BSP-LAN1-HWALEN,BSP-LAN1-FLAGS,SysVars.Lan1SubnetMask,0);

/*通過這個函數(shù)的調(diào)用,將NiLan函數(shù)安裝到了pNA+模塊中去了*/

FreeMemPtr=SetupLanParams(BSP-LAN1-PKB,F(xiàn)reeMemPtr);

/*在pNA+模塊里為網(wǎng)卡要用到的接收與發(fā)送等緩存分配空間*/

}

代碼1

通過這個函數(shù),pNA+層可以完成所有有關網(wǎng)絡應用的調(diào)用。其具體做法就是:由pNA+層傳入不同的功能號,以達到調(diào)用相應具體功能函數(shù)的目的,其相應的偽C代碼如下:

longNiLan(ULONGfunction, union nientry*p)

{

if(function= =NI-INIT)

{

return ni-init();

}else

{

/*根據(jù)功能號,調(diào)用相應的功能函數(shù)*/

switch(function)

caseNI-SEND:調(diào)用ni-send();break;

case其它功能號:調(diào)用其它功能函數(shù);break;

}

}

代碼2

(2)ni-init函數(shù)的設計與分析

此函數(shù)主要是用來配置和初始化網(wǎng)卡的各種硬件和軟件資源,具體功能如下所述:

a)初始化buffers,主要是將其鏈成鏈表,以方便操作;

b)初始化網(wǎng)卡相關的寄存器,最重要的就是收發(fā)寄存器的首址RxDesc和TxDesc;

c)初始化收發(fā)寄存器,主要是將其鏈成隊列,以方便內(nèi)存的循環(huán)使用;

staticlongni-init(void)

{

InitBuffers();/*初始化buffer,主要是將

其鏈成鏈表*/

InstallIsr();/*安裝中斷服務程序,最重要

的就是網(wǎng)絡數(shù)據(jù)接收中斷*/

InitDescps()/*將收發(fā)寄存器鏈成隊列*/

lanInit();/*初始化網(wǎng)卡的各個寄存器*/

}

代碼3

網(wǎng)卡數(shù)據(jù)包收發(fā)代碼框架的設計與分析

設計通用網(wǎng)卡驅(qū)動模型,顯然,數(shù)據(jù)包的收發(fā)是最為重要的與具體硬件有關的操作,如何去除具體硬件的相關性,而抽象出獨立于各種硬件的一般的收發(fā)代碼,則顯得非常重要。下面,將就網(wǎng)卡收發(fā)過程的一般步驟進行分析。

(1)網(wǎng)卡數(shù)據(jù)包的發(fā)送過程其具體步驟如下所示

a)應用程序為了發(fā)送數(shù)據(jù),調(diào)用相應的套接字;

b)套接字的調(diào)用引發(fā)pNA+的系統(tǒng)調(diào)用,pNA+層則調(diào)用NiLan函數(shù)將上層的數(shù)據(jù)傳給NI層;NiLan的具體實現(xiàn)參看代碼2,這里,主要解釋一下其傳入的參數(shù);function:功能號,NiLan將根據(jù)不同的功能號調(diào)用合適的NI層的函數(shù);p:NI層的入口點,即上層和下層交換數(shù)據(jù)的地方,發(fā)送數(shù)據(jù)時,由這個入口點將相應的數(shù)據(jù)由pNA+層傳入NI層,同樣,接收數(shù)據(jù)時,也是由這個入口點將NI層收到的數(shù)據(jù)上傳給pNA+層。

c)NI層收到pNA+層傳入的數(shù)據(jù)之后,則將待發(fā)送數(shù)據(jù)組裝成數(shù)據(jù)幀,以便接下來移

入網(wǎng)卡的發(fā)送寄存器發(fā)送出去,其相應的實現(xiàn)代碼如下所示:

staticvoidni-send(char*hwa-ptr,char*pkbpt

r,USHORTtype)

{

tx-hdr=InitMblk();/3初始化三元組,一個三元組里存放一個數(shù)據(jù)幀*/

FillFrameHead();/*填充幀頭*/

TxFillDesc();/*調(diào)用TxFillDesc()填充相

應的寄存器以把數(shù)據(jù)發(fā)送出去*/

}

代碼4

(2)網(wǎng)卡數(shù)據(jù)包的接收過程

網(wǎng)卡接收數(shù)據(jù)的過程不同于發(fā)送數(shù)據(jù)的過程,發(fā)送數(shù)據(jù)時,有一個獨立的發(fā)送數(shù)據(jù)的函數(shù),而在網(wǎng)卡的接收數(shù)據(jù)的過程中,并不存在這樣一個獨立的函數(shù),網(wǎng)卡數(shù)據(jù)的接收是通過中斷服務程序來完成的,其具體步驟如下:

a)網(wǎng)卡產(chǎn)生接收數(shù)據(jù)的中斷;

b)中斷導致ni-isr()中斷服務程序的調(diào)用,而在ni-isr()中,調(diào)用真正的中斷響應程序

ni-poll(),ni-poll()則根據(jù)不同的中斷事件,調(diào)用具體的中斷服務程序;

static voidni-isr(void)

{

ienter();

AppModel-run-on-sstack((Pointer)nipoll, Null);

ireturn();

}

static voidni-poll(void)

{

for(;;)

{

if(接收數(shù)據(jù)中斷)RxBufRcv();

if(發(fā)送數(shù)據(jù)中斷)TxFillDesc();

if(其它中斷)。..。..

}

}

代碼5

c)對于接收數(shù)據(jù)的中斷而言,在ni-poll()函數(shù)里調(diào)用的中斷響應函數(shù)就是RxBufRev(),這個函數(shù)是真正負責網(wǎng)卡數(shù)據(jù)接收的地方,其工作原理就是讀取網(wǎng)卡相應的接收寄存器,并通知pNA+層將數(shù)據(jù)取走;

staticvoidRxBufRcv(void)

{

for(;;)

{

good=CheckFrame()/*判斷接收的數(shù)據(jù)包是否出錯*/

if(good==TRUE)/*如果數(shù)據(jù)包沒有出錯,則將它交給pNA+層*/

{

/*建立三元組,并通知pNA+層*/

msgBlk=NiFuncs.esballoc((void3)&pktAddr-》type,dataLen,0,&frtn);

Announce(type,msgBlk,dataLen,IfNum);

}

}

}

代碼6

d)通過RxBufRec()函數(shù)將數(shù)據(jù)從網(wǎng)卡中收下后,它最后還要再調(diào)用Announce()函數(shù)

通知pNA+模塊將數(shù)據(jù)取走。至此,一個數(shù)據(jù)包的接收過程全部完成;注:Announce是一個回調(diào)函數(shù),即在pNA+模塊中定義的,由NI層調(diào)用的函數(shù);

驅(qū)動程序的安裝

在pSOS中,一般的驅(qū)動程序安裝是通過修改drv-conf.c(pSoSystem操作系統(tǒng)里的一個系統(tǒng)配置文件)中的InstallDriver來完成。而網(wǎng)絡驅(qū)動程序在pSoSystem里有作專門的處理,它是通過調(diào)用drvconf.c中的SetUpNi函數(shù)來實現(xiàn)的,而SetUpNi則會調(diào)用pSoSystem所提供的InstallDriver來最后完成網(wǎng)絡驅(qū)動程序的安裝。當然,最后還需要重新編譯pSoSystem的內(nèi)核,從而將我們的驅(qū)動程序模塊加載到pSoSystem系統(tǒng)模塊中。具體實現(xiàn)可以參看前面的代碼1.

結束語

本文只給出了通用網(wǎng)絡驅(qū)動模型的最重要部分的設計與分析,至于其它一些細節(jié)函數(shù),限于篇幅,本文未做詳述。有興趣的讀者,可以進一步參看文末所附的參考文獻。最后,希望本文能對有心開發(fā)類似應用的工程技術人員有所幫助。

責任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19896

    瀏覽量

    235223
  • 嵌入式
    +關注

    關注

    5152

    文章

    19675

    瀏覽量

    317574
  • 操作系統(tǒng)

    關注

    37

    文章

    7152

    瀏覽量

    125591
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    一個判斷操作系統(tǒng)的VBScript腳本代碼

    西門子觸摸屏基于不同的Windows操作系統(tǒng),有的是標準的Windows系統(tǒng),有的是嵌入式操作系統(tǒng)Windows CE。這兩種系統(tǒng)對于VBScript腳本的支持不同,因此在使用腳本編程
    發(fā)表于 09-21 14:56 ?769次閱讀

    嵌入式操作系統(tǒng)通用硬件抽象層設計

    層API能夠在下層硬件平臺上實現(xiàn),那么操作系統(tǒng)和應用程序的代碼就可以移植。圖1 引入HAL后的嵌入式系統(tǒng)結構這樣,原先嵌入式系統(tǒng)的3層結構逐
    發(fā)表于 12-07 10:30

    嵌入式操作系統(tǒng)怎么實現(xiàn)網(wǎng)絡加載?

    在復雜的應用系統(tǒng)中通常都需要嵌入式操作系統(tǒng)的支持,這樣嵌入式操作系統(tǒng)鏡像文件的尺寸往往就會變得比較大??梢赃x擇通過網(wǎng)絡將嵌入式操作系統(tǒng)加載到
    發(fā)表于 03-18 08:20

    如何實現(xiàn)嵌入式操作系統(tǒng)網(wǎng)絡加載?

    如何實現(xiàn)嵌入式操作系統(tǒng)網(wǎng)絡加載?
    發(fā)表于 04-28 06:42

    Firefly通過網(wǎng)絡遠程掛載操作系統(tǒng)設計實現(xiàn)

    技術方案是通過NFS(Network File System)網(wǎng)絡文件系統(tǒng)從而實現(xiàn)了遠程掛載操作系統(tǒng)。例如:用戶可把系統(tǒng)文件集中放置在NFS
    發(fā)表于 04-07 16:08

    很小的ARM操作系統(tǒng)代碼

    很小的ARM操作系統(tǒng)代碼
    發(fā)表于 12-26 00:21 ?48次下載
    很小的ARM<b class='flag-5'>操作系統(tǒng)</b>源<b class='flag-5'>代碼</b>

    簡述幾種實時多任務操作系統(tǒng)

    從整體上介紹VxWorks、pSOSystem、Hopen OS、Pencil、CMX、PTXC 幾種實時操作系統(tǒng)(RTOS)及其特點, 有助于RTOS 選型。
    發(fā)表于 05-13 15:44 ?17次下載

    計算機網(wǎng)絡網(wǎng)絡操作系統(tǒng)

    理解網(wǎng)絡操作系統(tǒng)的功能與作用,了解常用網(wǎng)絡操作系統(tǒng)如WINDOWS操作系統(tǒng)、LINUX 操作系統(tǒng)
    發(fā)表于 08-05 17:50 ?3次下載

    操作系統(tǒng)網(wǎng)絡計算機的啟動研究

    介紹了一種基于集成的方法將多個單操作系統(tǒng)NC 的啟動程序代碼整合成一個多操作系統(tǒng)NC 啟動環(huán)境的方法。文中著重介紹了單操作系統(tǒng)NC 的啟動原理及多
    發(fā)表于 09-02 11:21 ?13次下載

    嵌入式操作系統(tǒng)通用硬件抽象層設計

    摘要 基于嵌入式操作系統(tǒng)硬件抽象層理論,設計一種用于嵌入式操作系統(tǒng)內(nèi)核開發(fā)的通用硬件抽象層平臺。通用硬件抽象層能夠為嵌入式操作系統(tǒng)內(nèi)核的設計
    發(fā)表于 03-29 15:16 ?1440次閱讀
    嵌入式<b class='flag-5'>操作系統(tǒng)</b>的<b class='flag-5'>通用</b>硬件抽象層設計

    網(wǎng)絡操作系統(tǒng)

    網(wǎng)絡操作系統(tǒng)           
    發(fā)表于 12-17 11:50 ?817次閱讀

    什么是網(wǎng)絡操作系統(tǒng)(NOS)

    什么是網(wǎng)絡操作系統(tǒng)(NOS) 網(wǎng)絡操作系統(tǒng)(NOS)是網(wǎng)絡的心臟和靈魂,是向網(wǎng)絡計算機提供服務
    發(fā)表于 04-03 15:07 ?3146次閱讀

    嵌入式實時操作系統(tǒng)pSOSystem系統(tǒng)

    This manual is part of a documentation set that describes pSOSystem, the modular, high-performance
    發(fā)表于 05-09 15:55 ?28次下載

    嵌入式操作系統(tǒng)網(wǎng)絡加載實現(xiàn)

      在復雜的應用系統(tǒng)中通常都需要嵌入式操作系統(tǒng)的支持,這樣嵌入式操作系統(tǒng)鏡像文件的尺寸往往就會變得比較大??梢赃x擇通過網(wǎng)絡將嵌入式操作系統(tǒng)
    發(fā)表于 08-25 14:02 ?1368次閱讀
    嵌入式<b class='flag-5'>操作系統(tǒng)</b>的<b class='flag-5'>網(wǎng)絡</b>加載<b class='flag-5'>實現(xiàn)</b>

    一個簡單實用的MCU程序框架(非操作系統(tǒng),簡單調(diào)度任務) - 總體介紹

    。實際上,在我的使用過程中發(fā)現(xiàn),應用這類實時操作系統(tǒng)的場景其實非常小,更多的應用無需操作系統(tǒng),要做的只有簡單的幾個事情。?在無操作系統(tǒng)的程序上,如果沒有一個框架,
    發(fā)表于 12-08 14:06 ?6次下載
    一個簡單實用的MCU程序<b class='flag-5'>框架</b>(非<b class='flag-5'>操作系統(tǒng)</b>,簡單調(diào)度任務) - 總體介紹