娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年05月28日(星期三)

2021年05月28日 | ARM嵌入式系統開發發送過程的實現

發布者:SereneMelody 來源: eefocus關鍵字:ARM  嵌入式系統  發送過程 手機看文章 掃描二維碼
隨時隨地手機看文章

要通過網卡發送數據時,上層協議實體調用函數hard_start_xmit(),在我們的驅動程序中這個函數被映射成DM9000_wait_to_send_packet()函數,正如它名字中wait所表示的那樣,這個函數只完成了等待發送的工作,實際的發送是調用DM9000_hardware_send_packet()函數完成的,這也是前面提到的buffer分配機制的一種體現。


在具體介紹這兩個函數之前,有必要簡單說一說DM9000芯片發送數據的工作原理。前面已經講過,為了增加網絡吞吐量DM9000芯片內部集成了8K的buffer,芯片對這些buffer采用了內存頁面管理方式,每頁256B,內部寄存器支持簡單的內存分配指令。對于內核來說,發送數據只是把數據從內核送到芯片的buffer中去,實際向物理媒介上的發送和相關的控制(CSMA/CD)是由芯片自主完成的。完成情況通過中斷的方式通知內核。


在數據發送中用到兩個函數。函數DM9000_wait_to_send_packet()一方面實現和上層協議接口,另一方面檢查buffer分配是否成功,如果成功就調用,DM9000_hardware_send_packet()將數據傳送到buffer中去,如果不成功,則打開相關中斷,在分配成功時由中斷控制程序調用DM9000_hardware_send_packet()完成數據傳送。這兩個函數都用到Linux網絡協議棧中很重要的一個數據結構sk_buff,關于它在講接收程序時再詳細介紹。下面結合代碼片段分析這兩個函數的功能實現。


static int DM9000_wait_to_send_packet( struct sk_buff* skb, struct net_device * dev )


{


struct DM9000_local *lp = (struct DM9000_local *)dev->priv;


word length;


unsigned short numPages;


word time_out;


word status;


lp->saved_skb = skb;


length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;


numPages = ((length & 0xfffe) + 6);


numPages >>= 8;


DM9000_SELECT_BANK( 2 );


outw( MC_ALLOC | numPages, MMU_CMD_REG );


}


以上代碼從skb中讀出數據長度做一些處理后,換算出所需的頁面數。然后向芯片發出分配buffer的請求,MC_ALLOC和MMU_CMD_REG都是在頭文件中定義的宏,MC_ALLOC是分配buffer空間的寄存器指令,而MMU_CMD_REG是MMU命令寄存器的地址。


time_out = MEMORY_WAIT_TIME;


do {


status = inb( INT_REG );


if ( status & IM_ALLOC_INT ) {


break;


}


} while ( -- time_out );


這段代碼是檢查buffer分配是否成功,檢查的方法很特別。須說明一下,在系統初始化時buffer分配中斷是被屏蔽的,所以即使分配成功也不會產生物理中斷信號,但是中斷狀態寄存器仍然會有相應標志。這段代碼正是利用這個特性,在一個時間范圍內檢查中斷狀態寄存器,檢查分配是否成功,這個是一種忙等待,但因為time_out設得很小所以在有些時候它比中斷方式效率高。


if ( !time_out ) {


DM9000_ENABLE_INT( IM_ALLOC_INT );


return 0;


}


如果超時,證明buffer忙,打開buffer分配中斷,待分配成功時由中斷程序完成有關操作。


DM9000_hardware_send_packet(dev);


netif_wake_queue(dev);


return 0;


}


如果不超時,直接調用DM9000_hardware_send_packet()完成發送。下面來看DM9000_hardware_send_packet()函數,它的主要功能一是把數據從sk_buff結構中傳輸到芯片buffer區,二是進行傳輸后處理。數據傳輸部分涉及一些特殊問題處理,例如按字(16b)傳輸時如何處理奇數字節的問題,以及構造以太網幀頭結構問題等,這些問題各種網卡處理方式基本一致,相對比較煩瑣,所以在代碼片段中僅作表示。


static void DM9000_hardware_send_packet( struct net_device * dev )


{……


outsw( DATA_REG , buf, (length ) >> 1);


/*對相關寄存器進行操作,將數據傳送到芯片buffer*/


DM9000_ENABLE_INT( (IM_TX_INT | IM_TX_EMPTY_INT) );


lp->saved_skb = NULL;


dev_kfree_skb_any (skb);


dev->trans_start = jiffies;


netif_wake_queue(dev);


return;


}


傳送后處理,具體為打開傳送相關的異常情況中斷,釋放skb空間,設置發送時間、喚醒網絡設備等待隊列。


關鍵字:ARM  嵌入式系統  發送過程 引用地址:ARM嵌入式系統開發發送過程的實現

上一篇:最小化ARM Cortex-M CPU功耗的方法與技巧
下一篇:最后一頁

推薦閱讀

