999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

為μC/OS0II添加加載外部程序支持

2010-06-22 08:18:16蔡富強郭兵沈艷
單片機與嵌入式系統應用 2010年9期
關鍵詞:嵌入式分配

蔡富強,郭兵,沈艷

(1.四川大學 計算機學院,成都610065;2.電子科技大學)

蔡富強(碩士生),主要研究方向為嵌入式實時系統;郭兵(教授),主要研究方向為嵌入式實時系統、SoC和中間件;沈艷(副教授),主要研究方向為虛擬儀器、分布式測試。

引 言

嵌入式系統是一個專用的計算機系統,它在現實生活中有著極其廣泛的用途,大到飛機、宇宙飛船,小到各種手持設備(如手機),都是嵌入式系統的具體應用。可以說,嵌入式系統已經漸漸融入我們的生活,變得不可或缺。這種趨勢將隨著物聯網[1]的推廣變得更加明顯。

嵌入式系統的一個比較關鍵的技術就是嵌入式操作系統。目前常用的嵌入式操作系統有 Linux、μC/OS[2]、WinCE、VxWorks、Symbian等,其中μC/OS以其開放源碼、高效而小巧,同時又兼具實時性等特點得到了比較廣泛的應用。

μC/OS中只實現了操作系統的一些基本功能(帶優先級可搶占的進程管理和一個比較簡單的內存管理方案),這是它只有幾千行代碼的基本原因。正因為如此,它并不適用于所有嵌入式應用,尤其是面向高端的應用。為了拓展μC/OS的應用范圍,很多改進措施被提出。一些學者為μC/OS添加功能模塊,以拓展其應用,如TCP/ⅠP協議棧、GUⅠ、文件系統等,參考文獻[3]為μC/OS添加內存文件系統,參考文獻[4]為μC/OS添加基于FAT的Flash文件系統;也有學者改進μC/OS的基本模塊,以滿足新的需求,參考文獻[5]改進了μC/OS的任務調度模塊,參考文獻[6]解決μC/OS消息隊列數據通信安全問題;參考文獻[7]擴展μC/OS到可重構系統,使其支持軟硬件任務的統一調度。

本文也以拓展μC/OS應用為目的,為μC/OS添加加載外部可執行程序支持,同時也提出一種內存分配方案,以實現為程序映像和棧高效分配內存。由于目前在嵌入式領域應用最多的處理器為ARM系列,本功能的實現針對ARM平臺。

1 內存分配

μC/OS內核實現的內存分配方案支持多種大小的內存塊,但不同大小內存塊之間獨立管理,這種實現使用不方便,不能實現動態而高效的內存分配。本文提出一種獨立的內存管理機制,以實現為程序映像和棧高效分配內存。

實現參考了Linux內核的分區頁面管理算法[8]。將全局內存劃分為以512字節為單位的塊,并為每個內存塊建立描述符,通過描述符來管理內存塊。內存塊按塊數的幾何級數組織成多級鏈表,第一級用于分配1個塊,第二級用于分配地址連續的2個塊,第三級用于分配地址連續的4個塊,依次類推。由連續內存塊的首塊內存的描述符參與鏈表鏈接。將實現下面幾個函數,具體描述見1.2小節。

1.1 數據結構定義

實現該內存管理,需要一些全局變量和數據結構定義。ⅠNT8U*pmem指向靜態分配的全局內存。塊描述符的定義如下:

BLOCK_DESC表示內存塊描述符,每個內存塊都有一個內存描述符,并且從前到后一一對應。next和prev用于多級鏈表的鏈接;order的最高位表示該連續的內存塊序列是否被使用,其余位表示所屬鏈表級數。鏈表級數根據全局內存大小自動調整,在嵌入式應用中一般不超過10(能分配最大512KB的連續內存),用ⅠNT8Ugorder表示鏈表的級數。BLOCK_DESC*desc_begin表示塊描述符的首地址。void*block_begin表示內存塊的首地址。BLOCK_DESC*desc_list[11]用于鏈接多級鏈表。

1.2 函數實現

DescToBlock函數實現從內存塊描述符地址到內存塊地址的轉換。由于塊描述符與內存塊依次對應,只要有兩者的內存首地址,就很容易實現。具體實現只需要下面的表達式:return(char*)block_begin+ (desc-desc_begin)<<9。BlockToDesc函數功能正好相反,實現方式類似。

