飛思卡爾程序調(diào)試技巧_第1頁
飛思卡爾程序調(diào)試技巧_第2頁
飛思卡爾程序調(diào)試技巧_第3頁
飛思卡爾程序調(diào)試技巧_第4頁
飛思卡爾程序調(diào)試技巧_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

前言調(diào)試程序,是軟件開發(fā)過程中的一個(gè)必不可少的環(huán)節(jié)。這篇帖子,匠人試著來整理一下一些調(diào)試的技巧。說到“技巧”,這個(gè)詞自從被所長批臭之后,匠人就嚇得不敢再提,生怕一不小心就暴露了思想的淺薄和眼光的局限,呵呵。所以咱們不叫“技巧”,干脆低調(diào)點(diǎn),就叫“雕蟲小技”吧。這里所討論的“調(diào)試”技巧,有些是必須結(jié)合開發(fā)工具本身的功能來實(shí)現(xiàn),而有些可以通過燒錄芯片來驗(yàn)證。各種開發(fā)工具,提供的功能多少強(qiáng)弱也不盡相同,這些方法也未必都能套用。僅供參考吧。最后說明一下,這是沒有草稿的帖子,匠人仍然以不定期連載的方式,邊寫邊發(fā)邊改??赡芙Y(jié)構(gòu)會(huì)比較混亂。歡迎大家一起參與討論。磨刀不誤砍柴功在調(diào)試之前,需要掌握以下一些基本功:1、熟悉當(dāng)前的開發(fā)(調(diào)試)環(huán)境,比如:設(shè)置斷點(diǎn)、單步運(yùn)行、全速運(yùn)行、終止運(yùn)行,查看RAM、查看堆棧、查看IO口狀態(tài)……總之,要熟練掌握基本操作的方法,并深刻了解其中意義。2、 了解芯片本身的資源和特性。3、 了解一點(diǎn)匯編語言的知識(shí)。(本來匠人是準(zhǔn)備寫“精通”的,但考慮到現(xiàn)狀,還是“放低”這方面的要求罷了)。4、 掌握基本的電路知識(shí)和排錯(cuò)能力。(軟件調(diào)試有時(shí)也會(huì)牽涉到硬件原因。總不能連三極管的好壞都不能識(shí)別吧?)5、 萬用表、示波器、信號(hào)發(fā)生器……這些工具總該會(huì)用吧?6、 搜索、鑒別資料的能力。(內(nèi)事問百度、外事問古狗、有事沒事上21ic網(wǎng))7、 與人溝通,描述問題的能力。(調(diào)試36計(jì)的最后一計(jì)——就是向他人討教。當(dāng)然,你得把話說明白才行)差不多了,如果上述7把砍柴刀磨好了,就可以開始調(diào)試了。接下來,請(qǐng)調(diào)入你的程序……優(yōu)先調(diào)試人機(jī)界面面對(duì)程序中的一大堆模塊,無從下手是嗎?好吧,匠人告訴你,先調(diào)顯示模塊,然后是鍵盤。為什么要先調(diào)顯示模塊?道理很簡單,我們說“眼睛是心靈的窗戶”,同樣,“顯示是程序的窗戶”。一旦把顯示模塊調(diào)試好了,就可以通過這個(gè)窗口,偷窺(天吶,這兩個(gè)居然是敏感字?。┏绦騼?nèi)部的數(shù)據(jù)和狀態(tài)了。然后緊接著,就是調(diào)試鍵盤模塊。有了這個(gè)按鍵,我們就可以人工干預(yù)程序的運(yùn)行了?!裁矗愕某绦驔]有顯示和按鍵?——這位童鞋,你真不幸,請(qǐng)去檢查一下自己的人品和星座運(yùn)程先。謝謝。實(shí)在是沒顯示?再看看系統(tǒng)有蜂鳴器嗎?如果僥幸有的話,也能湊合著發(fā)發(fā)提示聲音吧?或者,有串口嗎?可以考慮借助PC端的串口調(diào)試軟件來收發(fā)數(shù)據(jù),這也是一個(gè)間接的人機(jī)交流方法??偠灾?,要盡快建立人機(jī)交流界面。四、慢鏡頭的威力四、2009年春晚捧紅了魔術(shù)師劉謙(這位老兄名“謙”,其實(shí)一點(diǎn)都不謙虛——長的帥不是錯(cuò),出來拽就是罪過了?。?,也勾起了大家對(duì)魔術(shù)的濃厚興趣,如何識(shí)破那些快速的眼花繚亂的魔術(shù)手法呢?很簡單,用慢鏡頭回放即可。據(jù)說劉謙那個(gè)橡皮筋魔術(shù)的手法就是被人如此識(shí)破的?;氐轿覀儐纹瑱C(jī)上來。我們知道,單片機(jī)的運(yùn)行速度,一般都是在幾M到幾十M(當(dāng)然,也有為了節(jié)能而采用幾十K的低速)。不管怎么樣,這個(gè)速度都遠(yuǎn)遠(yuǎn)超出了我們?nèi)搜勰軌蚍直娴乃俣?。眼睛一?也許幾M條指令已經(jīng)執(zhí)行過去了。比如說數(shù)碼管顯示(假設(shè)有4位數(shù)碼管)。平時(shí)我們看到數(shù)碼管同時(shí)點(diǎn)亮著,但是實(shí)際上,這4個(gè)數(shù)碼管是逐個(gè)掃描的。在任意一個(gè)時(shí)刻,只有一位數(shù)碼管被點(diǎn)亮。在微觀上,我們可以進(jìn)一步把每位數(shù)碼管的掃描動(dòng)作細(xì)分為以下幾個(gè)步驟:1、關(guān)閉上一位數(shù)碼管的位選信號(hào);2、輸出當(dāng)前位數(shù)碼管的段選信號(hào);3、開啟當(dāng)前位數(shù)碼管的位選信號(hào);4、 啟動(dòng)1ms延時(shí);5、 延時(shí)結(jié)束后,指針移動(dòng)到下一位數(shù)碼管,并重復(fù)上述4個(gè)步驟,如此周而復(fù)始。你看,這樣是不是就像用一個(gè)慢鏡頭在分解顯示掃描的動(dòng)作了?那么如何實(shí)現(xiàn)這個(gè)慢鏡頭呢?方法很多:1、單步運(yùn)行(需要仿真器支持);2、 在每一步分動(dòng)作之后設(shè)立斷點(diǎn)(需要仿真器支持);3、 在每一步分動(dòng)作之后插入足夠的延時(shí),讓我們?nèi)庋劭梢钥辞宄@些分動(dòng)作(不需要仿真器,適合燒片測(cè)試);通過慢鏡頭的反復(fù)回放,我們就可以發(fā)現(xiàn),到底是哪一個(gè)分動(dòng)作出現(xiàn)了問題。這個(gè)技巧,不僅僅適用于調(diào)試顯示程序,也適用于按鍵掃描或其它模塊。只要一個(gè)功能可以被細(xì)分為若干的動(dòng)作,那么這一招“慢鏡頭分解法”都是可以使用的。五、 給程序安裝個(gè)黑匣子某年某月的某一天,一架飛機(jī)以優(yōu)美的拋物線形狀,一頭栽到海里去了……幾天后,人們找到了飛機(jī)的黑匣子,里面記錄了飛行員的最后一句話:“天吶,我看到火星人了!……”以上空難情節(jié)我們經(jīng)常會(huì)通過新聞看到吧(當(dāng)然,最后一句是匠人版的科幻情節(jié))??纯?,飛機(jī)的黑匣子可以記錄并再現(xiàn)現(xiàn)場(chǎng),多么神奇!歐耶!我們?cè)谡{(diào)試程序時(shí),也可以借鑒這個(gè)方法,給程序按裝一個(gè)黑匣子。程序中的黑匣子其實(shí)就是一個(gè)在內(nèi)存中開辟的隊(duì)列。隊(duì)列的原理我們很清楚,先進(jìn)先出,后進(jìn)后出(與飛機(jī)黑匣子的特性相同)。比如說吧,假設(shè)我們的系統(tǒng)在工作中,某個(gè)輸入量的采樣值經(jīng)常受到不明原因的擾動(dòng)。我們要摸清這種擾動(dòng)的規(guī)律,以便對(duì)癥下藥。但是這種擾動(dòng)稍縱即逝。我們的困擾是:程序正常運(yùn)行時(shí)看不出規(guī)律,單步走又難以捕捉擾動(dòng)。怎么辦?有沒有辦法,把擾動(dòng)記錄下來?當(dāng)然可以。我們可以利用系統(tǒng)里剩余的RAM,開辟一塊單元,做成隊(duì)列。并寫段測(cè)試程序,定時(shí)把新采樣值壓入隊(duì)列。然后我們讓程序運(yùn)行,在需要的(任意)時(shí)刻,讓程序停下來。這時(shí),隊(duì)列里記錄的就是最新一批采樣數(shù)據(jù)。只要隊(duì)列的深度足夠大,我們就可以找出擾動(dòng)的規(guī)律來。——什么,你問我什么叫隊(duì)列?——匠人曰“天吶,我看到火星人了!……”六、 在程序中設(shè)卡伏擊,攔截流竄犯警察抓流竄犯的場(chǎng)面我們都很熟悉了。一般的方法,就是以案發(fā)現(xiàn)場(chǎng)為中心,在犯罪分子逃竄的必經(jīng)路口,設(shè)卡盤查。有道是天網(wǎng)恢恢疏而不漏,叫你插翅也飛不過去。有時(shí),程序中也會(huì)出現(xiàn)這樣一個(gè)“流竄犯”,它就是PC指針。對(duì)于一個(gè)未經(jīng)調(diào)試的不成熟的程序來說,導(dǎo)致PC指針跑飛的因素很多,我們逐條列舉并分析之:1、 電磁干擾(如果不是在現(xiàn)場(chǎng),那么這一條可以暫時(shí)不考慮。因?yàn)樵谡{(diào)試環(huán)境下一般不會(huì)有干擾);2、 程序結(jié)構(gòu)錯(cuò)亂(喜歡用jmp或goto類指令的尤其要注意這點(diǎn));3、 堆棧溢出或錯(cuò)亂,導(dǎo)致PC指針出錯(cuò);4、 PC指針被錯(cuò)誤改寫(有些芯片PC指針存儲(chǔ)單元和其它RAM單元的訪問方法是一樣的,很容易被誤寫);

5、數(shù)據(jù)錯(cuò)誤,導(dǎo)致程序沒有按照預(yù)期路徑運(yùn)行;6、看門狗溢出(原因一般是因?yàn)榭撮T狗設(shè)置不當(dāng)、喂狗不及時(shí)、程序堵塞或者程序死循環(huán));7、中斷被意外觸發(fā);8、外部電路問題,比如電源不穩(wěn)等等;9、其它……當(dāng)我們開始懷疑PC指針時(shí),我們首先要做的是確認(rèn)PC指針是否跑飛了,其次要找到PC指針跑飛的證據(jù)。我們可以在不同的分支路口,或者在我們懷疑的地方,設(shè)立斷點(diǎn),看程序是否走了不該經(jīng)過的路徑。舉個(gè)例子,比如我們懷疑程序運(yùn)行中看門狗發(fā)生了溢出復(fù)位,那么很簡單,我們只需要在初始化入口設(shè)立一個(gè)斷點(diǎn),讓程序運(yùn)行。正常情況下,程序只會(huì)經(jīng)過一次該斷點(diǎn)。如果再次經(jīng)過該斷點(diǎn)被攔截,那么我們就可以初步確診“看門狗發(fā)生了溢出復(fù)位”。再舉個(gè)例子,比如程序中某個(gè)環(huán)節(jié)有A、B兩個(gè)分支,正常時(shí)只走A分支,不正常時(shí)才走B分支。那么我們可以在B分支設(shè)立斷點(diǎn),程序一旦異常,走入B分支,就可以被攔截下來。程序被攔截下來后,我們可以勘察現(xiàn)場(chǎng),查看RAM區(qū)內(nèi)容和程序剛走過的路徑,從中分析導(dǎo)致程序PC指針錯(cuò)亂的原因。當(dāng)然,并不是每一次伏擊守候都能一舉擒獲流竄犯(敵人是“狡猾”的,呵呵)。這就需要我們多一份耐心和技巧。通過不斷調(diào)整斷點(diǎn)位置來改變攔截地點(diǎn)。逐漸逼近并找到根源(流竄犯的老巢),然后一舉拿下。七、 向獵人學(xué)習(xí)挖坑設(shè)陷阱的技術(shù)上一回說到,在程序中設(shè)卡(斷點(diǎn)),可以攔截流竄犯(程序流程錯(cuò)誤)。實(shí)際上,斷點(diǎn)的功能可強(qiáng)大了,不但可以攔截程序流程錯(cuò)誤,也可以攔截?cái)?shù)據(jù)錯(cuò)誤。當(dāng)然,這需要一些輔助手段。還是以前面提到的一個(gè)例子來說。比如某個(gè)采樣值(當(dāng)然,也不一定是采樣值,在這里也可以是RAM中任意單元中的值)受到未明因素影響,經(jīng)?!皝y跳”。這種數(shù)據(jù)出錯(cuò)的原因,可能如下:1、 計(jì)算錯(cuò)誤(比如溢出),導(dǎo)致結(jié)果出錯(cuò);2、 被其它程序段誤改寫;3、 其它原因……當(dāng)數(shù)據(jù)出錯(cuò)后,我們希望能夠在最快時(shí)間內(nèi),讓程序停下來,這樣才能有效查出是哪一段程序出了問題。有些調(diào)試環(huán)境本身可以捕捉數(shù)據(jù)錯(cuò)誤,并產(chǎn)生斷點(diǎn)中斷。這當(dāng)然最好不過。但是如果調(diào)試環(huán)境本身不提供這種捕捉功能,那么就需要我們自己來制造機(jī)關(guān)了??纯传C人是是如何做的:他們會(huì)在獵物經(jīng)過的地方,挖個(gè)坑,上面蓋上浮土。當(dāng)小型動(dòng)物經(jīng)過時(shí),浮土不會(huì)塌陷。而當(dāng)體重較大的動(dòng)物經(jīng)過時(shí),它們的體重就會(huì)壓垮浮土,掉進(jìn)獵人的陷阱。獵人的這個(gè)陷阱機(jī)關(guān),妙就妙在是它“智能”的,會(huì)根據(jù)動(dòng)物的體重進(jìn)行篩選。輕巧的小白兔來了——放過,笨重的大狗熊來了——捕獲!歐耶!好了,回到程序中來,假設(shè)我們要監(jiān)控的那個(gè)RAM單元,正常值域?yàn)?~9;那么我們可以寫一段測(cè)試代碼,判斷數(shù)值是否>9,根據(jù)判斷結(jié)果執(zhí)行兩個(gè)分支,并在那條錯(cuò)誤的分支路徑上設(shè)置斷點(diǎn)。如果數(shù)據(jù)沒有出錯(cuò),程序會(huì)一直運(yùn)行(小白兔請(qǐng)放心過去);直到數(shù)據(jù)錯(cuò)誤發(fā)生,斷點(diǎn)會(huì)自動(dòng)停下來(大狗熊給我拿下)。我們可以把這段測(cè)試程序,插入在“狗熊出沒”的地方,“守株待兔”(其實(shí)“守坑待熊”)。接下來的事情,就跟上回說的抓流竄犯原理差不多了。——什么,你喜歡吃兔肉?不喜歡吃熊掌?——你也太沒有愛心了,唉。。。。。八、在程序中設(shè)置竊聽器八、1、你的定時(shí)中斷頻率是否等于設(shè)想的那個(gè)值?2、你的主程序循環(huán)一次花了多少時(shí)間?3、你的程序中某一次復(fù)雜計(jì)算需要耗費(fèi)多少時(shí)間?4、你的程序里某個(gè)動(dòng)作發(fā)生的具體時(shí)刻是什么時(shí)候?5、……——也許你不關(guān)心這些時(shí)間,那么你就不必看這一回了。但是——1、當(dāng)我們的計(jì)時(shí)時(shí)鐘發(fā)生偏差時(shí),我們希望知道定時(shí)中斷是否正常發(fā)生了;2、當(dāng)我們的程序任務(wù)較多,并已經(jīng)導(dǎo)致任務(wù)堵塞時(shí),我們需要知道主程序運(yùn)行一圈的時(shí)間是多少,以便我們合理分割任務(wù),避免堵塞;3、同樣,為了避免任務(wù)堵塞,我們要了解那些復(fù)雜計(jì)算所消耗的時(shí)間,并采取必要的措施(優(yōu)化算法、分時(shí)間片執(zhí)行、調(diào)整執(zhí)行頻率)來保證系統(tǒng)的實(shí)時(shí)性;4、當(dāng)程序中某些動(dòng)作與其它動(dòng)作或狀態(tài)存在時(shí)間上的關(guān)聯(lián)時(shí),我們必須嚴(yán)格控制它的執(zhí)行時(shí)機(jī),確保它在正確的時(shí)刻被執(zhí)行到;5、……我們?nèi)绾尾拍軓耐獠?,?duì)這些這些發(fā)生在程序內(nèi)部的時(shí)間(時(shí)刻)進(jìn)行精準(zhǔn)的測(cè)量?我們當(dāng)然不能鉆到芯片里面去監(jiān)視每一條指令的運(yùn)行情況。但是,我們可以學(xué)習(xí)一下克格勃,給程序安裝個(gè)竊聽器。具體方法:1、首先,你需要一臺(tái)示波器。沒有的話,可以去偷、去搶、去騙??傊?,最終你搞定了這臺(tái)示波器,歐耶。2、其次,你的芯片上要有一個(gè)空余的輸出口用作測(cè)試口。沒有的話,就拆東墻補(bǔ)西墻吧,先把不相關(guān)功能的10口挪用一下啦??傊?,最終你搞定了這個(gè)測(cè)試□,歐耶。3、 接下來,你可以在你要“監(jiān)聽”的程序段中,寫一小段程序,對(duì)那個(gè)測(cè)試口取反(或者輸出一個(gè)脈沖)。4、 最后讓程序全速運(yùn)行起來,你就可以用示波器來監(jiān)聽程序的運(yùn)行狀況了。以本回開始舉的幾個(gè)例子來分析:1、 如果要測(cè)試定時(shí)中斷頻率,只要在中斷中對(duì)這個(gè)測(cè)試口取反,即可通過示波器觀測(cè)中斷頻率;2、 如果要測(cè)試主程序運(yùn)行周期,只要把取反指令放在主程序循環(huán)圈中,即可;3、 如果要測(cè)試一次復(fù)雜計(jì)算(或其它動(dòng)作)需要消耗多少時(shí)間,我們只需在計(jì)算之前把測(cè)試口變?yōu)楦唠娖?,等到?jì)算結(jié)束后立即把輸出口恢復(fù)到低電平,這段高電平的時(shí)間長度,即為計(jì)算消耗時(shí)間;4、 如果想知道兩個(gè)動(dòng)作之間的延時(shí)時(shí)間,我們也可以按照上一條方法一樣,在兩個(gè)動(dòng)作發(fā)生前把測(cè)試口分別取一次反。就可以通過示波器輕松測(cè)試出來。5、 根據(jù)實(shí)際案例的具體情況,我們可以把這種竊聽技術(shù)變換出更多花樣。比如我們可以用兩個(gè)10口做測(cè)試□,同步檢測(cè)兩個(gè)事件的發(fā)生時(shí)刻,并測(cè)量其相互時(shí)間關(guān)系。等等……6、 引申開去,這個(gè)測(cè)試口不僅僅可以檢測(cè)時(shí)間,也可以用來檢測(cè)內(nèi)部數(shù)據(jù)的變化。比如當(dāng)某個(gè)數(shù)據(jù)的值發(fā)生“越界”時(shí),輸出一個(gè)高電平(平時(shí)為低電平)。等到我們?nèi)〉梦覀兿胍臏y(cè)試數(shù)據(jù),我們可以把這個(gè)臨時(shí)的測(cè)試口功能撤銷。同時(shí),那些測(cè)試代碼也可一并刪除或屏蔽??偨Y(jié):把程序內(nèi)在的、不直觀的、快速的一些狀態(tài)變化,通過io口傳遞出來,以便我們觀測(cè)。一一這就是我們這一回所講的“竊聽器”調(diào)試技巧的精髓。——警告,請(qǐng)勿把“竊聽器”安裝在女生宿舍哦!——那樣的話,匠人豈不就成為教唆犯了。罪過,罪過。。。。。九、九、快鏡頭加速前面已經(jīng)講過慢鏡頭,這回再講快鏡頭。慢鏡頭的作用的把程序的運(yùn)行節(jié)奏降低,以便我們能夠“一幀一幀”地觀測(cè)程序的運(yùn)行狀態(tài)。而快鏡頭的作用,則相反,就是讓程序的運(yùn)行節(jié)奏變快,讓我們驗(yàn)證一些原本需要消耗較多等待時(shí)間的功能。比如說,一個(gè)定時(shí)功能,定時(shí)范圍是可調(diào)的,為1~24小時(shí)。如果我們要去驗(yàn)證,總不能傻等1~24小時(shí)吧?怎么辦呢?快鏡頭來了。我們知道程序中的時(shí)間,是靠一級(jí)一級(jí)的計(jì)時(shí)器累計(jì)上來的。比如一個(gè)程序中分別有“時(shí)、分、秒”三個(gè)計(jì)時(shí)器單元。依次計(jì)數(shù),逢60進(jìn)一。“秒”計(jì)滿60次了,則“分”+;1“分”計(jì)滿60次了,則“時(shí)”+;1“時(shí)”計(jì)數(shù)超過設(shè)定值了,我們就可以判定定時(shí)結(jié)束。那么我們只要修改一下“分”到“時(shí)”的進(jìn)位關(guān)系。比如改成:“分”+;1“分”計(jì)滿1次(原本是60次)了,則“時(shí)”+。1這樣一來,整個(gè)定時(shí)系統(tǒng)速度就比原來提高60倍。測(cè)試起來就很省時(shí)間了。當(dāng)然,測(cè)試完成后,記得要把剛才做的測(cè)試代碼改回原樣哦。舉一反三,“快鏡頭”技巧,不僅僅用在定時(shí)方面,也可以用在計(jì)數(shù)方面。通過對(duì)數(shù)據(jù)的變化“加速”,來加快我們的測(cè)試速度?!裁?,你喜歡磨洋工,愿意花24小時(shí)去測(cè)試那個(gè)定時(shí)功能?——哈哈,放心,我不會(huì)告訴你的老板的——除非他使出美人計(jì)來對(duì)付我。歐耶!十、拉閘睡覺!統(tǒng)一管理調(diào)試代碼前面介紹的幾種方法,需要在程序中增加一些臨時(shí)性的調(diào)試代碼。有些調(diào)試代碼是無害的,比如只是一些延時(shí)指令,或者是在不使用的10口上有一些輸出而已。但另一些調(diào)試代碼,與正式要求的程序功能是相沖突的。那么這些代碼在完成調(diào)試之后就應(yīng)該被刪除或屏蔽掉。那么會(huì)不會(huì)出現(xiàn)意外,把本該被刪除的代碼漏刪了?結(jié)果埋下禍害?——如果調(diào)試代碼少,出錯(cuò)的概率比較低,只要認(rèn)真仔細(xì)點(diǎn)還好辦;但是如果程序中的調(diào)試代碼寫得比較多,那么確實(shí)很擔(dān)心會(huì)發(fā)生這種問題?;蛘吡硪环N情況,就是前腳把調(diào)試代碼刪除或屏蔽掉,后腳發(fā)現(xiàn)還需要再調(diào)試,又要重新輸入或打開那些代碼?如何管理這些代碼呢?這個(gè)我們要向宿舍管理員學(xué)習(xí)了。他們是這么做的,給所有房間安裝一個(gè)總電閘。到了晩上11點(diǎn)就把總閘一拉,看書的、打牌的、喝酒的、胡侃的、泡妞的、夜游的、Y們都給我老老實(shí)實(shí)睡覺去吧!程序中,這樣的總閘也是可以通過條件編譯的方式來實(shí)現(xiàn)的。就像這樣://#defineTEST_MD//調(diào)試狀態(tài)標(biāo)志(在調(diào)試時(shí)打開,正式燒錄芯片時(shí)屏蔽)//在編寫調(diào)試代碼時(shí),采用下面的形式:#ifdefTEST_MD//如果是調(diào)試狀態(tài),則編譯這段代碼#else//如果不是調(diào)試狀態(tài),則編譯這段代碼#endif一個(gè)總閘,把管理簡單化了。歐耶!一、十一、刪繁就簡,從最

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論