近日聯想發布了Moto青柚系列的升級版新機型青柚1s手機,仍然未得到年輕人的喜愛。現在最新消息,有外媒曝光了一款高性能的Moto新機,搭載驍龍660處理器+6GB運存。據消息了解,通過網上曝光的圖來看,聯想新一款高性能的Moto新機命名為moto G6 Plus,外觀延續了上一代的設計風格,采用5.7英寸18:9比例的全面屏設計,仍然虛擬按鍵,還未確定是前置指紋識...
據美國《汽車新聞》報道稱,福特(Ford)汽車正在研發一個新型機器人Digit,該機器人頂部安裝有一個激光雷達傳感器,可依靠與無人駕駛汽車共享的傳感處理系統,最重可將最重約20千克的貨物送到家門口。福特送貨機器人Digit據悉,該機器人的一大優點是重量輕,這是因為該機器人沒有配備過多的傳感器和處理器,其大部分計算能力來自福特的自動駕駛汽車,可通...
都說5G前景廣闊,一起來看幾組數據: · 在日前全國兩會“部長通道”上,工信部部長苗圩表示,現在每周大概要增加1萬多個5G基站,隨著5G建設的推進,會有更多應用出現。 · 中國信息通信研究院發布的《5G 經濟社會影響白皮書》預測, 2030 年新增 5G 就業機會 800 萬。 · 獵聘發布的《2019年中國5G人才需求大數據報告》顯示,5G四大細分領域(5G應...
據報道,戴爾與惠普公布財報,雖然全球一些地區解封,但數據顯示消費者與企業繼續搶購電腦。盡管財報不錯,但兩家公司的股價卻在盤后下跌。  一財報戴爾營收同比增長12%,達到245億美元,高于分析師估計的233億美元。惠普二財季營收增長27%,達到159億美元,也比分析師預期高10億美元。惠普還調高年度盈利目標。Cross Research分析師認為,雖然數據漂亮...

史海拾趣

問答坊 | AI 解惑

其實學習DSP并沒有那么難

我感覺開始肯定一頭霧水,其實最開始是設計方案,由于DSP的種類很多,所以確定平臺比較重要,平臺確定后,直接去買一塊開發板或者到網上下一些參考設計,去掉那些開發板上不需要的東西,加上自己需要的,開始一定要構造一個最小系統,這個可以完全 ...…

查看全部問答∨

中星九號 高斯貝爾ABS-208解密

中星九號 高斯貝爾ABS-208解密,我已經試驗了兩臺機器了,成功看到40多個臺了啊…

查看全部問答∨

設計獨特的家庭電腦套裝

這套家庭電腦套裝設計非常的柔軟。它是由三個部件組成,一個小型便攜觸摸屏、一個帶有投影儀的大觸摸屏以及一個帶有各種接口并充當充電基站的電腦小窩主機箱組成兩個觸摸屏通過無線設備與主機箱溝通,執行主機箱程序,并將觸摸屏上的操作反饋回主機 ...…

查看全部問答∨

wince 5.0項目歸檔,應該怎么保存?

wince 5.0項目做完之后,要進行歸檔,或移動別的計算機上進行。 我正常會保存PBWorkspaces的項目文件和PLARFORM下的BSP文件。 可是PBWorkspaces的項目文件有幾百M,BSP文件也有二十幾M。 pb5沒有單獨的clean操作,請教大家歸檔是怎么做的?…

查看全部問答∨

朗科U盤變成OTi的U盤了?

我在使用一些U盤量產工具時,不知道怎么搞的,朗科U盤變成OTi的U盤了.現在無論在哪臺電腦上,插上U盤后就變成了OTi設備了. 請教?…

查看全部問答∨

wince 4.2 + evc 為什么不能使用StrCat?

wince 4.2 + evc #include <Shlwapi.h> 后編譯正確 但是鏈接出錯: error LNK2019: unresolved external symbol StrCatW referenced in function "long __cdecl MyInitializeDatabase(void)" …

查看全部問答∨

三極管恒流電源問題

這兩天看三極管的問題,腦袋都快被放大了。今天看到一篇文章,不太明白,先將圖發上來。疑問:為什么求的電流本來是發射極的電流,怎么說是流經集電極的負載電流呢,如果處于飽和階段,那c e導通,可以理解電流一致,看這個圖分析不是飽和狀態吧, ...…

查看全部問答∨

利用大功率數字源表構建多源測量單元(SMU)系統(連載一):選擇滿足測試要求的設備

簡介 利用高壓、大電流源測量單元(SMU)來設計和構建功率半導體器件直流特性分析測試系統包括以下幾個步驟: • 選擇滿足測試要求的設備 • 選擇連接待測器件(DUT)與儀器的電纜和夾具 • 檢查系統安全和儀器保護 • 優化 ...…

查看全部問答∨

F28027計數器值重裝怎么重裝不了呢?

我想想用CPUTimer計算一個50HZ方波的周期,用外部中斷,進入中斷后,停止計數器,讀計數器的計數值,然后重裝計數器。可是它不重裝啊,我不曉得程序哪里是不是有問題,想了半天,也沒弄清楚,求大神幫忙看一下,interrupt void button_isr(void) { ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 乌鲁木齐市| 光山县| 成武县| 安西县| 巴塘县| 安义县| 遵化市| 新建县| 宜黄县| 内江市| 福海县| 永春县| 获嘉县| 布拖县| 阳山县| 建水县| 榆林市| 延边| 泊头市| 运城市| 万源市| 姚安县| 扎囊县| 芦山县| 南昌市| 西华县| 张家港市| 青州市| 日照市| 宜兴市| 梨树县| 嫩江县| 武乡县| 永宁县| 滨海县| 苗栗县| 当雄县| 苍溪县| 老河口市| 常熟市| 泸定县|