freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

畢業(yè)設計論文-嵌入式web服務器的設計與實現(編輯修改稿)

2025-07-08 01:24 本頁面
 

【文章內容簡介】 ),則可以從 FIFO Ports 寄存器得到接收的包的 packet number,而且可以從 數據寄存器中 將接收包傳送到內存或外存中。當處理結束 后 , CPU 向處理器發(fā) 送 命令釋放使用的存儲空間和 packet number。 無錫科技職業(yè)學院嵌入式系統(tǒng)工程專業(yè) 畢業(yè)設計(論文) 10 第 二 章 μC/OS II 嵌入式 操作系統(tǒng)的移植 μC/OS II的 概述 μC/OS II 是一種基于優(yōu)先級的搶占式多 任務實時操作系統(tǒng), 包含了實時內核、任務管理、時間管理、任務間通信同步(信號量,郵箱,消息 隊列)和內存管理等功能。它可以使各個任務獨立工作,互不干涉,很容易實現準時而且無誤執(zhí)行,使實時應用程序的設計和擴展變得容易,使應用程序的設計過程大為減化 。 /OS II 簡介 μC /OS II 是一個完整的、可移植、可固化、可裁剪的占先式實時多任務內核。 μC /OSII 絕大部分的代碼是用 ANSI 的 C語言編寫的,包含一小部 分匯編代碼,使之可供不同架構的微處理器使用。至今,從 8位到 6 4 位, μC/OS II已在超過 40 種不同架構上的微處理器上運行。 μC/OS II 已經在世界范圍內得到廣泛應用,包括很 多領域, 如 手機、路由器、集線器、不間斷電源、飛行器、醫(yī)療設備及工業(yè)控制 上。實際上, μC/OS II已經通過了非常嚴格的 測試,并且得到了美國航空管 理局( Federal Aviation Administration)的認證,可以用在飛行器上。這說明 μC/OS II 是穩(wěn)定可靠的,可用于與人性命攸關的安全緊要( safety critical)系統(tǒng)。除此以外, μC/OS II 的鮮明特點就是源碼公開,便于移植和維護 μC/OS II的移植 要把 uC/OS II 成功地移植到某一處理器上 .該處理器必須滿足以下要求: C 編譯器能產生可重入代碼。 C語言就可以打開和關閉中斷。 ,并且能產生定時中斷 (通常在 10 至 100Hz 之間 )。 (可能是幾千字節(jié) )的硬件堆棧。 CPU 寄存器讀出和存儲到堆?;騼却嬷械闹噶?。 無錫科技職業(yè)學院嵌入式系統(tǒng)工程專業(yè) 畢業(yè)設計(論文) 11 uC/OS II 移植的相關工作 uC/OS II 的移植工作主要涉及與處理器相關的以下內容: 與編譯器相關的數據類型聲明 ()不同的處理器有不同的字長 .所以必須定義一系列數據類型以確保移植的正確性。文件 中聲明了 10 個相關數據類型。 改寫與任務管理相關的函數 ()uC/OS II 移植需要改寫 6個與任務管理相關的函數 .它們是: OSTaskStkInit()、 OSTaskCreatHook()、OSTaskDelHook()、 OSTaskSwHook()、 OSTaskStatHook()、 OSTaskTickHook()其中只需對 OSTaskStkInit()編寫代碼,后 5個函數必須聲明,但是內部并沒有代碼。 OSTaskCreate()和 OsTaskCreateExt()通過調用 OSTaskStkInit()來初始化任務的堆棧結構。 編寫與任務切換相關的函數 (), uC/OS II 的移植要求用戶編寫四個與處理器相關的匯編語言函數: OSStartHighRdy()、 OSCtxSw()、OSIntCtxSw()、 OSTickISR()。 (1) OSStartHighRdy( )函數 OSStartHighRdy( )由 OSStart( )函數調用,功能是在多任務調度開始時運行優(yōu)先級最高的就緒任務。它主要完成三件事:一是通知操作系統(tǒng),多任務調度已經開始;二是使 SP 指向優(yōu)先級最高的就緒任務的任務棧棧頂;三是恢復最高優(yōu)先級任務的運行環(huán)境。 在調用 OSStart( )函數之前,必須先調用 OSInit( )函數進行系統(tǒng)初始化,且至少己經創(chuàng)建一個任務。在 OSStartHighRdy( )啟動之前,必須調 OSTaskSwHook( )函數,通過檢查變量 OSRuning來確定 OSTaskSwHook( )函數被調用的對象。為了啟動任務, OSStartHighRdy( )首先找到當前就緒的優(yōu)先級最高任務,并從任務的任務控制塊中找到指向堆棧的指針,然后從堆棧中彈出全部寄存器的內容,運行中斷返回指令。由于任務創(chuàng)建時堆棧的結構就是按中斷后的堆棧結構初始化的,執(zhí)行中斷返回指令后就切換到了新任務。 (2) OSCtxSw( )函數 OSCtxSw( )是一個任務級的任務切換 函數,它主要完成以下幾件事:保存當前任務現場;保存當前任務的任務棧指針到當前任務的任務控制塊;切換最高優(yōu)先級任務為當前任務;使 SP指向最高優(yōu)先級任務的任務棧的棧頂;恢復新任務的運行環(huán)境。 無錫科技職業(yè)學院嵌入式系統(tǒng)工程專業(yè) 畢業(yè)設計(論文) 12 在 μC/OS II 中,如果任務調用了某個函數,而該函數的執(zhí)行結果可能造成系統(tǒng)任務重新調度,則在函數的末尾會調用 OSShed( ), OSShed( )將查找當前就緒的優(yōu)先級最高的任務,若不是當前任務,則判斷是否需要進行任務調度,并找到該任務控制塊 OS_TCB 的地址,將該地址拷貝到變量 OSTCBHighRdy 中,然后通過 OSCtxSw( )進行任務切換。在此過程中,變量 OSTCBCur 始終包含一個指向當前運行任務 OS_TCB的指針。 (3) OSIntCtxSw( )函數 OSIntCtxSw( )由于中斷可能會使更高優(yōu)先級的任務進入就緒態(tài)。為了讓更高優(yōu)先級的任務能立即運行,所以需要在中斷中進行任務切換。在中斷服務子程序的最后, OSIntExit( )函數會調用 OSIntCtxSw( )做任務切換。 OSIntCtxSw( )是一個中斷級的任務切換函數。在此之前,中斷服務程序已經保存了被中斷任務的現場,因此不需要再保存現場了。 OSIntCtxSw( )需要調整堆棧指針,去掉堆棧中一些不需要的內容,以使堆棧中只包含任務的運行環(huán)境。 (4) OSTickISR( )函數 OSTickISR( )是 μC/OS II 要求用戶提供一個周期 性 的時鐘源,來實現時間的延時和超時功能。為了達到這一要求,可以使用硬件定時器,也可以從交流電中獲得 50/60Hz 的時鐘頻率。本文是采用 ATmega128 的硬件定時器 Timer 來獲得周期為 100ms 的時鐘節(jié)拍。 如果用戶的編譯器支持插入匯編語言代碼,可將所有與處理器相關的代碼放到 文件中, 該文件便不再需要。編寫中斷服務程序CPUhighInterruptHook() 數和 CPUlwoInterruptHook()函數 用戶實時任務編寫 uC/OS II中的實時任務是在系統(tǒng)初始化 (調用 OSInit()和 OSCtxSw())后,通過 OSTaskCreateExt()調用創(chuàng)建的,實時任務創(chuàng)建完成后,調用 OpenTimer0()設置時鐘中斷,最后調用 OSStart(),系統(tǒng)開始運行并進行任務調度。 為了測試移植的結果,使用高奇 ICD DEMO 教學實驗板并利用板上資源創(chuàng)建TempTask()、 LEDTask()及通過 RS232 實現的 Shell 任務。其中, Shell 任務接收并執(zhí)行用戶的 Shell命令 .并通過 LCDTask()任務顯示該命令 .TempTask()則實現則周期性地采集與 RA0- RA3相連接的溫度。由于 PIC 的 USART 中只有 2 個字無錫科技職業(yè)學院嵌入式系統(tǒng)工程專業(yè) 畢業(yè)設計(論文) 13 節(jié)的 FIFO 緩沖隊列,快速的通信過程中很容易丟失數據 .故除了通信的實現采用中斷方式之外 .還設計了一個 30Byte 的緩沖隊列,存放接收到的數據,接收數據由設計在 CPUlowInterruptHook()中的代碼完成, uC/OS II 是一個完整的、可移植、可裁減、源碼公開的搶占式實時多任務操作系統(tǒng)。因此程序開發(fā)人員可以在嵌入式系統(tǒng)的開發(fā)過程中 .靈活地改寫其源代碼 .以滿足用戶特定的需求。 uC/OS II 在處理器上的成功移植 .將大大提高復雜應用系統(tǒng)的開發(fā)效率 .增強系統(tǒng)的可靠性,降低開發(fā)成本,提高經濟效益。 無錫科技職業(yè)學院嵌入式系統(tǒng)工程專業(yè) 畢業(yè)設計(論文) 14 第三章 LwIP 在 uCOS II 上的實現原理及過程 : LwIP協議棧在設計時就考慮到了將來的移植問題,因此把所 有與硬件、OS、編譯器相關的部份獨立出來,放在 ucosiiamp。LwIPsource etlwiparch 目錄下。因此 LwIP 在 uCOS II 上的實現就是修改這個目錄下的文件,其它的文件一般不應該修改。下面分幾部份分別說明相應文件的實現原理和過程。 與 CPU或編譯器相關的 include 文件 181。C/OS IIamp。LwIPsource etlwiparchucosIIincludearch 目錄下 、 、 中有一些與 CPU 或編譯器相關的定義,如數據長度,字的高低位順序等。這應該與用戶實現 181。C/OS II 時定義的數據長度等參數是一致的。 此外還有一點:一般情況下 C語言的結構體 struct 是 4字節(jié)對齊的,但是在處理數據包的時候, LwIP 使用的是通過結構體中不同數據的長度來讀取相應的數據的,所以,一定要在定義 struct 的時候使用 _packed 關鍵字,讓編譯器放棄 struct 的字節(jié)對齊。 LwIP 也考慮到了這個問題,所以,在它的結構體定義中有幾個 PACKED_FIELD_xxx 宏,默認的時候這幾個宏都是空的,可以在移植的時候添加不同的編譯器所對應的 _packed 關鍵字。比如在 Skyeye( C33209)上對應 gcc 編譯器的定義: define PACK_STRUCT_FIELD(x) x __attribute__((packed)) define PACK_STRUCT_STRUCT __attribute__((packed)) define PACK_STRUCT_BEGIN define PACK_STRUCT_END sys_arch操作系統(tǒng)相關部份 sys_arch.[ch]中的內容是與 OS 相關的一些結構和函數,主要可以分為四個部份: (1) sys_sem_t 信號量 LwIP 中需要使用信號量通信,所以在 sys_arch 中應實現信號量結構體和無錫科技職業(yè)學院嵌入式系統(tǒng)工程專業(yè) 畢業(yè)設計(論文) 15 處理函數: struct sys_sem_t sys_sem_new() //創(chuàng)建一個信號量結構 sys_ sem _free() //釋放一個信號量結構 sys_ sem _signal() //發(fā)送信號量 sys_ arch_sem _wait() //請求信號量 由于 181。C/OSII 已經實現了信號量 OS_EVENT 的各 種操作,并且功能和 LwIP上面幾個函數的目的功能是完全一樣的,所以只要把 181。C/OSII 的函數重新包裝成上面的函數,就可以直接使用了。 (2) sys_mbox_t 消息 LwIP 使用消息隊列來緩沖、傳遞數據報文,因此要在 sys_arch 中實現消息隊列結構 sys_mbox_t,以及相應的操作函數: sys_mbox_new() //創(chuàng)建一個消息隊列 sys_mbox_free() //釋放一個消息隊列 sys_mbox_post() //向消息隊列發(fā) 送消息 sys_arch_mbox_fetch() //從消息隊列中獲取消息 181。C/OSII 同樣實現了消息隊列結構 OSQ 及其操作,但是 181。C/OSII 沒有對消息隊列中的消息進
點擊復制文檔內容
醫(yī)療健康相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1