BlockMemⅠnit函數完成該內存管理方案的初始化。首先,根據提供的全局內存的大小確定多級鏈表級數,最多為10級,并初始化全局變量gorder,內存塊數為size/(512+sizeof(BLOCK_DESC));然后,根據全局內存能夠容納的內存塊數將其分為兩部分,前面用于存儲所有的塊描述符(將塊描述符清零),后面部分就是用于分配的內存塊,并初始化全局變量block_begin和desc_begin;最后,將內存塊按最大化的原則分配于多級鏈表中,理想情況下所有的內存塊都分配于所支持的最大級鏈表中,大小不滿足的則分配到低級別的鏈表中(仍須按最大化原則)。

圖1表示初始化后的內存布局(虛線表示不一定存在)。

GetBlocks函數用于分配(1<<order)個連續的內存塊。算法描述如下:

① 檢查參數order是否有效,無效返回null,有效繼續;

②檢查order級鏈表是否有空閑內存,沒有轉下一步,否則從鏈表中取出第一塊,修改描述符的使用標志位,通過函數DescToBlock獲取內存地址并返回;

③ 從更高級別獲取空閑內存,如果獲取失敗,返回null,否則,逐級分裂直到order級鏈表,并修改首個描述符的所屬鏈表級數,轉第二步。

圖1 初始化后的內存布局

FreeBlocks函數用于釋放指定地址處開始的(1<<order)個連續的內存塊。該函數是實現高效內存分配的關鍵,為了保證內存不會被分得過碎,需要迭代檢查釋放內存是否可以同相鄰的內存合并(看描述符order字段是否相同)。算法描述如下:

①通過函數BlockToDesc獲取塊描述符的地址,將描述符設置為未使用;

② 檢查order級鏈表中是否有與待釋放內存相鄰的內存(前后都有相鄰的選前面的參與合并)。如果沒有相鄰的,轉第③步。否則,將相鄰內存的首個內存塊描述符從鏈表中刪除,修改相關的兩個塊描述符的order字段(在前面的加1,后面的清零),參數order加1,繼續執行第②步;

③ 將內存插入order級鏈表中。

2 加載程序

要實現外部程序加載,需要操作系統和編譯器的密切配合,整個過程非常復雜。為了使程序加載器盡可能簡單和高效,采用下面的措施:

① 修改編譯μC/OS內核的Makefile文件,使內核鏈接地址和加載地址相同,通過NM工具導出內核函數地址表。將地址表以函數指針的形式組織在頭文件中,另外還須在頭文件中加入內核中關于數據類型和結構的定義,供外部程序使用。以本文第一部分中的BlockMemⅠnit函數為例,假設函數地址位于0x00008000,在頭文件中作如下聲明即可:

② 使main函數的代碼位于程序映像的入口處(為簡單起見,main函數不支持參數)。只需采用下面措施即可。編程時保證main函數是所在文件中第一個被實現的函數,修改LD鏈接腳本使包含main函數的目標文件的代碼段位于整個可執行程序的開始。

③通過OBJCOPY工具將鏈接生成的ELF格式的可執行程序轉化為二進制映像。

④ 為μC/OS添加函數void Exec(char*name),用于加載二進制映像,并為其創建進程。

通過以上措施,加載器的實現非常簡單,只需為二進制映像分配內存并將其加載進內存,然后調用函數OSTaskCreate(二進制映像加載地址(main),null,通過函數 GetBlocks分配的棧空間,優先級)即可,由于ARM平臺沒有直接內存尋址模式,二進制映像不需要重定位就可執行。圖2為Exec函數的流程。

圖2 Exec函數執行流程

結 語

測試時采用S3C2440系列開發板作為目標平臺。首先,修改u-boot,以使其能夠加載μC/OS到指定地址處,并完成內核的引導工作;其次,移植μC/OS,使其能夠在S3C2440系列開發板上運行;然后,按參考文獻[3]或[4]中提供的方法為μC/OS實現文件系統支持;最后,按本文中的方法實現二進制映像加載功能。經測試,該方案是可行的。當然,該方案也存在一定的局限性,如只針對ARM平臺,內存分配方案還不能通用(對小內存塊分配利用率低),又由于μC/OS內核不支持保護模式,安全性也是一個問題。

[1]王保云.物聯網技術研究綜述[J].電子測量與儀器學報,2009,23(12):1-7.

[2]Labrosse Jean J.嵌入式實時操作系統μC/OS-ⅠⅠ[M].邵貝貝,等譯.2版.北京航空航天大學出版社,2003.

[3]張紅兵.大容量內存文件系統設計及μC/OS下的實現[J].單片機與嵌入式系統應用,2004(3):15-20.

[4]王命延.一種加載在μC/OS-ⅠⅠ內核上的嵌入式文件系統[J].南昌大學學報:理科版,2005,29(2):197-204.

[5]張旭.μC/OS ⅠⅠ內核任務調度模塊的分析與改進[J].單片機與嵌入式系統應用,2005(4):71-76.

[6]曾蜀芳.μC/OS-ⅠⅠ中消息隊列通信的數據安全問題[J].計算機技術與發展,2009,19(8):151-154.

[7]周博.SHUM-UCOS:基于統一多任務模型可重構系統的實時操作系統[J].計算機學報,2006,29(2):208-218.

[8]Bovet Daniel P,Cesati Marco.深入理解Linux內核[M].陳莉君,等譯.2版.北京:中國電力出版社,2004:223-268.

猜你喜歡
嵌入式分配
基于可行方向法的水下機器人推力分配
應答器THR和TFFR分配及SIL等級探討
遺產的分配
一種分配十分不均的財富
TS系列紅外傳感器在嵌入式控制系統中的應用
電子制作(2019年7期)2019-04-25 13:17:14
績效考核分配的實踐與思考
嵌入式系統通信技術的應用
電子制作(2018年18期)2018-11-14 01:48:16
搭建基于Qt的嵌入式開發平臺
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
Altera加入嵌入式視覺聯盟
主站蜘蛛池模板: 国产美女视频黄a视频全免费网站| 国产91高跟丝袜| 欧美劲爆第一页| 在线观看国产黄色| 欧美日韩综合网| 中文成人在线视频| 国产人人射| 性做久久久久久久免费看| 中文字幕在线播放不卡| 欧美日韩精品综合在线一区| 精品一区二区三区无码视频无码| 欧美日韩国产高清一区二区三区| 3p叠罗汉国产精品久久| 国产精品无码AV片在线观看播放| 成年网址网站在线观看| 热re99久久精品国99热| 免费a级毛片18以上观看精品| jizz在线观看| 免费在线观看av| 91外围女在线观看| 性欧美精品xxxx| 亚洲精品手机在线| 久久久久国产精品免费免费不卡| 亚洲第一区在线| 午夜少妇精品视频小电影| 在线看免费无码av天堂的| 高潮毛片无遮挡高清视频播放| 亚洲手机在线| 欧美日韩综合网| 欧美午夜网| 国产成人精品免费视频大全五级| 亚洲国产一区在线观看| 国产麻豆精品手机在线观看| 精品国产99久久| 91无码视频在线观看| 国产精品白浆无码流出在线看| 中文字幕佐山爱一区二区免费| 欧美日韩资源| 91久久青青草原精品国产| 国产成人综合久久精品下载| 一本视频精品中文字幕| 亚洲av无码专区久久蜜芽| 欧美日韩精品在线播放| 99爱在线| 亚洲熟女偷拍| 原味小视频在线www国产| 黄色网页在线播放| 国产精品无码制服丝袜| 精品国产自| 欧美成人A视频| 先锋资源久久| 国产一级二级三级毛片| 成色7777精品在线| 日韩天堂在线观看| 国产喷水视频| 亚洲国产精品一区二区第一页免 | 四虎永久在线| 2020极品精品国产 | 日韩欧美一区在线观看| 色婷婷在线影院| 香蕉国产精品视频| 国产小视频免费| 伊人中文网| 91福利免费视频| 国产精品99在线观看| 久久精品最新免费国产成人| 亚洲成a人片| 亚洲a级毛片| 久操中文在线| 久久伊人操| 乱码国产乱码精品精在线播放| 成人福利视频网| 欧洲av毛片| 一级毛片在线播放| 国产日本欧美在线观看| 无码不卡的中文字幕视频| 国产精品区视频中文字幕 | 日韩福利在线观看| 中文字幕首页系列人妻| 欧美成人区| 亚洲精选无码久久久| 亚洲高清无在码在线无弹窗|