眾賞文庫
全部分類
  • 抗擊疫情 >
    抗擊疫情
    病毒認(rèn)知 防護(hù)手冊 復(fù)工復(fù)產(chǎn) 應(yīng)急預(yù)案 防控方案 英雄事跡 院務(wù)工作
  • 成品畢設(shè) >
    成品畢設(shè)
    外文翻譯 畢業(yè)設(shè)計(jì) 畢業(yè)論文 開題報(bào)告 文獻(xiàn)綜述 任務(wù)書 課程設(shè)計(jì) 相關(guān)資料 大學(xué)生活 期刊論文 實(shí)習(xí)報(bào)告
  • 項(xiàng)目策劃 >
    項(xiàng)目策劃
    土地準(zhǔn)備 規(guī)劃設(shè)計(jì) 開工開盤 項(xiàng)目綜合 竣工移交 售后移交 智慧方案 安全專項(xiàng) 環(huán)境影響評(píng)估報(bào)告 可行性研究報(bào)告 項(xiàng)目建議書 商業(yè)計(jì)劃書 危害評(píng)估防治 招投標(biāo)文件
  • 專業(yè)資料 >
    專業(yè)資料
    人文法律 環(huán)境安全 食品科學(xué) 基礎(chǔ)建設(shè) 能源化工 農(nóng)林牧畜 綜合待分類 教育經(jīng)驗(yàn) 行政人力 企業(yè)管理 醫(yī)學(xué)衛(wèi)生 IT技術(shù) 土木建筑 考研專題 財(cái)會(huì)稅務(wù) 公路隧道 紡織服裝
  • 共享辦公 >
    共享辦公
    總結(jié)匯報(bào) 調(diào)研報(bào)告 工作計(jì)劃 述職報(bào)告 講話發(fā)言 心得體會(huì) 思想?yún)R報(bào) 事務(wù)文書 合同協(xié)議 活動(dòng)策劃 代理加盟 技術(shù)服務(wù) 求職簡歷 辦公軟件 ppt模板 表格模板 融資協(xié)議 發(fā)言演講 黨團(tuán)工作 民主生活
  • 學(xué)術(shù)文檔 >
    學(xué)術(shù)文檔
    自然科學(xué) 生物科學(xué) 天文科學(xué) 醫(yī)學(xué)衛(wèi)生 工業(yè)技術(shù) 航空、航天 環(huán)境科學(xué)、安全科學(xué) 軍事 政學(xué) 文化、科學(xué)、教育、 交通運(yùn)輸 經(jīng)濟(jì) 語言、文字 文學(xué) 農(nóng)業(yè)科學(xué) 社會(huì)科學(xué)總論 藝術(shù) 歷史、地理 哲學(xué) 數(shù)理科學(xué)和化學(xué) 綜合性圖書 哲學(xué)宗教
  • 經(jīng)營營銷 >
    經(jīng)營營銷
    綜合文檔 經(jīng)濟(jì)財(cái)稅 人力資源 運(yùn)營管理 企業(yè)管理 內(nèi)控風(fēng)控 地產(chǎn)策劃
  • 教學(xué)課件 >
    教學(xué)課件
    幼兒教育 小學(xué)教育 初中教育 高中教育 職業(yè)教育 成人教育 高等教育 考研資源 試題真題 作業(yè)習(xí)題 課后答案 綜合教學(xué)
  • 土木建筑 >
    土木建筑
    專項(xiàng)施工 應(yīng)急預(yù)案 建筑規(guī)范 工藝方案 技術(shù)交底 施工表格 圖片圖集
  • 課程導(dǎo)學(xué) >
    課程導(dǎo)學(xué)
    醫(yī)學(xué)綜合 中醫(yī)養(yǎng)生 醫(yī)學(xué)研究 身心發(fā)展 醫(yī)學(xué)試題 影像醫(yī)學(xué) 醫(yī)院辦公 外科醫(yī)學(xué) 老年醫(yī)學(xué) 內(nèi)科醫(yī)學(xué) 婦產(chǎn)科 神經(jīng)科 醫(yī)學(xué)課件 眼鼻喉科 皮膚病科 腫瘤科 兒科醫(yī)學(xué) 康復(fù)醫(yī)學(xué) 全科醫(yī)學(xué) 護(hù)理學(xué)科 針灸學(xué)科 重癥學(xué)科 病毒學(xué)科 獸醫(yī) 藥學(xué)
  • JSP語言 (共10000 份)
  • 用時(shí):27ms
    • 簡介:第五章廣播語言,廣播是線性媒體,聽眾只能按時(shí)間順序依次收聽,不可能打亂順序,不可能瞬間反復(fù)收聽。廣播是“伴隨收聽”,通常在隨意狀態(tài)。人的聽覺是,聽到感興趣或與自己相關(guān)時(shí),才會(huì)注意。而且,聽后忘前。所以,廣播語言和新聞?wù)Z言是有顯著不同的。,廣播語言,應(yīng)該是一種最符合人的聽覺習(xí)慣和人的思維特性的語言。,什么是人的思維邏輯舉一個(gè)簡單的現(xiàn)象.當(dāng)你說“他來了。”這時(shí),聽到的人就會(huì)自然而然地產(chǎn)生疑問“誰來了”當(dāng)你回答了這個(gè)問題之后,聽者又可能會(huì)產(chǎn)生新的疑問“他干什么來了”等等。這一現(xiàn)象說明,聽眾在聽一件事情的時(shí)候,實(shí)際上是一個(gè)不斷地將聽覺語言轉(zhuǎn)換成思維語言的過程,也是一個(gè)隨著聽覺語言的不斷堆砌而不斷產(chǎn)生疑問和不斷消除疑問的過程,只有在沒有疑問或者在所有的疑問都消除的情況下,他才會(huì)感到“聽清了”,“聽明白了”。反之,他就會(huì)感覺沒聽清,或沒聽懂。所以從根本上說,廣播語言應(yīng)該是一個(gè)不斷消除疑問的過程,而不是與思維擰著或疑問不斷積累而得不到解答的過程。只有當(dāng)廣播語言與人的聽覺習(xí)慣和人的思維活動(dòng)相一致的時(shí)候,這樣的廣播語言才是最好的。,廣播語言的基本要求,通俗化美國廣播新聞學(xué)家馬克霍爾的解釋“你寫新聞時(shí),記住你是在為一個(gè)處于半收聽狀態(tài)的,年齡是9歲孩童那樣文化程度的聽眾寫的。同樣,你的報(bào)道必須很有才氣,能使45歲的公司經(jīng)理和大學(xué)教授受到感動(dòng)。”口語化簡短、淺顯、具體、生動(dòng),貼近生活,有真情實(shí)感,有很強(qiáng)的感染力。規(guī)范化語音、語法、句子結(jié)構(gòu)的安排都需規(guī)范。,示例比較一篇廣播稿和一篇報(bào)紙稿件,“民間驗(yàn)房師”悄然興起經(jīng)濟(jì)參考報(bào)房子賣了不算完事,還要過交房關(guān)。一些開發(fā)商面對(duì)南京市民逐漸覺醒的維權(quán)意識(shí),發(fā)出了這句感慨。2005年以來,南京房市悄然出現(xiàn)“民間驗(yàn)房師”群體,他們與消費(fèi)者共同維權(quán),引導(dǎo)房市理性發(fā)展,在許多城市引起反響。丁渤,南京市某建設(shè)公司副總工程師,是“民間驗(yàn)房師”這一新興行當(dāng)?shù)南刃姓摺?005年,丁渤和他的團(tuán)隊(duì)共接受購房者委托驗(yàn)房4000多套,幾乎包括新上市的所有樓盤,約占當(dāng)年南京商品住宅銷售總量的1/20,平均一天要驗(yàn)房10套。由于中國還沒有“驗(yàn)房師”這方面的資質(zhì)證,因此目前他們大都被稱之為“民間驗(yàn)房師”。他說,建筑面積是否如圖紙所標(biāo)的一致墻面是否有空鼓混凝土強(qiáng)度如何精裝修房用材是否合格有關(guān)房屋質(zhì)量的一切,都是南京“民間驗(yàn)房師”的驗(yàn)房內(nèi)容。目前從事“民間驗(yàn)房”的人士大多是房地產(chǎn)業(yè)、建筑業(yè)的工程師,熟悉房屋建筑的結(jié)構(gòu)、特點(diǎn),以及建筑交付使用必須達(dá)到的相關(guān)標(biāo)準(zhǔn),有關(guān)房屋質(zhì)量的問題,難逃他們的“火眼金睛”。,,南京近日興起民間“驗(yàn)房師”上海東廣新聞臺(tái)各位聽眾,因?yàn)椴痪邆湎嚓P(guān)知識(shí),消費(fèi)者買房時(shí)可能會(huì)被房產(chǎn)商蒙騙。最近在南京、重慶等城市悄然出現(xiàn)了“民間驗(yàn)房師”,專門幫購房者驗(yàn)房把關(guān),這些驗(yàn)房師正準(zhǔn)備進(jìn)軍上海灘。買過新房的人都知道,買房子絕對(duì)是件麻煩事。趕在今年結(jié)婚,剛在龍吳路買了套新房的的劉先生,對(duì)此深有體會(huì)。“買房子不象買其他東西,里面的花頭也太多,開發(fā)商把鑰匙交給我,我其實(shí)也不知道該看什么,說實(shí)話,有些問題蒙在鼓里也不曉得,得住了才知道?!闭?yàn)槿绱耍谏虾5慕從暇┳罱那呐d起了一個(gè)嶄新的職業(yè)“驗(yàn)房師”,專門幫購房者檢驗(yàn)新房。丁渤,南京從事民間驗(yàn)房第一人,南京95%的新建小區(qū)都去驗(yàn)過。每次他驗(yàn)房,要查驗(yàn)包括墻體、裂縫、滲水、三表到戶情況、水通、電通、層高、房屋幾何尺寸等等17個(gè)大項(xiàng)。由于非常清楚開發(fā)商存在的“硬傷”,丁渤經(jīng)手的索賠成功率達(dá)到100%。,一、詞匯的運(yùn)用,要多使用雙音節(jié)詞匯,慎用單音節(jié)詞匯。例如現(xiàn)今昨已逾將時(shí)可應(yīng)為因像現(xiàn)或但并曾,,我們再來看下面這個(gè)例子遼寧阜新一中學(xué),因?qū)W生大便后未及時(shí)沖廁所或在廁所內(nèi)吐痰,而勸5名學(xué)生退學(xué)。該校校長稱學(xué)生行為違反了其在入學(xué)時(shí)與校方簽訂的學(xué)生承諾書里的規(guī)定,是不能原諒的。遼沈晚報(bào)2007年8月15日這條消息中,連續(xù)使用了大量的單音詞因、未、沖、或、內(nèi)、該、稱、其、時(shí)等,如果在廣播新聞中也這樣使用,顯然有些問題。那么,碰到像上面這樣的“報(bào)紙新聞”,廣播編輯該怎么辦呢沒別的辦法,只有改,,遼寧阜新一所中學(xué),最近有5名學(xué)生,因大便后沒有及時(shí)放水沖刷大便池,或者因?yàn)樵趲锿绿?,結(jié)果被學(xué)校勸退。這所學(xué)校的校長表示這些學(xué)生違反了學(xué)生承諾書里的相關(guān)規(guī)定,因此是不能原諒的。據(jù)了解,這個(gè)學(xué)生承諾書是學(xué)生在入學(xué)時(shí)與校方簽訂的。修改后,很多單音詞被改成了雙音詞,像未沒有,沖沖刷,或或者,該這所,稱表示。但其中仍保留了部分單音詞,比如第一個(gè)“因”,還有“時(shí)”、“與”等,這些為什么沒有改這就是前面所說的原則要看是否能聽清,如果不妨礙,就可以保留,這就是“慎用”。,,慎用書面語例如日時(shí)不諳不啻不虞詬病宜于嗟嘆何謂誕辰日益途經(jīng)十余日桑梓司職其地處該認(rèn)真部署立即從而連日來分赴上述竣工偶遇正午的烈日炙熱灼人東方泛起了一縷魚肚白這些詞匯,雖然有的是雙音節(jié)詞匯,但屬于書面語,仍舊有一個(gè)不易聽清的問題,所以在使用上也要慎重。,,再比如他們浩浩蕩蕩的車隊(duì)遵守交通規(guī)則了嗎如果遵守了,那么,再長的車隊(duì),再炫的表演都是合法的,無需別人置喙。雜文他們炫,我們看這是一段評(píng)論性的文字,是說目前中國的富人越來越多,炫富表演也越來越多了。那么怎么看待這種現(xiàn)象作者覺得應(yīng)該換換思維了,于是寫了上述這段話。其中,作者用了“置喙”(意為“插嘴”)這么~個(gè)文詞兒,在報(bào)紙上用可以,但如果在廣播中照搬,恐怕就會(huì)引起很多人的困惑。,,2011年2月24日晚,央視國際頻道播出了一條“日本豐田公司將召回問題車”的新聞。電視屏幕上打出的字幕有“豐田公司稱”和“此次召回”等字樣。但播音員實(shí)際讀的是“豐田公司聲稱”和“這次召回”。顯然,將單音節(jié)的“稱”處理成雙音節(jié)詞,將書面語的“此”改成口語化的“這”是正確的。,,在一些特定場合,廣播語言必須使用書面語。對(duì)特定對(duì)象的宣傳。用于特殊題材。有特殊修辭作用的書面語。如瞻仰、逝世、悼念。示例杰出的社會(huì)活動(dòng)家,著名的愛國人士,香港知名實(shí)業(yè)家,中國共產(chǎn)黨的親密朋友,中國人民政治協(xié)商會(huì)議第八、九、十屆全國委員會(huì)副主席,香港中華總商會(huì)永遠(yuǎn)名譽(yù)會(huì)長霍英東先生,因病于2006年10月28日19時(shí)30分在北京逝世,享近84歲。用于莊重、嚴(yán)肅的語體。如外交電文或黨政軍公報(bào)。,,慎用文言詞例如甫剛鮮少成全皆都拊拍緘閉浣洗盍何不曷怎么焉語氣俟等待其代詞乎語氣且連詞,,我們來看一個(gè)例子當(dāng)年陪同甫自蘇聯(lián)歸國的蔣經(jīng)國夫婦晉見蔣介石的杭州市長周象賢,抗戰(zhàn)結(jié)束之后,又重做馮婦,回鍋當(dāng)杭州市市長。情愛紅塵中的蔣經(jīng)國作家文摘2007年10月16日這里選了報(bào)紙上的一句話。其中的“甫”、“自”,就是很典型的古漢語用法,而且還使用“馮婦”的典故,如在廣播中這樣使用,必然會(huì)令聽眾一頭霧水。,,但有的文言虛詞并不妨礙收聽和理解。如所以這些國家博物館主觀上并不希望歸還其收藏的中國文物,甚至對(duì)參觀、拍照都嚴(yán)格限制,使得政府出面交涉異常困難。離家百年,鐘回故里這段話中的文言虛詞“其”,非但不會(huì)妨礙人們的收聽,卻使語言帶有了一種莊重的色彩??梢姡难蕴撛~并非一概不能用,而是要看怎么用,是否妨礙人們的思維。我們的要求是“慎用”,而非“禁用”。,,不用現(xiàn)代漢語中罕見的成語和典故。例如并行不悖、風(fēng)雨如晦、耄耋之年、煢煢孑立、踽踽獨(dú)行,,例如李時(shí)珍在書中說“今古異制,古之一兩,今用一錢可也”經(jīng)過以上的演變,我們現(xiàn)在便把古代處方中的一兩,統(tǒng)統(tǒng)當(dāng)作一錢,也就是3克。然而問題恰恰就出在李時(shí)珍這句被后世至今奉為圭臬的話。從李時(shí)珍一直錯(cuò)到中國藥典今晚報(bào)2007年12月14日這段話中,前面是古人的原話,這沒有辦法,只能照念。但后面的“奉為圭臬”是一句成語,平常并不常用,如果在廣播中使用,恐怕能聽明白的人不多。,,注意避免音同義不同的諧音詞大家都知道,漢語中存在大量的諧音詞,在很多文學(xué)作品中,人們常常會(huì)利用它們來增強(qiáng)語言的表現(xiàn)力。,,唐代詩人劉禹錫的竹枝詞“東邊日出西邊雨,道是無晴卻有晴”,詩中的。晴”與情”諧音。李商隱的無題“春蠶到死絲方盡,蠟炬成灰淚始干”,詩中“絲”與“思”諧音。這些都是借諧音增加詩的寓意,還有借諧音諷喻調(diào)侃的。相傳蘇軾與和尚佛印乘船同游.蘇軾出上聯(lián)“狗啃河上骨”,佛印立即反唇相譏,對(duì)出下聯(lián)“水流東坡詩”。上聯(lián)“河上和尚”諧音.下聯(lián)“詩”與“尸”諧音。,,但在廣播新聞中,使用諧音要慎重,尤其是容易造成思維混亂和誤解的諧音要格外小心。如我市我是全部全不走進(jìn)走近致病治病紀(jì)委計(jì)委期中期終事例視力示例勢力注明著名水道水稻食油石油室友世友居留拘留切記切忌詬病購并置喙智慧上述這些詞匯,在聽覺上都可以找到一個(gè)諧音,但詞義完全不同,所以很容易造成誤解,因此在使用上要非常謹(jǐn)慎。,,如何避免理解上的偏差和混亂請(qǐng)看下面兩個(gè)例子此時(shí)焦急地等在門外的父母、親戚、學(xué)生家長全都圍了上來。我不能讓我的孩子流血4月24號(hào)一大早,菏澤、棗莊的采血車全都開了出擊。北京,請(qǐng)下達(dá)命令不說“全部”,而說“全都”。為的就是避免諧音“全不”。,,當(dāng)然,有的諧音就不太好辦。例如日本媒體7日?qǐng)?bào)道說,日本法務(wù)大臣長勢甚遠(yuǎn)去年曾從一個(gè)接收外籍研修生的團(tuán)體處非法收受政治獻(xiàn)金。長勢本人當(dāng)天也承認(rèn)收受獻(xiàn)金,但堅(jiān)稱已經(jīng)退還所有獻(xiàn)金。日法務(wù)大臣被曝獻(xiàn)金丑聞“獻(xiàn)金”和“現(xiàn)金”諧音,但含義不同。這里的“獻(xiàn)金”,只能與“政治”連用才能表達(dá)準(zhǔn)確。,,再例如是汽車未避讓火車所致。這是中央電視臺(tái)新聞聯(lián)播中的一個(gè)例子,是說印度的一輛大巴與火車相撞,造成了很大損失。,,這句話中,記者用了一個(gè)比較“文”的雙音詞所致,但這沒關(guān)系,因?yàn)樗⑽捶恋K聽眾的理解。出現(xiàn)問題的是前面那個(gè)“未”字,聽眾可能以為是“汽車為避讓什么所致”。顯然,記者在寫這句話時(shí),忽略了“未”與“為”諧音,而且兩個(gè)詞在這里都能用,但意思卻大相徑庭。可見,有時(shí)記者的一個(gè)小疏忽,就會(huì)給聽眾的理解造成麻煩。,注意指代不清,在廣播中應(yīng)注意代詞的使用,如“他”和“她”,防止指代不清。如他叫蘇生。她叫殷若蘭。他來自一個(gè)偏遠(yuǎn)的縣城的一個(gè)偏遠(yuǎn)的鄉(xiāng)下小村子。她來自中國北方最大的一個(gè)大都市。他和她或許并不是一條線上兩個(gè)人,只是突然的交叉,或者說暫時(shí)的相遇,純屬偶然而已.在她出現(xiàn)之前,他還是個(gè)匆忙的孩子。從家里趕到學(xué)校還有幾十里的山路。然后為學(xué)習(xí)忙碌,還有同學(xué)。他是班長,班里大大小小的事他都一一照應(yīng)著。摘自他和她的愛情故事很顯然,這段話寫出來看可以,聽絕對(duì)會(huì)有問題。,絕對(duì)不適合在廣播中播出的文章,季姬擊雞記【原文】季姬寂,集雞,雞即棘雞。棘雞饑嘰,季姬及箕稷濟(jì)雞。雞既濟(jì),躋姬笈,季姬忌,急咭雞,雞急,繼圾幾,季姬急,即籍箕擊雞,箕疾擊幾伎,伎即齏,雞嘰集幾基,季姬急極屐擊雞,雞既殛,季姬激,即記季姬擊雞記。【翻譯】季姬感到寂寞,羅集了一些雞來養(yǎng),是那種出自荊棘叢中的野雞。野雞餓了叫嘰嘰,季姬就拿竹箕中的小米喂它們。雞吃飽了,跳到季姬的書箱上,季姬怕臟,忙叱趕雞,雞嚇急了,就接著跳到幾桌上,季姬更著急了,就借竹箕為趕雞的工具,投擊野雞,竹箕的投速很快,卻打中了幾桌上的陶伎俑,那陶伎俑掉到地下,竟粉碎了。季姬爭眼一瞧,雞躲在幾桌下亂叫,季姬一怒之下,脫下木屐鞋來打雞,把雞打死了。想著養(yǎng)雞的經(jīng)過,季姬激動(dòng)起來,就寫了這篇季姬擊雞記。,,少用代詞一般聽眾都有這樣的經(jīng)驗(yàn)打開收音機(jī),聽到里邊說“這個(gè)工廠,,他們,,”到底是哪個(gè)廠因?yàn)闆]聽到頭,不知道,有時(shí)甚至聽完,也不知道到底是哪個(gè)。因此,廣播語言里的名詞要適當(dāng)重復(fù),不能一個(gè)勁地用代詞,所用代詞也不要離所代的名詞太遠(yuǎn)。,,示例我國首位“換臉”人李國興的第二次手術(shù)昨天在西安西京醫(yī)院順利結(jié)束。到目前,李國興整個(gè)手術(shù)費(fèi)用及治療費(fèi)用已經(jīng)達(dá)到30多萬元。據(jù)主治醫(yī)生介紹,這次手術(shù)修復(fù)了李國興面部看起來還不太自然的右眼和嘴角,并將他臃腫的左臉削平,力圖使臉的左右兩側(cè)基本對(duì)稱。來自云南省的傈僳族青年李國興今年30歲,兩年前,他遭遇黑熊襲擊,面部被嚴(yán)重毀容。今年4月,李國興在西京醫(yī)院接受了我國首例“換臉”手術(shù)。,,示例“本臺(tái)訊河南省語言文字工作會(huì)議在鄭州召開,河南省副省長、省語委主任做了題為‘抓住機(jī)遇,開創(chuàng)我省語言文字工作新局面’的工作報(bào)告,在談到我省語言文字工作以后的工作任務(wù)時(shí)”“米盧蒂諾維奇在接受本報(bào)記者專訪時(shí)表示他的初衷沒有任何變化?!?,慎用簡稱主要指那些在小范圍使用、不被社會(huì)所認(rèn)知和了解的簡稱(詞)要慎用。例如2007年8月6日每日新報(bào)上刊載的一條消息肇逃300天,路邊乘涼被擒“想不到,你們竟能抓著我?!弊蛱?,肇事逃選296天的嫌犯鄭浩被抓獲時(shí)如是說。至此,交管部門成功偵破了集中偵破肇逃案行動(dòng)開始以來的第一案。這里的“肇逃”是個(gè)簡稱,廣播如照播就不易讓人聽懂。,,如果是經(jīng)過規(guī)范的,社會(huì)上廣為流傳的簡稱,在廣播中應(yīng)該用,比如“團(tuán)中央”、“人代會(huì)”、“打假辦”等。但有些簡稱沒有經(jīng)過規(guī)范,社會(huì)上沒有通用,廣播出去,就聽不懂。如中南關(guān)系(中國同南斯拉夫的關(guān)系),高知(高級(jí)知識(shí)分子),“54321辦公室”,許多聽眾難以理解,原來那是地方政府成立的“五講四美三熱愛兩個(gè)文明一起抓辦公室”,豈不是讓聽眾云里霧里。,,隨著社會(huì)發(fā)展,簡稱的使用也在發(fā)生變化,一些過去生僻的詞匯隨著使用的增多,會(huì)被社會(huì)所熟悉。像“非典”、“GDP”以及“節(jié)能減排”等。但有些簡稱,特別是使用范圍很小或聽起來容易產(chǎn)生誤解的,就要小心,在報(bào)紙上用沒問題,在廣播中就要慎重。,,少用方言土語。我國民族眾多,語言復(fù)雜,同一樣?xùn)|西,各地的說法不盡相同。如北京人說“公雞”,廣州人卻說“雞公”。比如普通話中的“我們”,上海人叫“阿拉”,東北人叫“咱們”,山東人叫“俺們”,編輯用“我們”統(tǒng)一各地的方言土語可以讓大多數(shù)人接受。,,少用表達(dá)不準(zhǔn)確的詞比如,有記者在新聞稿中這樣介紹國外的礦泉水百年來,苦味礦泉水一直被歐洲貴族所鐘愛,成為高端群體寵物飲料。這里,名詞“寵物”被錯(cuò)用作形容詞(應(yīng)改為“寵愛的”),故極易造成聽眾的誤解。,,還有,漢語中有一些詞匯比較有意思,放在一起會(huì)產(chǎn)生多種組合效果。例如新華社北京8月25日電外交部發(fā)言人姜瑜25日就日本首相安倍會(huì)見遠(yuǎn)東國際軍事法庭印度法官后人事答記者問。,,遇到這樣的問題,廣播語言只能老老實(shí)實(shí)地按照聽眾的聽覺習(xí)慣和思維特點(diǎn)去寫,不能任意為之而令人費(fèi)解日本首相安倍日前會(huì)見了遠(yuǎn)東國際軍事法庭印度法官的后人,25號(hào),外交部發(fā)言人姜瑜就此事回答了記者提問。,二、句子的運(yùn)用,能夠聽清詞匯還遠(yuǎn)遠(yuǎn)不夠,語言要在詞匯組成句子之后才能完整表達(dá)意思。,1、適當(dāng)重復(fù),廣播中為了讓聽眾聽清,適當(dāng)?shù)闹貜?fù)是必要的。比如當(dāng)?shù)貢r(shí)間8月4日深夜,美國新澤西州華克市發(fā)生了一起槍擊案,一伙歹徒槍殺四名美國特拉華州立大學(xué)的大學(xué)生,四人全都頭部中槍。其中三人當(dāng)場死亡.另外一人身受重傷。這起血腥槍擊案震驚了整個(gè)美國。2007年8月6日其中,“美國”一詞出現(xiàn)了3次,“槍”出現(xiàn)了2次,“四名”或“四人”,出現(xiàn)了2次。像這樣將新聞要素做適當(dāng)?shù)闹貜?fù),有利于聽眾聽清。,2、寫短句子,口語中一個(gè)重要特征是短句多,長句少。短句簡潔明快,容易說,也容易聽,容易記。長句句子結(jié)構(gòu)嚴(yán)密、精確,但讀起來困難,也不易聽懂。這里所謂的長句子,是那種意思“彎彎繞”、句群關(guān)系復(fù)雜、不易聽懂的長句子,它與我們所說的具有韻律美的長句子性質(zhì)不同。例如新華社華盛頓8月1日電美國白宮副發(fā)言人佩里諾10日說,布什總統(tǒng)11日會(huì)在緬因州肯納邦克波特其父親、前美國總統(tǒng)老布什的莊園會(huì)見法國總統(tǒng)薩科齊及其夫人塞西莉亞時(shí),賓主雙方在“輕松的午餐”中討論各種問題。2007年8月11日該消息雖僅一句話,但如讓播音員讀,會(huì)喘不過氣來。,,我們來換個(gè)寫法,效果可能會(huì)很不一樣美國白宮副發(fā)言人佩里諾10號(hào)說,布什總統(tǒng)1號(hào)將在肯納邦克波特莊園會(huì)見法國總統(tǒng)薩科齊。雙方將在“輕松的午餐”中討論各種問題??霞{邦克波特莊園是布什總統(tǒng)的父親、前美國總統(tǒng)老布什現(xiàn)在的住所,位于緬因州。,練習(xí),麥苗黃瘦是由于去年入冬以來天氣持續(xù)干旱繼之先后幾次寒流襲擊的影響所致。位于四川省西南風(fēng)光秀麗的張家寨吸引了成千上萬的旅游者。某市衛(wèi)生防疫站最近對(duì)查出的不合衛(wèi)生標(biāo)準(zhǔn)的醬油、月餅、汽水、奶粉等十多個(gè)品種,價(jià)值四千多元的變質(zhì)食品,進(jìn)行了沒收和銷毀。,,麥苗黃瘦是由于去年入冬以來天氣持續(xù)干旱繼之先后幾次寒流襲擊的影響所致。去年入冬以來,天氣連續(xù)干旱,接著又遇上了幾次寒潮,因此,麥苗長得又黃又瘦”。這樣的幾個(gè)短句子合成了一個(gè)因果復(fù)句,層次清楚。,,“位于四川省西南風(fēng)光秀麗的張家寨吸引了成千上萬的旅游者”?!皬埣艺挥谒拇ㄊ∥髂稀K孕沱惖娘L(fēng)光吸引了成千上萬的旅游者?!?,“某市衛(wèi)生防疫站最近對(duì)查出的不合衛(wèi)生標(biāo)準(zhǔn)的醬油、月餅、汽水、奶粉等十多個(gè)品種,價(jià)值四千多元的變質(zhì)食品,進(jìn)行了沒收和銷毀。”由于插入了過多的附加成分而顯得復(fù)雜,念起來拗口,聽起來也別扭。改為“某市衛(wèi)生防疫站沒收和銷毀了最近查出的一批變質(zhì)食品。這批變質(zhì)食品有醬油、月餅、汽水、奶粉等十多個(gè)品種,價(jià)值四千多元?!?3、避免用倒裝句,廣播語言要按照口語的順序安排句子的結(jié)構(gòu),倒裝句不符合中國人說話的習(xí)慣。在廣播中,經(jīng)常會(huì)引用新聞人物的語言,有時(shí)也從書上摘錄語句。凡是人物的語言或引語都要放在主格的后面,不能放在主格的前面,也不能讓主格穿插在引證中間。,,我們經(jīng)??吹綀?bào)紙上先寫誰說了什么“話”,再說“這是誰說的”。廣播中則不能這樣用,第一,聽后忘前,聽眾很難想到前面是哪個(gè)人說的話;第二,報(bào)紙上有引號(hào),可以看出哪是他說的.廣播中卻難以進(jìn)行區(qū)分。例帶著疑問,記者走訪了中山醫(yī)科大學(xué)吳偉康教授?!斑@簡直是危言聳聽”吳教授說,“測微循環(huán)并沒有具體到身體哪個(gè)部位的功能?!备臑閹е蓡?,記者走訪了中山醫(yī)科大學(xué)吳偉康教授。吳教授說“這簡直是危言聳聽測微循環(huán)并沒有具體到身體哪個(gè)部位的功能。”,,嫦娥一號(hào)衛(wèi)星在繞月飛行的一年時(shí)間里,可能會(huì)兩次遭遇月食?!霸率硨⑹擎隙鹄@月的黑暗時(shí)光,衛(wèi)星不僅因此無法得到太陽能電池充電,而且還將遭受溫度急劇下降的考驗(yàn)?!辨隙鹨惶?hào)總體設(shè)計(jì)師饒偉在接受記者采訪時(shí)說。今晚報(bào)2007年10月28日,,改后嫦娥一號(hào)衛(wèi)星在繞月飛行的一年時(shí)間里,可能會(huì)兩次遭遇月食。嫦娥一號(hào)總體設(shè)計(jì)師饒偉在接受記者采訪時(shí)就表示“月食將是嫦娥繞月的黑暗時(shí)光,衛(wèi)星不僅因此無法得到太陽能電池充電,而且還將遭受溫度急劇下降的考驗(yàn)?!?4、句子成分不要?dú)埲被蚨嘤唷?如“通過調(diào)查研究,使領(lǐng)導(dǎo)進(jìn)一步看到了群眾的力量?!薄斑@就是本期節(jié)目的真正話題?!薄啊x’服務(wù)中心可以樂意為你服務(wù)?!?5、詞語搭配得當(dāng)。,如“打擊刑事犯罪和執(zhí)法監(jiān)督”“薩達(dá)特為埃及締結(jié)了寶貴的和平”克服了錯(cuò)誤;完成了目的;增強(qiáng)了決心;解決溫飽“咱們國家有一幫這么默默奉獻(xiàn)的科學(xué)家”,6、句子修辭得當(dāng),如“高粱桿又稱‘箭桿’,這是由于它很象射箭矢,”“我相信,我執(zhí)著的個(gè)性和漂亮的‘錛兒頭’一定會(huì)給我?guī)砗眠\(yùn)氣,也會(huì)使愛我的親人、朋友和觀眾的生活變得燦爛。”,7、句子結(jié)構(gòu)清楚。,如痛苦有兩個(gè)人承擔(dān)的時(shí)候,一份痛苦就成了半份痛苦。大家提的意見,希望你好好考慮一下是有益的??粗路N的草和刷了綠漆的護(hù)欄,使人心情也隨之舒暢。問有全獎(jiǎng)是不是就好簽多了答有全獎(jiǎng)并不能保證申請(qǐng)人就一定能拿到簽證,簽證人員還要考慮他(她)在美國畢業(yè)后是否有令人信服的理由回到中國。舉例來說,‘一個(gè)有全獎(jiǎng)的學(xué)生去學(xué)法國文學(xué),畢業(yè)后能在中國找到一份工作,其工資收入與在美國改變專業(yè)后,比如做一名電腦程序設(shè)計(jì)員的工資相當(dāng)嗎,美國之音的專題節(jié)目,對(duì)廣播語言規(guī)定十條守則,①寫作之前一定要知道你寫的是什么,不清楚的時(shí)候先別動(dòng)筆;②一句話只包含一個(gè)意思;③采用最簡單、最短的句子結(jié)構(gòu);④用最能表示具體動(dòng)作的詞,動(dòng)詞一定要靠近名詞;⑤一句話中避免用插入語;⑥不要用太長的頭銜;⑦不要用太多的數(shù)目字;⑧寫稿簡單些,但并非兒童作品。在需要用1500常用詞以外的詞匯時(shí),要加以解釋,有時(shí)可以換用;⑨不要用罕見的詞語、成語、典故、隱語和借用詞;⑩寫好以后朗讀幾遍,看看能否再簡化,把可有可無的詞句刪去。,,練習(xí)大學(xué)生“十一”背回臟衣服“孝敬”媽沈陽晚報(bào)10月8日,家住鐵西區(qū)的王先生向記者講述了自己的疑惑,剛上大學(xué)的女兒“十一”長假前不但給自己帶回了10多雙臟襪子,還向同學(xué)借了雙襪子才回家,他不明白平日里對(duì)孩子的百般呵護(hù),最終卻造成孩子做出這樣荒唐的事。王先生告訴記者“女兒今年考上大學(xué),雖然沒離開沈陽,但由于學(xué)校遠(yuǎn)離市區(qū),只能一兩周回來一次。由于平時(shí)孩子從未離開過我們,而且也沒洗過衣服,所以開學(xué)時(shí)我們?yōu)榕畠簬蛞路庖m子就帶了10多雙。開學(xué)不到一個(gè)月,女兒每天除了抱怨學(xué)校的伙食不好之外沒再說什么,可‘十一’前孩子回家的情景,卻著實(shí)讓我們哭笑不得?!薄叭齻€(gè)包里裝的都是臟衣服,光襪子就有10多雙,更氣人的是女兒回來腳上穿的還是從同學(xué)那里借的襪子。我們問她為什么連襪子也向別人借,女兒還振振有詞地說‘在學(xué)校沒買到,出去又不方便,實(shí)在沒換的了就向同學(xué)借了一雙?!甭牭竭@話王先生真不知怎么說女兒才好,到底平時(shí)對(duì)孩子無微不至的照顧是在愛孩子還是在害孩子,,大學(xué)生“十一”背回臟衣服“孝敬”媽中國之聲晚報(bào)瀏覽昨天,家住沈陽鐵西區(qū)的王先生向記者講述了自己的疑惑。王先生的女兒今年考上大學(xué),雖然沒離開沈陽,但由于學(xué)校遠(yuǎn)離市區(qū),只能一兩周回來一次。由于平時(shí)孩子從未離開過父母,而且也沒洗過衣服,所以開學(xué)時(shí)王先生為女兒帶夠衣服,光襪子就帶了10多雙。開學(xué)不到一個(gè)月,女兒每天除了抱怨學(xué)校的伙食不好之外沒再說什么,可‘十一’前孩子回家的情景,卻著實(shí)讓夫婦倆哭笑不得。三個(gè)包里裝的都是臟衣服,光襪子就有10多雙,更氣人的是女兒回來腳上穿的還是從同學(xué)那里借的襪子。王先生問她為什么連襪子也向別人借,女兒還振振有詞地說‘在學(xué)校沒買到,出去又不方便,實(shí)在沒換的了就向同學(xué)借了一雙?!牭竭@話王先生真不知怎么說女兒才好,到底平時(shí)對(duì)孩子無微不至的照顧是在愛孩子還是在害孩子,三、語序,大家或許會(huì)發(fā)現(xiàn)廣播中有這樣的語言現(xiàn)象,當(dāng)引起聽眾注意,想知道某一內(nèi)容時(shí),該內(nèi)容已介紹完了。比如在報(bào)紙上常會(huì)看到這樣的信息6月30日2100至7月1日2000漢口解放大道臺(tái)北路至三陽路以南區(qū)域水壓下降或無水6月29日1000至2200武昌友誼大道(武車路至湖北大學(xué))西邊水壓下降或無水6月29日1000至220武昌珞獅北路湖北省地震局一帶水壓下降或無水6月29日1430至1830漢口黃陂街東邊水壓下降或無水6月29日2100至30日900漢口長豐大道至常碼頭沿線管道煤氣停氣這樣的信息,若直接拿到廣播中來播,是會(huì)出現(xiàn)問題的。因?yàn)橄日f停水時(shí)間,再說停水地點(diǎn),當(dāng)聽眾聽到停氣、停水時(shí)間與自己相關(guān),引起注意時(shí),停氣、停水時(shí)間早已說完。,,細(xì)想一下,這就是廣播的傳播特點(diǎn)和聽眾收聽時(shí)的思維邏輯在起作用。首先,讀者看報(bào)紙時(shí)可反復(fù)閱讀,但廣播是線性傳播,只能依次收聽。其次,人有聽后忘前的特點(diǎn)。再者,聽眾聽廣播時(shí)注意力可能并不集中(即伴隨狀態(tài))。因此,我們要根據(jù)廣播的傳播特點(diǎn),在廣播的語序上動(dòng)腦筋、想辦法,要與其他媒介的語言有所區(qū)別。其中,很重要的一點(diǎn)就是,在說重要內(nèi)容之前,要先“叫醒”聽眾的耳朵,引起他們的注意。比如前例中,有多少地點(diǎn),就應(yīng)“叫醒”多少地點(diǎn)聽眾的耳朵,等“有關(guān)地區(qū)”的聽眾都注意了,然后再說時(shí)間,這樣介紹,效果就會(huì)大大好于前者。,,廣播中,這種先“叫醒”耳朵再“傳達(dá)”的語言方式可稱之為“先驚后達(dá)”。例如應(yīng)新加坡總理李顯龍、南非副總統(tǒng)卡萊馬英特蘭蒂、安哥拉副總統(tǒng)費(fèi)爾南多多斯桑托斯和博茨瓦納副總統(tǒng)蒙帕蒂梅拉費(fèi)的邀請(qǐng),中國國家副主席習(xí)近平將于11月14日至24日對(duì)上述四國進(jìn)行正式訪問。2010年11月15日央視新聞聯(lián)播,,上述新聞,先說出訪國,再說“應(yīng)上述四國邀請(qǐng)出訪”.這樣的表述方式,即使聽眾是在很認(rèn)真地收聽,當(dāng)聽到“上述四國”時(shí),能記住是哪四國的一定不會(huì)很多。因此,廣播人必須研究最佳的語言傳播方式,即應(yīng)與人的思維方式相一致,應(yīng)盡量彌補(bǔ)線性傳播和聽后忘前的不足。,,在廣播和電視甚至是報(bào)紙上,只要稍加留意就能發(fā)現(xiàn),有些消息的表達(dá)方式就不完全適合廣播。如世界最長壽的人、居住于日本九州島福岡縣福智町的老人吉川米子于13日在當(dāng)?shù)仞B(yǎng)老院中壽終正寢,享年114歲。今晚報(bào)2007年8月14日該消息中,雖然前面“世界最長壽的人”具有一定的“醒耳”作用,但它只是一個(gè)概念,意思并不完整,而且離關(guān)鍵詞“壽終正寢”太遠(yuǎn)。由于聽眾的注意力有限,此時(shí)未必能引起
      下載積分: 6 賞幣
      上傳時(shí)間:2024-01-05
      頁數(shù): 74
      2人已閱讀
      ( 4 星級(jí))
    • 下載積分: 5 賞幣
      上傳時(shí)間:2024-03-05
      頁數(shù): 5
      3人已閱讀
      ( 4 星級(jí))
    • 下載積分: 9 賞幣
      上傳時(shí)間:2024-03-06
      頁數(shù): 51
      4人已閱讀
      ( 4 星級(jí))
    • 下載積分: 6 賞幣
      上傳時(shí)間:2024-03-05
      頁數(shù): 18
      5人已閱讀
      ( 4 星級(jí))
    • 下載積分: 5 賞幣
      上傳時(shí)間:2024-03-05
      頁數(shù): 5
      7人已閱讀
      ( 4 星級(jí))
    • 下載積分: 6 賞幣
      上傳時(shí)間:2024-03-06
      頁數(shù): 18
      27人已閱讀
      ( 4 星級(jí))
    • 簡介:教育教材語言分中心工作匯報(bào),廈門大學(xué)蘇新春2006826,要點(diǎn),一、實(shí)驗(yàn)室建設(shè)二、課題招標(biāo)、進(jìn)展三、語料庫建設(shè)四、網(wǎng)站五、目標(biāo)設(shè)想,一、實(shí)驗(yàn)室建設(shè),1硬件建設(shè)科研用房110平米三間服務(wù)器1臺(tái)微機(jī)12臺(tái)投影儀高速掃描儀、打印機(jī)等,一、實(shí)驗(yàn)室建設(shè),2實(shí)驗(yàn)室管理規(guī)章制度,二、課題招標(biāo)與進(jìn)展,2005年11月20日,課題招標(biāo)發(fā)布。2005年12月20日,課題申報(bào)申報(bào)結(jié)束。2006年1月5日,中心學(xué)術(shù)委員會(huì)開會(huì),審批通過七項(xiàng)課題。,,杜晶晶對(duì)外漢語教材語言的共時(shí)研究郭曙綸上海市中小學(xué)語文教材語料庫李焱臺(tái)灣九年一貫課程綱要下的國語教材語言面貌分析蘇新春人教版和蘇教版中小學(xué)語文教材對(duì)比研究王衍軍20世紀(jì)50年代以來對(duì)外漢語教材語言面貌研究趙小蕙香港地區(qū)基礎(chǔ)教育階段語文教材的語言基本概貌及特點(diǎn)研究鄭澤之教育教材資源平臺(tái)建設(shè),三、語料庫建設(shè),教材語料庫;教材庫;教材研究文獻(xiàn)庫;詞匯學(xué)研究文獻(xiàn)庫;通用詞語庫;通用語料庫;詞語系統(tǒng)庫;辭書語料庫,四、網(wǎng)站建設(shè),2005年12月始建;2006年3月正式開通目標(biāo)信息平臺(tái);研究平臺(tái);交流平臺(tái);服務(wù)平臺(tái);,五、目標(biāo)設(shè)想,1、語言信息的擴(kuò)充,,,2、教材種類的擴(kuò)充;對(duì)“對(duì)外漢語類”與”基礎(chǔ)教材類”的覆蓋面3、地區(qū)教材的擴(kuò)充;4、教材語言內(nèi)容的擴(kuò)充;5、教材語言與教材編寫、教學(xué)方法、教學(xué)效果的關(guān)系;,,對(duì)計(jì)算機(jī)處理數(shù)據(jù)的人工干預(yù)要不要干預(yù)方法與干預(yù)程度分詞、空格、斷詞、偶例,,第一個(gè)環(huán)節(jié)語料性質(zhì)、語料來源、語料規(guī)模、第二個(gè)環(huán)節(jié)語料加工分詞、標(biāo)注、歸類、第三個(gè)環(huán)節(jié)數(shù)據(jù)分析、意義、價(jià)值、,困難,教材單位的合作意愿與畏懼,
      下載積分: 6 賞幣
      上傳時(shí)間:2024-01-06
      頁數(shù): 14
      8人已閱讀
      ( 4 星級(jí))
    • 下載積分: 5 賞幣
      上傳時(shí)間:2024-03-05
      頁數(shù): 4
      4人已閱讀
      ( 4 星級(jí))
    • 下載積分: 5 賞幣
      上傳時(shí)間:2024-03-06
      頁數(shù): 5
      0人已閱讀
      ( 4 星級(jí))
    • 下載積分: 5 賞幣
      上傳時(shí)間:2024-03-05
      頁數(shù): 5
      13人已閱讀
      ( 4 星級(jí))
    • 下載積分: 8 賞幣
      上傳時(shí)間:2024-03-05
      頁數(shù): 41
      0人已閱讀
      ( 4 星級(jí))
    • 簡介:1,VHDL硬件描述語言及其應(yīng)用-數(shù)字IC前端設(shè)計(jì)實(shí)例,,2,講授內(nèi)容,數(shù)字IC設(shè)計(jì)中的前端設(shè)計(jì)內(nèi)容數(shù)字IC前端設(shè)計(jì)實(shí)例UART文檔階段編碼階段驗(yàn)證階段,3,數(shù)字IC設(shè)計(jì)流程,4,INITIAL,,FRONTEND,,BACKEND,,PHYSICAL,,XAANDBYCNORD,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,A,B,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,A,B,,,,X,V,VSS,VSS,VDD,,,A,B,C,D,X,Y,Z,,X,,,VDD,VSS,,,VERIFICATION,,,,,SPEC,,,IDEA,,TAPEOUT,5,數(shù)字IC前端設(shè)計(jì)的層次,前端設(shè)計(jì)可分3個(gè)階段文檔階段SPEC-設(shè)計(jì)文檔編碼階段設(shè)計(jì)文檔-HDL代碼驗(yàn)證階段SPEC-驗(yàn)證平臺(tái)-大量的驗(yàn)證,6,講授內(nèi)容,數(shù)字IC設(shè)計(jì)中的前端設(shè)計(jì)內(nèi)容數(shù)字集成電路前端設(shè)計(jì)實(shí)例UART文檔階段編碼階段驗(yàn)證階段,7,,8,數(shù)字集成電路前端設(shè)計(jì)實(shí)例UART,UART預(yù)期操作環(huán)境,9,數(shù)字集成電路前端設(shè)計(jì)實(shí)例UART,實(shí)例通用異步收發(fā)器UARTAPB外圍總線的從設(shè)備硬件流控制模式CTSN/RTSN握手協(xié)議采用的數(shù)據(jù)格式是8個(gè)數(shù)據(jù)位,1個(gè)可選的奇偶校驗(yàn)位以及1個(gè)停止位,UART數(shù)據(jù)格式,10,文檔階段,SPEC-設(shè)計(jì)說明定義接口表格形式-接口一致性子模塊劃分子模塊設(shè)計(jì)文檔設(shè)計(jì)描述子模塊設(shè)計(jì)指導(dǎo)-設(shè)計(jì)文檔實(shí)現(xiàn)方法說明流程圖、狀態(tài)圖、時(shí)序圖寄存器描述,11,1SPEC,模塊功能數(shù)據(jù)接收功能數(shù)據(jù)發(fā)送功能波特率生成器APB總線接口數(shù)據(jù)流模式控制預(yù)期環(huán)境APB總線其他UART,12,1SPEC,UART數(shù)據(jù)發(fā)送功能描述當(dāng)UART發(fā)送器被使能可進(jìn)行發(fā)送操作。其操作為將待發(fā)送8位數(shù)據(jù)轉(zhuǎn)換成一個(gè)串行數(shù)據(jù),按位時(shí)鐘輸出到發(fā)送器的串行輸出端口上。在停止位發(fā)送完成后,如果沒有新的數(shù)據(jù)傳送到發(fā)送保持寄存器中,則發(fā)送器串行數(shù)據(jù)輸出端保持高電平。數(shù)據(jù)發(fā)送完成置發(fā)送移位寄存器空標(biāo)識(shí)位為1。當(dāng)有新數(shù)據(jù)傳送到空的發(fā)送保持寄存器中時(shí),發(fā)送重新開始,發(fā)送移位寄存器空標(biāo)識(shí)位被清0。假如發(fā)送器被禁止,則它將繼續(xù)工作直到當(dāng)前數(shù)據(jù)被完全發(fā)送完成。此時(shí)發(fā)送保持寄存器不能夠重新裝載數(shù)據(jù)。如果采用流控制方式,CTSN輸入必須保持低電平,這樣數(shù)據(jù)才能被發(fā)送。如果在發(fā)送過程中,被設(shè)置成高,移位寄存器中的數(shù)據(jù)被發(fā)送,完成后發(fā)送端保持不變直到CTSN被重新設(shè)置成0。,13,2定義接口,APB接口PSEL輸入SLAVESELECTPENABLE輸入STROBE(選通脈沖)PADDR(7DOWNTO0)輸入ADDRESSBUSBYTEPWRITE輸入WRITEPWDATA(31DOWNTO0)輸入WRITEDATABUSPRDATA(31DOWNTO0)輸出READDATABUSUART接口RXD輸入TXD輸出CTSN輸入RTSN輸出其他接口IRQ輸出,14,3子模塊劃分,按功能劃分按層次劃分,,,,,15,4子模塊設(shè)計(jì)文檔設(shè)計(jì)描述,例數(shù)據(jù)發(fā)送子模塊功能設(shè)計(jì)描述輸入信號(hào)發(fā)送時(shí)鐘(TXTICK)由波特率發(fā)生部件產(chǎn)生的基準(zhǔn)時(shí)鐘8得到的位時(shí)鐘,高電平有效發(fā)送器使能(TE)高電平有效發(fā)送器中斷使能(TI)高電平有效奇偶校驗(yàn)選擇(PS)“0”表示偶校驗(yàn),“1”表示奇校驗(yàn)奇偶校驗(yàn)使能(PE)高電平有效流控制使能(FL)高電平有效。復(fù)位信號(hào)(RST)高電平有效輸出信號(hào)發(fā)送移位寄存器空(TS)說明發(fā)送移位寄存器中的數(shù)據(jù)已經(jīng)發(fā)送完畢發(fā)送保持寄存器空(TH)說明先前的數(shù)據(jù)已經(jīng)發(fā)送完畢,目前沒有新的數(shù)據(jù)待發(fā)送。數(shù)據(jù)發(fā)送輸出端(TXD)中斷輸出信號(hào)(IRQ),16,4子模塊設(shè)計(jì)文檔設(shè)計(jì)描述,數(shù)據(jù)發(fā)送UART發(fā)送器的使能位(TE)控制,高電平有效。數(shù)據(jù)由發(fā)送保持寄存器(THOLD)傳送到發(fā)送移位寄存器(TSHIFT)中,并且將其轉(zhuǎn)換成一個(gè)串行隊(duì)列,輸出到發(fā)送器的串行輸出端口TXD上。它將自動(dòng)在8位有效數(shù)據(jù)前添加開始位,并在數(shù)據(jù)后添加一位可選的奇偶校驗(yàn)位和一位停止位。在停止位發(fā)送完成后,如果沒有新的數(shù)據(jù)傳送到發(fā)送保持寄存器中,則發(fā)送器串行數(shù)據(jù)輸出端保持高電平,并且設(shè)置發(fā)送移位寄存器空標(biāo)識(shí)位(TSRE)為1。當(dāng)有新數(shù)據(jù)傳送到發(fā)送保持寄存器中時(shí),判斷發(fā)送保持寄存器空標(biāo)識(shí)位(THRE)是否為1,如果為1且TI=1,則發(fā)出IRQ中斷;如果TSRE=0,則發(fā)送開始,TSRE被清除。假如發(fā)送器被禁止,則它將繼續(xù)工作直到當(dāng)前數(shù)據(jù)被完全發(fā)送完成。此時(shí)發(fā)送保持寄存器不能夠重新裝載數(shù)據(jù)。流控制方式CTSN輸入必須保持低電平,這樣數(shù)據(jù)才能被發(fā)送。如果在發(fā)送過程中,CTSN被設(shè)置成高,移位寄存器TSHIFT中的數(shù)據(jù)被發(fā)送,完成后發(fā)送端保持高電平不變,直到CTSN被重新設(shè)置成0。,17,4子模塊設(shè)計(jì)文檔模塊實(shí)現(xiàn)方法,數(shù)字IC=數(shù)據(jù)通路+控制邏輯數(shù)據(jù)通路寄存器提??;存儲(chǔ)器控制邏輯有限狀態(tài)機(jī)狀態(tài)圖,狀態(tài)表硬連邏輯流程圖,時(shí)序圖,18,例發(fā)送控制狀態(tài)機(jī),,19,,20,4子模塊設(shè)計(jì)文檔寄存器描述,寄存器的功能保持歷史值數(shù)據(jù)通路寄存器,計(jì)數(shù)器,移位器控制輸出信號(hào)的行為命令、控制寄存器如實(shí)反映當(dāng)前電路工作狀態(tài)狀態(tài)寄存器方法保存采樣信號(hào)值-歷史值和當(dāng)前值比較必要中間值例如有限狀態(tài)機(jī)的狀態(tài)、跨周期信號(hào)等模塊輸出信號(hào)寄存器輸出,21,控制寄存器該寄存器用來控制UART的操作第0位接收器使能(RE),高電平有效。第1位發(fā)送器使能(TE),高電平有效。第2位接收器中斷使能(RI),高電平有效。第3位發(fā)送器中斷使能(TI),高電平有效。第4位奇偶校驗(yàn)選擇(PS),“0”表示偶校驗(yàn),“1”表示奇校驗(yàn)。第5位奇偶校驗(yàn)使能(PE),高電平有效。第6位流控制使能(FL),高電平有效。第7位回送使能(LB),高電平有效。第8位外部時(shí)鐘使能(EC),高電平有效,此時(shí)PIO3用作時(shí)鐘。,,22,UART狀態(tài)寄存器用來反映UART的狀態(tài)第0位接收數(shù)據(jù)就緒(DR),說明在接收保持寄存器中,數(shù)據(jù)已經(jīng)準(zhǔn)備就緒。第1位發(fā)送移位寄存器空(TS),說明發(fā)送移位寄存器中的數(shù)據(jù)已經(jīng)發(fā)送完畢。第2位發(fā)送保持寄存器空(TH),說明先前的數(shù)據(jù)已經(jīng)發(fā)送完畢,目前沒有新的數(shù)據(jù)待發(fā)送。第3位接收到暫停(BR),說明在數(shù)據(jù)接收過程接收到暫停信息。第4位溢出(OV),說明由于超出限度一個(gè)或多個(gè)字符而丟失。第5位奇偶錯(cuò)(PE),說明檢測到奇偶錯(cuò)。第6位格式錯(cuò)(FE),說明檢測到格式錯(cuò)。,,23,編碼階段,編程前準(zhǔn)備設(shè)計(jì)思路設(shè)計(jì)文檔-RTL代碼編碼風(fēng)格編碼實(shí)例文件層次化管理,24,編程前準(zhǔn)備,遵守工程指定命名及格式規(guī)則版本、設(shè)計(jì)日期、編者信息以及注釋的使用標(biāo)識(shí)符對(duì)應(yīng)具體功能含義如THEMPTY(TRANSMITHOLDEMPTY)標(biāo)識(shí)符表明信號(hào)/變量屬性如CTS_N,CTS_,CTSN,25,設(shè)計(jì)思路,模塊設(shè)計(jì)考慮電路結(jié)構(gòu)串行對(duì)輸入的處理分步驟進(jìn)行(PROCESS)并行對(duì)到達(dá)的信號(hào)同時(shí)處理(多個(gè)等價(jià)PROCESS)流水線多步驟、每個(gè)步驟同時(shí)處理設(shè)計(jì)考慮在內(nèi)部模塊之間的輸入輸出可采用組合邏輯,不同芯片之間必須采用寄存器輸入輸出(否則增加后端實(shí)現(xiàn)難度)盡量將組合電路和時(shí)序電路分開,26,編碼風(fēng)格,自頂向下規(guī)劃并發(fā)并行等價(jià)進(jìn)程規(guī)劃順序串行進(jìn)程規(guī)劃自底向上編碼獨(dú)立功能順序編碼順序語句-PROCESS并發(fā)進(jìn)程協(xié)調(diào)信號(hào)通信關(guān)系,27,自頂向下并行等價(jià)進(jìn)程規(guī)劃,BAUDOPPROCESSRST,R_P,UARTI_PBAUDRATE/BITCLOCKPROCESSBAUDRATEGENERATERX/TXCLOCKRESETOPERATIONENDPROCESSAPBOPPROCESSRST,R_P,APBIAPBOPERATIONREAD/WRITEREGISTERS(APBSLAVEINTERFACE)RESETOPERATIONUPDATEREGISTERSDRIVEOUTPUTSENDPROCESSTXRXOPPROCESSRST,R_P,APBITRANSMIT/RECEIVEROPERATIONFILTERRXDATATRANSMITTEROPERATIONRECEIVEROPERATIONRESETOPERATIONUPDATEREGISTERSDRIVEOUTPUTSENDPROCESS,28,自頂向下串行進(jìn)程的規(guī)劃,在最小信號(hào)間隔(CLK)內(nèi)更新信號(hào)及輸出UARTOPPROCESSRST,R,APBI,UARTISERIALPROCESSVARIABLEVUARTREGSBAUDRATEGENERATEREAD/WRITEREGISTERS(APBSLAVEINTERFACE)RX/TXCLOCKFILTERRXDATATRANSMITTEROPERATIONRECEIVEROPERATIONRESETOPERATIONUPDATEREGISTERSRINIDLESTATEIFRTXTICK1THENVTSEMPTY1ENDIFIFRTXENANDNOTRTHEMPTYANDRTXTICKANDNOTCTSN1THENVTSHIFT“10“VTXSTATEDATAVTPARRPARSELVIRQRTIRQENVTHEMPTY1VTSEMPTY0VTXCLK“00“VTXTICK0ENDIF,數(shù)據(jù)發(fā)送代碼段,編碼實(shí)例有限狀態(tài)機(jī)實(shí)現(xiàn),31,WHENDATATRANSMITDATAFRAMEIFRTXTICK1THENVTPARRTPARXORRTSHIFT1VTSHIFT1IFRTSHIFT10DOWNTO1“1111111110“THENIFRPAREN1THENVTSHIFT0RTPARVTXSTATEPARITYELSEVTSHIFT01VTXSTATESTOPBITENDIFENDIFENDIF,數(shù)據(jù)發(fā)送代碼段(續(xù)),編碼實(shí)例有限狀態(tài)機(jī)實(shí)現(xiàn),32,WHENPARITYTRANSMITPARITYBITIFRTXTICK1THENVTSHIFT1VTXSTATESTOPBITENDIFWHENSTOPBITTRANSMITSTOPBITIFRTXTICK1THENVTSHIFT1VTXSTATEIDLEENDIFENDCASE,數(shù)據(jù)發(fā)送代碼段(續(xù)),編碼實(shí)例有限狀態(tài)機(jī)實(shí)現(xiàn),33,SCALERRSCALER1--BAUDRATEGENERATETICKIFRRXENORRTXEN1THENVSCALERSCALERVTICKSCALER11ANDNOTRSCALER11IFVTICK1THENVSCALERRBRATEENDIFENDIFTXCLKRTXCLK1--TXCLKGENERATE(8TICK)IFRTICK1THENVTXCLKTXCLKVTXTICKRTXCLK2ANDNOTTXCLK2ENDIF,發(fā)送定標(biāo)代碼段位時(shí)鐘,編碼實(shí)例控制信號(hào),34,編碼實(shí)例記錄的使用-信號(hào)鎖存,TYPEUARTREGSISRECORDRXENSTD_LOGICRECEIVERENABLEDTXENSTD_LOGICTRANSMITTERENABLEDRIRQENSTD_LOGICRECEIVERIRQENABLETIRQENSTD_LOGICTRANSMITTERIRQENABLEPARSELSTD_LOGICPARITYSELECTPARENSTD_LOGICPARITYSELECTFLOWSTD_LOGICFLOWCONTROLENABLEDREADYSTD_LOGICDATAREADYRSEMPTYSTD_LOGICRECEIVERSHIFTREGISTEREMPTYINTERNALTSEMPTYSTD_LOGICTRANSMITTERSHIFTREGISTEREMPTYTHEMPTYSTD_LOGICTRANSMITTERHOLDREGISTEREMPTYBREAKSTD_LOGICBREAKDETECTEDRHOLDSTD_LOGIC_VECTOR7DOWNTO0RSHIFTSTD_LOGIC_VECTOR7DOWNTO0TSHIFTSTD_LOGIC_VECTOR10DOWNTO0,35,編碼實(shí)例記錄的使用-信號(hào)鎖存,THOLDSTD_LOGIC_VECTOR7DOWNTO0IRQSTD_LOGICTX/RXINTERRUPTINTERNALTPARSTD_LOGICTXDATAPARITYINTERNALTXSTATETXFSMTYPETXCLKSTD_LOGIC_VECTOR2DOWNTO0TXCLOCKDIVIDERTXTICKSTD_LOGICTXCLOCKINTERNALRXSTATERXFSMTYPERXCLKSTD_LOGIC_VECTOR2DOWNTO0RXCLOCKDIVIDERRXDBSTD_LOGIC_VECTOR1DOWNTO0RXDELAYDPARSTD_LOGICRXDATAPARITYINTERNALRXTICKSTD_LOGICRXCLOCKINTERNALTICKSTD_LOGICRXCLOCKINTERNALSCALERSTD_LOGIC_VECTOR11DOWNTO0BRATESTD_LOGIC_VECTOR11DOWNTO0RXFSTD_LOGIC_VECTOR7DOWNTO0RXDATAFILTERINGBUFFERENDRECORD,36,編碼實(shí)例時(shí)鐘同步,ARCHITECTURERTLOFUARTISTYPERXFSMTYPEISIDLE,STARTBIT,DATA,PARITY,STOPBITTYPETXFSMTYPEISIDLE,DATA,PARITY,STOPBITTYPEUARTREGSISRECORDSIGNALR,RINUARTREGSBEGINUARTOPPROCESSRST,R,APBI,UARTISERIALPROCESSVARIABLEVUARTREGSRIN底層結(jié)構(gòu)描述-行為描述不同用途文件命名規(guī)則區(qū)分,如_TOP,_PACKAGE等目錄的層次化工作目錄不同目的文件-不同目錄,如SRC,SIM,DOC,38,文件層次化管理,39,驗(yàn)證階段,驗(yàn)證環(huán)境和測試方案-TESTBENCH根據(jù)設(shè)計(jì)文檔確定驗(yàn)證點(diǎn)(TESTCASE)-驗(yàn)證文檔描述每個(gè)驗(yàn)證點(diǎn)的目的、具體實(shí)現(xiàn)步驟驗(yàn)證文檔-TESTCASE提取覆蓋率分析-不理想-回到第2階段記錄驗(yàn)證結(jié)果-LOG文件,40,驗(yàn)證環(huán)境架構(gòu)及建立方式,基于軟件模擬的層次式架構(gòu)TESTCASE層由過程(PROCEDURE)調(diào)用組成行為模型以及BFM不可綜合的代碼,描述系統(tǒng)環(huán)境中可能的其他電路模型或行為TESTBENCH驗(yàn)證配置TESTBENCH組織CONFIGURATIONS裝配TESTCASE,行為模型,BFM以及待測模塊DUT,41,UART驗(yàn)證環(huán)境架構(gòu),42,確定驗(yàn)證點(diǎn),TESTCASE提取PROCEDURES激勵(lì)從單一功能到復(fù)雜功能,輔以覆蓋率工具響應(yīng)針對(duì)具體TESTCASE描述檢查相關(guān)響應(yīng),43,例數(shù)據(jù)發(fā)送進(jìn)程TESTCASE生成TESTCASE1驗(yàn)證UART是否能夠正確發(fā)送數(shù)據(jù)A保持發(fā)送時(shí)鐘基準(zhǔn)時(shí)鐘8得到的位時(shí)鐘TXTICK;B調(diào)用APB_WRITE過程向UART控制寄存器寫入“000101010”;C調(diào)用APB_WRITE過程向UART發(fā)送保持寄存器THOLD寫入“10101010”;D調(diào)用TXD_VERIFY過程,并檢測是否正確接收“10101010”TESTCASE2驗(yàn)證UART能否檢驗(yàn)出奇偶校驗(yàn)錯(cuò),并據(jù)此發(fā)出中斷請(qǐng)求A保持發(fā)送時(shí)鐘基準(zhǔn)時(shí)鐘8得到的位時(shí)鐘TXTICK;B調(diào)用APB_WRITE過程向UART控制寄存器寫入“000101010”;C調(diào)用APB_WRITE過程向UART發(fā)送保持寄存器THOLD寫入“10101010”;D調(diào)用TXD_VERIFY過程,并檢測是否正確接收“10101010”,偶校驗(yàn)無誤,并接收到IRQ信號(hào);E調(diào)用APB_WRITE過程向UART控制寄存器寫入“000111010”;F調(diào)用APB_WRITE過程向UART發(fā)送保持寄存器THOLD寫入“10101010”;G調(diào)用TXD_VERIFY過程,并檢測是否正確接收“10101010”,奇校驗(yàn)無誤,并接收到IRQ信號(hào);TESTCASE3溢出錯(cuò)誤檢查TESTCASE4發(fā)送過程清TETESTCASE5流控制檢查,TESTCASE提取,44,TESTCASE實(shí)例接收過程,READRXDPROCEDUREFORTESTBENCHPROCEDURERXCSIGNALRXDINSTD_LOGICDOUTSTD_LOGIC_VECTORISVARIABLERXDATASTD_LOGIC_VECTOR7DOWNTO0BEGINWAITUNTILRXD0WAITFORTXPERIOD/2FORIIN0TO7LOOPWAITFORTXPERIODRXDATAIRXDENDLOOPWAITFORTXPERIODDRXDATAENDENDRXC,TESTCASE-PROCEDURE,45,TESTCASE實(shí)例發(fā)送過程續(xù),TRANSMITTDDATATOTXDPROCEDUREFORTESTBENCHPROCEDURETXCSIGNALTXDOUTSTD_LOGICTDINTEGERISVARIABLETXDATASTD_LOGIC_VECTOR10DOWNTO0BEGINTXDATA“11“FORIIN0TO10LOOPWAITFORTXPERIODTXDTESTBENCH,則可進(jìn)行模擬驗(yàn)證,49,TESTBENCH,復(fù)用將所有過程集中在PACKAGE中,供所有設(shè)計(jì)者使用在TESTBENCH中配置,50,覆蓋率分析,代碼覆蓋率EDA工具+TESTCASE驗(yàn)證施加的激勵(lì)使得RTL代碼都被覆蓋了,驗(yàn)證仍然可能是不完整的如果RTL代碼根本就沒有達(dá)到完整的覆蓋,則驗(yàn)證肯定是不完整的。功能覆蓋率邊緣功能點(diǎn)(CORNERCASE)多功能交叉、組合隨機(jī)測試,51,覆蓋率分析,,,,,,,,,,,,,,PERIOD1PERIOD2,BUGRATE,TIME(EFFORT)READYTOSHIPSHIP,,,,BUGRATEWITHCODECOVERAGE,52,小結(jié),數(shù)字IC前端設(shè)計(jì)用心良苦的文檔加快編碼編碼遵守規(guī)則,忠實(shí)再現(xiàn)驗(yàn)證階段關(guān)鍵為TESTCASE提取,
      下載積分: 6 賞幣
      上傳時(shí)間:2024-01-06
      頁數(shù): 52
      3人已閱讀
      ( 4 星級(jí))
    • 簡介:C語言軟件編程規(guī)范工作組,公司常見軟件編程低級(jí)錯(cuò)誤內(nèi)存泄漏,前言,這套材料作為編程規(guī)范的輔助材料,幫助大家理解編程規(guī)范背后的原理。C和C語言是我司的主流編程語言,然而C/C具有很多強(qiáng)大的語言特性,從而導(dǎo)致C/C非常復(fù)雜,使得代碼更容易出現(xiàn)BUG、難以閱讀和維護(hù)。業(yè)界知名的編程規(guī)范都對(duì)C/C容易出現(xiàn)問題的語言特性進(jìn)行管理。例如MISRA(汽車工業(yè)軟件可靠性聯(lián)合會(huì))制定的1998版的MISRAC規(guī)范指出,一些在C看來可以接受,卻存在隱患的地方有127處之多。2004版的MISRAC規(guī)范將針對(duì)C語言的規(guī)則增加到了141條。對(duì)于程序員來說,能工作的代碼并不等于“好”代碼?!昂谩贝a的指標(biāo)很多,包括可讀性、可維護(hù)性、可移植性和可靠性等。出現(xiàn)網(wǎng)上問題的代碼,大多數(shù)是不良編程習(xí)慣引起的。不遵守編程規(guī)范的代碼,往往也是最不可靠的代碼。本膠片收集了常見的內(nèi)存泄漏案例,給出了相應(yīng)的糾正措施。對(duì)應(yīng)的編程規(guī)范防止內(nèi)存泄漏;函數(shù)中分配的內(nèi)存,在函數(shù)退出之前要釋放,內(nèi)存泄漏案例問題和糾正措施建議,異常出口處沒有釋放內(nèi)存,【問題描述】代碼飛檢發(fā)現(xiàn)如下代碼PMSGDB_DEVPDBDEVMSGGETBUFFSIZEOFDBDEVMSG,__LINE__IFPMSGDB_DEVNULL{RETURN}PMSGDBAPP_TO_LOGICLPDBSELFMSGGETBUFFSIZEOFDBSELFMSG,__LINE__IFPMSGDBAPP_TO_LOGICNULL{RETURN}【問題定位】在第2個(gè)RETURN處,PMSGDB_DEV指向的內(nèi)存丟失,異常出口處沒有釋放內(nèi)存續(xù)1,【問題描述】代碼飛檢發(fā)現(xiàn)如下代碼/在AVL樹中添加節(jié)點(diǎn)/IF_VC_AVL_ADDNODEIFULRETVOS_OK/創(chuàng)建VC控制塊失敗/{RETURN}【問題定位】創(chuàng)建VC控制塊失敗時(shí),RETURN前沒有刪除AVL樹中的節(jié)點(diǎn)【舉一反三】看見RETURN要注意,要去前面找資源,特別要注意鏈表等數(shù)據(jù)結(jié)構(gòu)中的資源,異常出口處沒有釋放信號(hào)量資源,【問題描述IFRCNP_RC_SUCCESS/申請(qǐng)信號(hào)量失敗/{NP_SS_ASSERT0,“CREATEQINQSEMFAILED“RETURNRC}IFSOFT_VERSIONRCNP_SS_SEMB_CREATENP_SEM_EMPTY,NP_SEM_Q_FIFO,IFRCNP_RC_SUCCESS/申請(qǐng)信號(hào)量失敗/{NP_SS_ASSERT0,“CREATEQINQSEMFAILED“RETURNRC//沒有釋放前面分配的信號(hào)量G_IMS_VPORT_BASE_INFOQINQ_BASE_INFOSEM}ENDIFNP_FREE_SEMG_IMS_VPORT_BASE_INFOQINQ_BASE_INFOSEMIFSOFT_VERSIONNP_FREE_SEMG_IMS_VPORT_BASE_INFOEQINQ_BASE_INFOSEMENDIFRETURNRC,異常出口處沒有釋放信號(hào)量資源(續(xù)),【糾正措施】第二個(gè)信號(hào)量申請(qǐng)失敗RETURN之前釋放第一個(gè)申請(qǐng)的信號(hào)量。。。。。。。。。。。。IFSOFT_VERSIONRCNP_SS_SEMB_CREATENP_SEM_EMPTY,NP_SEM_Q_FIFO,IFRCNP_RC_SUCCESS/申請(qǐng)信號(hào)量失敗/{NP_SS_ASSERT0,“CREATEQINQSEMFAILED“NP_FREE_SEMG_IMS_VPORT_BASE_INFOQINQ_BASE_INFOSEMRETURNRC}ENDIF。。。。。。。。。。。?!九e一反三】看見RETURN要注意,要去前面找資源,特別要注意信號(hào)量、定時(shí)器等資源,異常出口處沒有釋放GUI資源,【問題描述】網(wǎng)上問題案例CBITMAPBMPCBITMAPPOLDBMPBMPLOADBITMAPIDB_MYBMPPOLDBMPPDCSELECTOBJECTIFSOMETHING{RETURN}PDCSELECTOBJECTPOLDBMP【問題定位】RETURN前沒有調(diào)用SELECTOBJECT把POLDBMP選回PDC中,這會(huì)導(dǎo)致POLDBMP指向的HBITMAP對(duì)象發(fā)生泄漏。這個(gè)程序如果長時(shí)間的運(yùn)行,會(huì)導(dǎo)致系統(tǒng)花屏【舉一反三】除了申請(qǐng)的內(nèi)存外,系統(tǒng)提供的其它資源,如文件句柄/SOCKET/隊(duì)列等也是資源,使用完畢必須釋放,沒有釋放結(jié)構(gòu)的成員指針,【問題描述】網(wǎng)上問題案例STRUCTSTORE_BUF_S{ULONGULLENUCHARPCDATA}STORE_BUF_TVOIDFUNC{STORE_BUF_TPSTSTORAGEBUFFNULL//申請(qǐng)結(jié)構(gòu)內(nèi)存//程序處理。。。FREEPSTSTORAGEBUFFRETURN}刪除了PSTSTORAGEBUFF,但PSTSTORAGEBUFFPCDATA沒有刪除?!締栴}定位】先刪除了PSTSTORAGEBUFF,PSTSTORAGEBUFFPCDATA永遠(yuǎn)不可能被刪除了【舉一反三】刪除結(jié)構(gòu)指針時(shí),必須從底層向上層順序刪除,沒有釋放數(shù)組的成員指針,【問題描述】測試部對(duì)M產(chǎn)品進(jìn)行壓力和穩(wěn)定性測試,模擬文件上傳的場景,把本地目錄下的3萬個(gè)文件上傳到另一臺(tái)主機(jī)。發(fā)現(xiàn)上傳程序在傳送文件過程中,內(nèi)存在快速增長,通過PSAUWX監(jiān)控,發(fā)現(xiàn)該進(jìn)程占用的內(nèi)存每隔4分鐘(一個(gè)周期)就突然增加20~30M的內(nèi)存?!締栴}定位】STRUCTDIRENTNAMELISTINTNSCANDIRPATHC_STR,【1】INTI0FORIID_NAMEFREENAMELISTI【2】IFNAME““IFMAX_SCAN_FILE_NUMFILENUM//MAX_SCAN_FILE_NUM1000{BREAK}}}FREENAMELIST【3】RETURN,沒有釋放數(shù)組的成員指針(續(xù)),從上面的代碼可以看是指針數(shù)組NAMELIST由系統(tǒng)函數(shù)進(jìn)行分配內(nèi)存(如【1】所示),內(nèi)存釋放時(shí)時(shí)分別由【2】【3】完成的。但是中間有個(gè)條件,每次只取1000個(gè)文件,如果目錄下的文件大于1000就跳出,后面的就不會(huì)再管了(【2】沒有執(zhí)行到)。所以導(dǎo)致原來本地目錄下文件數(shù)比較小,小于等1000時(shí)沒有內(nèi)存泄漏;而當(dāng)本地目錄下的文件比較多,大于1000時(shí),就會(huì)導(dǎo)致內(nèi)存泄漏?!九e一反三】開發(fā)人員在使用指針數(shù)組時(shí),要特別注意,確保在釋放數(shù)組時(shí),數(shù)組中的每個(gè)元素指針是否已經(jīng)提前被釋放了,這樣才不會(huì)導(dǎo)致內(nèi)存泄漏。,重復(fù)分配內(nèi)存,【問題描述】代碼飛檢發(fā)現(xiàn)如下代碼ULONGCQC_CMDNODROPLEVELCLASSVOIDPMSGRCV,VOIDPPMSGSND{/以下是從別處拷貝的代碼/ULERRCODECFG_CREATERESMSGSPMSGRCV,PPMSGSND/拷貝代碼結(jié)束/ULERRCODECFG_CREATERESMSGSPMSGRCV,PPMSGSND}【舉一反三】代碼COPY要小心,沒有釋放傳入定時(shí)器的內(nèi)存,【問題描述】使用PURIFY測試,發(fā)現(xiàn)上報(bào)MLK在我們的應(yīng)用程序的對(duì)象中,由于在設(shè)置定時(shí)器時(shí)需要傳遞一個(gè)參數(shù),這個(gè)參數(shù)的需要從堆中去獲取,因?yàn)樵诤罄m(xù)的定時(shí)器超時(shí)回調(diào)時(shí)需要使用這個(gè)參數(shù)。在對(duì)象中設(shè)置定時(shí)器的代碼如下THISSETTIMERTIMERID,PENDING_USER_ENROLL_TIMER_ID,30,1,//設(shè)置一個(gè)30秒的定時(shí)器,定時(shí)1次NEWTSTRINGIPPORT在定時(shí)器的超時(shí)處理程序簡化后如下VOIDSESSIONONTIMEOUTTINT4TIMERID,TINT4USERTIMERID,VOIDPDATA{SWITCHUSERTIMERID{CASEPENDING_USER_ENROLL_TIMER_ID{TSTRINGIPPORTREINTERPRET_CASTPDATADELETEIPPORT}}}在我們設(shè)置的定時(shí)器超時(shí)后,會(huì)自動(dòng)調(diào)用ONTIMEOUT這個(gè)函數(shù),根據(jù)USERTIMERID來把所需要的參數(shù)轉(zhuǎn)化為我們原來的數(shù)據(jù)類型,使用完成后在銷毀它。這看起來一切都很正常,NEW出來資源通過DELETE來進(jìn)行釋放,為什么出現(xiàn)了內(nèi)存泄漏呢,沒有釋放傳入定時(shí)器的內(nèi)存(續(xù)),【問題定位】定時(shí)器設(shè)置之后在未超時(shí)的時(shí)候,這個(gè)定時(shí)器的所在的對(duì)象就結(jié)束了,定時(shí)器自然就消失了,也就是我們NEW出來的東西也就消失了,內(nèi)存泄漏就此產(chǎn)生了?!炯m正措施】使用智能指針進(jìn)行解決,資源的釋放操作由C語言特性進(jìn)行保證(在對(duì)象的生命周期結(jié)束調(diào)用其析構(gòu)函數(shù)),具體方案如下在該對(duì)象類添加一個(gè)智能指針類型的私有成員變量PRIVATESTDAUTO_PTRTIMER_ARG_IPPORT_這樣,在該對(duì)象被銷毀時(shí),根據(jù)智能指針的特性,由TIMER_ARG_IPPORT_這個(gè)變量持有的資源會(huì)自動(dòng)被釋放。這樣,我們就不用擔(dān)心資源的泄漏問題了。相應(yīng)的,設(shè)置定時(shí)器的代碼就變?yōu)轭愃迫缦铝薚IMER_ARG_IPPORT_STDAUTO_PTRNEWTSTRINGIPPORTTHISSETTIMERTIMERID,PENDING_USER_ENROLL_TIMER_ID,30,1,//設(shè)置一個(gè)30秒的定時(shí)器,定時(shí)1次TIMER_ARG_IPPORT_GET同時(shí),在ONTIMEROUT函數(shù)里也不用進(jìn)行DELETE的調(diào)用了?!九e一反三】資源的分配與釋放不在同一個(gè)地方,可以考慮使用智能指針,類型轉(zhuǎn)換不當(dāng)刪除的對(duì)象類型不正確,【問題描述】網(wǎng)上問題案例VOIDCPTRLISTREMOVEHEAD{}//返回為VOID無類型方式的通用指針TYPEDEFSTRUCTTAGPROPINFO{//M_PROPLIST中的節(jié)點(diǎn),其中的成員變量有自己的構(gòu)造和析構(gòu)函數(shù)CSTRINGPROPNAMECSTRINGPROPVALUE}PROPINFO;WHILEM_PROPLISTISEMPTY{DELETEM_PROPLISTREMOVEHEAD}【問題定位】調(diào)用DELETEM_PROPLISTREMOVEHEAD時(shí),C編譯器認(rèn)為DELETE一個(gè)VOID的對(duì)象,并沒有調(diào)用類PROPINFO的析構(gòu)函數(shù),導(dǎo)致內(nèi)存泄漏【糾正措施】將M_PROPLISTREMOVEHEAD的返回值強(qiáng)制進(jìn)行一次類型轉(zhuǎn)換【舉一反三】盡量避免將多個(gè)功能寫作一條語句中,如果上面的代碼使用了臨時(shí)變量VOIDTEMPPROPINFOM_PROPLISTREMOVEHEADDELETEPROPINFOTEMPPROPINFO則很容易發(fā)現(xiàn)TEMPPROPINFO的類型不正確,就不會(huì)忘記進(jìn)行類型轉(zhuǎn)換了,對(duì)需要釋放的指針重新賦值,【問題描述】代碼飛檢發(fā)現(xiàn)如下代碼STRUCTFILEINFOPDBFFILENEWSTRUCTFILEINFOPFILEPDBFFILE【問題定位】PFILE不為空,PFILE以前指向的內(nèi)存丟失了【舉一反三】盡量不要對(duì)指針重新賦值。對(duì)指針重新賦值,首先考慮設(shè)計(jì)是否合理;除建立鏈表等特殊情況外,不要將非空指針作為左值。,宏里面有RETURN語句,【問題描述】代碼飛檢發(fā)現(xiàn)如下代碼頭文件中的宏定義如下DEFINEACE_NEW_RETURNPOINTER,CONSTRUCTOR,RET_VAL\DO{POINTERNEWCONSTRUCTOR\IFPOINTER0{ERRORENOMEMRETURNRET_VAL}\}WHILE0C文件中的語句如下ACE_NEW_RETURNG_PPROCTIMER,CNMTIMERPROC,ONE_SECOND,IM_NM_NEW_FAILACE_NEW_RETURNG_PBPTIMER,CNMTIMERPROC,FIVE_SECOND,IM_NM_NEW_FAIL【問題定位】當(dāng)?shù)诙€(gè)ACE_NEW_RETURN語句在宏里面出錯(cuò)直接RETURN時(shí),第一個(gè)ACE_NEW_RETURN語句申請(qǐng)的內(nèi)存泄漏了,宏里面有RETURN語句續(xù)1,【問題描述】代碼飛檢發(fā)現(xiàn)如下代碼頭文件中的宏定義如下DEFINEERROR_HANDLE_RETURNCONDITION,RETURNVALUE{IFTRUECONDITION{RETURNRETURNVALUE}}C文件中的語句如下NEWPSHELL,MESSAGEHANDLERSHELLIREGISTINGPREGISTINGPSERVICEGETFEATUREREGISTERROR_HANDLE_RETURNNULLPREGISTING,FALSE【問題定位】一旦宏ERROR_HANDLE_RETURN執(zhí)行RETRURN,前面分配的內(nèi)存PSHELL就會(huì)泄漏。【舉一反三】小心使用有RETURN語句的宏,確保前面資源已經(jīng)釋放。,宏里面有RETURN語句續(xù)2,【問題描述】代碼飛檢發(fā)現(xiàn)如下代碼//將SESSION從BUSYSESSION池移出,放入FREESESSION池ERROR_HANDLE_RETURNFALSETHISPOPENUM_SESSION_POOL_BUSY,PSESSION,FALSEERROR_HANDLE_RETURNFALSETHISONIDLESESSIONPSESSION,FALSEERROR_HANDLE_RETURNFALSETHISPUSHENUM_SESSION_POOL_FREE,PSESSION,FALSE【問題定位】一旦從第2個(gè)ERROR_HANDLE_RETURN處退出,PSESSION已經(jīng)從BUSYSESSION池移出,但并沒有放入FREESESSION池,也沒有被刪除【舉一反三】宏里面有RETURN語句,很容易造成各種隱患,產(chǎn)品最好禁止這種做法。,C的析構(gòu)函數(shù)沒有釋放內(nèi)存,【問題描述】代碼飛檢發(fā)現(xiàn)如下代碼CDBOPERATIONCDBOPERATION{}【問題定位】上面代碼忘記對(duì)類成員指針刪除,導(dǎo)致內(nèi)存泄漏【糾正措施】修改代碼為CDBOPERATIONCDBOPERATION{IFNULLM_PMMLPROCSSTIMECOST{DELETEM_PMMLPROCSSTIMECOST}}【舉一反三】類或函數(shù)申請(qǐng)的資源應(yīng)該在退出時(shí)釋放,使用復(fù)雜語句或函數(shù)多個(gè)判斷條件寫在一起,【問題描述】代碼飛檢發(fā)現(xiàn)如下代碼CHARPSZINFOBUFVOS_NULLPTRCHARPSZINFOBUF2VOS_NULLPTRPSZINFOBUFCHARVOS_MALLOCMID_BVLAN,ULBUFFLENPSZINFOBUF2CHARVOS_MALLOCMID_BVLAN,ULBUFFLENIFPSZINFOBUFNULL||PSZINFOBUF2NULL{RETURNVOS_ERR}【問題定位】當(dāng)PSZINFOBUF申請(qǐng)成功,但PSZINFOBUF2申請(qǐng)失敗時(shí),進(jìn)入此分支,PSZINFOBUF指向的內(nèi)存泄漏了【舉一反三】不要將多個(gè)判斷條件寫在一起。,使用復(fù)雜語句或函數(shù)沒有及時(shí)釋放不使用的內(nèi)存,【問題描述】代碼飛檢發(fā)現(xiàn)如下代碼ULONGCQC_CMDNOAPPLYSYSTEMVOIDPMSGRCV,VOIDPPMSGSND代碼太長,這里不引用?!締栴}定位】該函數(shù)共531行,函數(shù)開頭就申請(qǐng)了PMSGRCV指針,從128行開始,即不再使用這個(gè)指針,但沒有及時(shí)釋放,一直到531行函數(shù)完全結(jié)束時(shí)才釋放PMSGRCV指針。但在128行以后,共有9處異常退出,有5處釋放了PMSGRCV指針,有4處卻沒有釋放PMSGRCV指針?!九e一反三】1。盡量避免過于復(fù)雜的函數(shù)2。養(yǎng)成及時(shí)釋放內(nèi)存和資源的習(xí)慣。,使用復(fù)雜語句或函數(shù)一個(gè)語句,多個(gè)分配,【問題描述】網(wǎng)上問題案例FUNSHARED_PTRNEWWIDGET,SHARED_PTRNEWWIDGET【問題定位】函數(shù)FUN的兩個(gè)入?yún)⒍际侵悄苤羔?,?huì)被自動(dòng)回收,通常不可能出現(xiàn)內(nèi)存泄漏。但C++標(biāo)準(zhǔn)沒有強(qiáng)制規(guī)定函數(shù)參數(shù)的計(jì)算順序,不同的編譯器處理不同。編譯器可能將上面代碼細(xì)化操作為對(duì)第一個(gè)參數(shù)執(zhí)行NEWWIDGET,分配內(nèi)存對(duì)第二個(gè)參數(shù)執(zhí)行NEWWIDGET,分配內(nèi)存對(duì)第一個(gè)參數(shù)執(zhí)行構(gòu)造函數(shù),實(shí)例化對(duì)第二個(gè)參數(shù)執(zhí)行構(gòu)造函數(shù),實(shí)例化如果第3步失敗,拋出異常,第1步申請(qǐng)的內(nèi)存被自動(dòng)回收,但第2步分配的內(nèi)存就丟失了【糾正措施】修改代碼為SHARED_PTRSP1NEWWIDGETSHARED_PTRSP2NEWWIDGETFUNSP1,SP2【舉一反三】不要在一條語句中分配一個(gè)以上的資源,應(yīng)該在自己的代碼語句中這些顯式的資源分配(比如NEW),而且每次都應(yīng)該馬上將分配的資源賦予管理對(duì)象(比如SHARED_PTR)。,非空指針作為左值需要釋放的指針參與運(yùn)算,【問題描述】網(wǎng)上問題案例WHILENULLLPSRCSTRSTRCHRLPSRCSTR,{LPBACKSTRLPSRCSTR1IFLPCHECK255{FREELPSRCSTRRETURN0}ELSE{ULRESULTULRESULT100{BREAK}IFTRUECACHEALARMPMSGPARAM_ALARMREPORT{DELETEPMSG}ELSE{SENDMESSAGEPMSG//把消息掛入消息隊(duì)列中}【問題定位】條件IFIFILECOUNT100為真,導(dǎo)致BREAK時(shí),內(nèi)存泄漏。【糾正措施】將申請(qǐng)內(nèi)存的語句NEWPMSG,TMSG移動(dòng)到判斷語句IFIFILECOUNT100后面【舉一反三】如果在程序塊中存在異常檢查或退出機(jī)制,應(yīng)放在最前面,這條控制語句前面的代碼必須與異常檢查或退出條件相關(guān)。,基類中沒有定義虛析構(gòu)函數(shù),【問題描述】代碼飛檢人員發(fā)現(xiàn)某產(chǎn)品缺陷跟蹤庫中這樣解決某網(wǎng)上問題CLASSA{//VIRTUALA{}//問題定位析構(gòu)函數(shù)中打印LOG信息內(nèi)存越界,刪除析構(gòu)函數(shù)}【問題定位】檢查CLASSA的子類CLASSBPUBLICA{B{}//子類B定義了自己的析構(gòu)函數(shù)}如果出現(xiàn)下面的代碼APNEWBDELETEP聲明的對(duì)象P的類型為基類A,但實(shí)際類型為子類B,所以DELETEP時(shí),編譯器認(rèn)為刪除的是CLASSA的對(duì)象,則調(diào)用CLASSA的析構(gòu)函數(shù)(編譯器對(duì)A添加的默認(rèn)析構(gòu)函數(shù)),而不調(diào)用B的析構(gòu)函數(shù),這樣B里面申請(qǐng)的內(nèi)存就泄漏了【糾正措施】在基類A中增加一個(gè)空的虛析構(gòu)函數(shù),則編譯器會(huì)自動(dòng)調(diào)用B的析構(gòu)函數(shù)【舉一反三】只要在類中有虛函數(shù),就必須有虛析構(gòu)函數(shù),基類中沒有定義虛析構(gòu)函數(shù)(續(xù)),【問題描述】使用PURIFY發(fā)現(xiàn)如下代碼內(nèi)存泄漏VOIDCALARMERDESTROYALARMINFOIALARMINFOPALARMINFODELETEPCAI}【問題定位】為了減少耦合,對(duì)外暴露的是IALARMINFO的純虛接口。但內(nèi)部的實(shí)現(xiàn)是CALARMINFO。在創(chuàng)建時(shí)創(chuàng)建一個(gè)CALARMINFO而后強(qiáng)制轉(zhuǎn)換成IALARMINFO返回。典型的使用基類指針進(jìn)行刪除,由于基類沒有設(shè)置虛析構(gòu)函數(shù),導(dǎo)致派生類的析構(gòu)函數(shù)沒有調(diào)用,這樣派生類CALARMINFO里面申請(qǐng)的內(nèi)存就泄漏了?!炯m正措施】在基類IALARMINFO中析構(gòu)函數(shù)設(shè)置為虛【舉一反三】允許通過基類的指針進(jìn)行刪除操作,則基類的析構(gòu)函數(shù)必須是公用且虛擬。,未及時(shí)加入列表,異常拋出時(shí)內(nèi)存泄漏,【問題描述】CPARRAY類為管理對(duì)象指針的列表,具有自動(dòng)釋放功能。程序正常情況下,加入CPARRAY中的對(duì)象可以得到釋放,在有異常發(fā)生的時(shí)候,對(duì)象的不到釋放,造成內(nèi)存泄漏?!締栴}定位】分析下面的代碼段,發(fā)現(xiàn)NEW的POBJ已經(jīng)放到了自動(dòng)釋放列表中,粗看代碼沒什么問題;CPARRAYMYARRAYAUTO_FREECMYOBJECTPOBJNULLFORINTI0IM_IDIFUNCTION1POBJMYARRAYADDPOBJ}跟蹤FUNCTION1函數(shù),在該函數(shù)內(nèi)有異常拋出,導(dǎo)致MYARRAYADDPOBJ語句沒有被執(zhí)行,造成POBJ對(duì)象沒有被釋放。,未及時(shí)加入列表,異常拋出時(shí)內(nèi)存泄漏(續(xù)),【糾正措施】對(duì)象創(chuàng)建以后,首先加入到自動(dòng)釋放列表中,再執(zhí)行其他操作;以上代碼修改為CPARRAYMYARRAYAUTO_FREECMYOBJECTPOBJNULLFORINTI0IM_IDIFUNCTION1POBJ}無論函數(shù)FUNCTION1是否有異常,都能保證對(duì)象得到釋放。【舉一反三】使用自動(dòng)釋放列表的程序,要第一時(shí)間將新創(chuàng)建對(duì)象加入到列表中;調(diào)用函數(shù)時(shí),要考慮到函數(shù)是否會(huì)拋出異常。,沒有釋放隊(duì)列中的內(nèi)存,【問題描述】發(fā)現(xiàn)加載軟件命令出現(xiàn)內(nèi)存泄漏現(xiàn)象?!締栴}定位】分析下面的代碼段,發(fā)現(xiàn)刪除隊(duì)列節(jié)點(diǎn)時(shí),沒有刪除節(jié)點(diǎn)對(duì)應(yīng)的內(nèi)存。。。。。。。。。。。。。。//獲得加載命令附加信息指針CDLDALLSWADDINFOPDLDALLSWINFOCDLDALLSWADDINFOG_TASKIDGETDATAPTRITASKID//清除已經(jīng)完成加載的單板信息PDLDALLSWINFOM_PBOARDREPORTLISTREMOVEAT0PDLDALLSWINFOM_PBOARDREPORTLISTSETSIZEISIZE1PDLDALLSWINFOM_PBOARDREPORTLISTFREEEXTRA,沒有釋放隊(duì)列中的內(nèi)存(續(xù)),【糾正措施】添加如下代碼,問題解決IFPDLDALLSWINFOM_PBOARDREPORTLIST0NULL{DELETEPDLDALLSWINFOM_PBOARDREPORTLIST0PDLDALLSWINFOM_PBOARDREPORTLIST0NULL}PDLDALLSWINFOM_PBOARDREPORTLISTREMOVEAT0PDLDALLSWINFOM_PBOARDREPORTLISTSETSIZEISIZE1PDLDALLSWINFOM_PBOARDREPORTLISTFREEEXTRA【舉一反三】處理鏈表或隊(duì)列時(shí),如果刪除了其中的一個(gè)節(jié)點(diǎn),還必須同時(shí)釋放節(jié)點(diǎn)申請(qǐng)的內(nèi)存,重復(fù)連接數(shù)據(jù)庫,【問題描述】B020版本中,對(duì)模塊進(jìn)行系統(tǒng)測試。某個(gè)VOD處于上載中,點(diǎn)擊,刷新其狀態(tài),則頁面運(yùn)行非常慢,最終出現(xiàn)錯(cuò)誤提示頁面?!締栴}定位】在方法的SYNCHRONIZECASTATUSARRAYLIST方法中,在循環(huán)體內(nèi)NEWOPERATER,即在循環(huán)體中創(chuàng)建數(shù)據(jù)庫連接TRY{FORINTINDEX0INDEXVODCALISTSIZEINDEX{DBOPERNEWDBOPERATOR。。。。。。。。。。。。。。}}CATCHEXCEPTIONE{。。。。。。。。。。。。。。}FINALLY{DBOPERCLOSE},重復(fù)連接數(shù)據(jù)庫(續(xù)),【糾正措施】數(shù)據(jù)庫連接不能放在循環(huán)體中創(chuàng)建,否則會(huì)導(dǎo)致內(nèi)存泄漏,數(shù)據(jù)庫連接異常。將DBOPERNEWDBOPERATOR語句提前到循環(huán)體外,TRY語句內(nèi)TRY{DBOPERNEWDBOPERATORFORINTINDEX0INDEXVODCALISTSIZEINDEX{。。。。。。。。。。。。。。}}CATCHEXCEPTIONE{。。。。。。。。。。。。。。}FINALLY{DBOPERCLOSE},對(duì)非POD對(duì)象進(jìn)行MEMSET操作,【說明】POD(PLAINOLDDATA)是普通舊式數(shù)據(jù),如結(jié)構(gòu)/枚舉/成員指針等,內(nèi)存字節(jié)是連續(xù)的。非POD類的內(nèi)存字節(jié)不連續(xù),中間可能包含VPTR虛函數(shù)指針表等隱藏的數(shù)據(jù)【問題描述】網(wǎng)上問題案例SHARED_PTRP1NEWINT,P2NEWINTMEMCPY【問題定位】內(nèi)存泄漏P2不會(huì)刪除;內(nèi)存訪問失敗P1刪除兩次【舉一反三】C編譯器經(jīng)常會(huì)在多態(tài)對(duì)象中嵌入一些隱藏?cái)?shù)據(jù)(如VPTR),多重繼承/虛擬繼承會(huì)添加更多的內(nèi)部指針。不要直接對(duì)C的類進(jìn)行MEMSET/MEMCPY等操作,應(yīng)盡量使用類自身提供的賦值/復(fù)制功能。,強(qiáng)制關(guān)閉線程沒有釋放線程占據(jù)的資源,【問題描述】網(wǎng)上問題案例CSHAKEHANDCSHAKEHAND{M_HDSHAKETHREADRECVCREATETHREADNULL,0,LPTHREAD_START_ROUTINETHREADPROC_SHAKEHANDS,THIS,NULL,}CSHAKEHANDCSHAKEHAND{TERMINATETHREADM_HDSHAKETHREADRECV,0/
      下載積分: 6 賞幣
      上傳時(shí)間:2024-01-06
      頁數(shù): 43
      1人已閱讀
      ( 4 星級(jí))
    • 簡介:C語言程序設(shè)計(jì)提高篇,,第3章文件,內(nèi)容概述,文件分類緩沖文件系統(tǒng)文件的指針文件打開與關(guān)閉文件應(yīng)用,教學(xué)目標(biāo),1概述文件的概念,非緩沖文件系統(tǒng)和緩沖文件系統(tǒng);2描述文件類型指針的概念及定義方法;3正確進(jìn)行文件的打開和關(guān)閉操作,及對(duì)打開和關(guān)閉操作的錯(cuò)誤處理;4正確使用文件的讀寫操作,包括基于字節(jié),數(shù)據(jù)項(xiàng)等的讀寫操作;5牢記文件的隨機(jī)讀寫方法;6正確使用文件訪問的錯(cuò)誤檢測及處理方法;,文件是指存儲(chǔ)在外部介質(zhì)上,且按文件名訪問的一組信息序列,①文本文件字符代碼文件或ASCII代碼文件由一個(gè)一個(gè)字符組成,每一個(gè)字符用一個(gè)ASCII代碼表示,如12345以ASCII代碼形式存儲(chǔ)到磁盤需要6個(gè)字節(jié)。特點(diǎn)可通過顯示器或打印機(jī)顯示,即可讀,比較直觀。,,31文件分類,②非文本文件二進(jìn)制文件是指以數(shù)據(jù)在內(nèi)存中的存儲(chǔ)形式原樣輸出存儲(chǔ)到磁盤上的文件。如12345在內(nèi)存中以浮點(diǎn)數(shù)形式存儲(chǔ)占4個(gè)字節(jié),不管一個(gè)實(shí)數(shù)多大都占4個(gè)字節(jié)。特點(diǎn)節(jié)省存儲(chǔ)空間,輸入輸出無需轉(zhuǎn)換,速度快,不便閱讀。,說明①一個(gè)C文件是一個(gè)字節(jié)流或二進(jìn)制流,它把數(shù)據(jù)看作是一連串的字符序列字節(jié),而不考慮記錄的界限,即C文件并不是由記錄組成的。②由于對(duì)文件的操作要與各種外部設(shè)備發(fā)生聯(lián)系,因此對(duì)文件的輸入輸出讀寫過程是通過操作系統(tǒng)來實(shí)現(xiàn)的。對(duì)文件的讀寫都是通過標(biāo)準(zhǔn)的I/O函數(shù)進(jìn)行的。,,,32緩沖文件系統(tǒng)標(biāo)準(zhǔn)IO和非緩沖文件系統(tǒng),①緩沖文件系統(tǒng)又稱標(biāo)準(zhǔn)或高層文件系統(tǒng)特點(diǎn)對(duì)程序中的每一個(gè)文件都在內(nèi)存中開辟一個(gè)“緩沖區(qū)”。作用從磁盤文件讀入的數(shù)據(jù)先到“輸入緩沖區(qū)”中,然后再從緩沖區(qū)依次將數(shù)據(jù)送給接收變量。,在向磁盤文件輸出數(shù)據(jù)時(shí),先將程序數(shù)據(jù)區(qū)中變量或表達(dá)式的值送到“輸出文件緩沖區(qū)”中,待裝滿后才一起輸出給磁盤文件。目的減少對(duì)磁盤的讀寫次數(shù),即一次可以讀入一批數(shù)據(jù)或輸出一批數(shù)據(jù)。,②非緩沖文件系統(tǒng)不由系統(tǒng)自動(dòng)設(shè)置所需緩沖區(qū),而由用戶根據(jù)需要設(shè)置。③新的ANSI標(biāo)準(zhǔn)只建議使用緩沖系統(tǒng),并對(duì)緩沖文件系統(tǒng)的功能進(jìn)行了擴(kuò)充,使既能用于處理字符代碼文件,也能處理二進(jìn)制文件。,,33文件類型指針,對(duì)文件的操作是通過文件指針實(shí)現(xiàn)的,關(guān)鍵的概念是“文件指針”。調(diào)用一個(gè)文件需要的信息文件當(dāng)前讀寫的位置;與該文件對(duì)應(yīng)的內(nèi)存緩沖區(qū)的地址;緩沖區(qū)未被處理的字符數(shù)字符指針;文件的操作方式。,系統(tǒng)內(nèi)部定義了一個(gè)FILE的結(jié)構(gòu)類型。TYPEDEFSTRUCT{INT_FD//文件號(hào)INT_CLEFT//緩沖區(qū)中剩余的字符INT_MODE//文件操作方式CHAR_NEXTC//下一個(gè)字符位置CHAR_BUFF//文件緩沖區(qū)位置}FILE,FILE類型保存被使用的文件的有關(guān)信息所有的文件操作都需要FILE類型的指針FILE是庫文件中定義的結(jié)構(gòu)體的別名,FILE定義在STDIOH中注意不要寫成STRUCTFILE舉例FILEFP,,34文件的打開與關(guān)閉,文件必須先打開后,并及時(shí)關(guān)閉,1打開文件是在用戶程序和操作系統(tǒng)之間建立聯(lián)系,程序要把操作的文件的信息通知操作系統(tǒng),如文件名、文件操作方式讀寫。,讀文件需要先確定此文件是否存在,并將讀當(dāng)前位置設(shè)定為文件的開頭。寫文件需要檢查原來是否有同名文件,如有則將該文件的原有內(nèi)容刪除,如無同名文件就建立一個(gè)新文件,然后將寫當(dāng)前位置設(shè)定于文件的開頭,以便從文件開頭寫入數(shù)據(jù)。,文件的打開方式調(diào)用方式FOPEN“文件名“,“文件操作方式“;功能返回一個(gè)指向該文件的指針或錯(cuò)誤標(biāo)志NULL。,為避免出錯(cuò),常用以下方法來打開文件FILEFPIFFPFOPEN“文件名”,“使用文件方式”NULL{PRINTF”CANNOTOPENTHISFILE\N”EXIT0//正常中止程序},文件的打開模式,文件的打開舉例,FILEFP1,FP2,FP3CHARFILENAME“FILE3DAT“/以文本只讀方式打開FILE1/IFFP1FOPEN“FILE1“,“R“{PRINTF“CANNOTOPENTHISFILE\N“EXIT0/退出程序/}/以二進(jìn)制讀寫方式打開FILE2TXT/FP2FOPEN“C\\HOME\\FILE2TXT“,“RB“/以二進(jìn)制讀寫方式打開FILE3DAT/FP3FOPENFILENAME,“AB“,2文件的關(guān)閉調(diào)用方式FCLOSE文件指針變量;功能關(guān)閉一個(gè)已打開的文件釋放文件信息區(qū)返回值若成功,返回0,若出錯(cuò),返回EOF13文件結(jié)尾標(biāo)志EOF,說明釋放文件的有關(guān)信息區(qū);將輸出文件緩沖區(qū)的內(nèi)容無論緩沖區(qū)是否為滿都輸出寫入文件,然后關(guān)閉文件,這樣可防止丟失本來應(yīng)寫入文件的數(shù)據(jù)。不用的文件應(yīng)關(guān)閉,防止數(shù)據(jù)破壞丟失,文件應(yīng)用示例例1格式化的輸入輸出。FPRINTFFP,格式字符串,輸出項(xiàng)表列功能將輸出按格式串規(guī)定輸出到指定文件。FSCANFFP,格式字符串,輸入項(xiàng)表列功能從FP所指文件按格式串讀入數(shù)據(jù)。函數(shù)執(zhí)行成功返回讀得的數(shù)據(jù)項(xiàng)個(gè)數(shù);若在讀第1項(xiàng)前已到達(dá)文件結(jié)束處,則返回EOF。,INCLUDEINCLUDEINCLUDEVOIDMAIN{FILEFPCHARNAME10INTNUMFLOATSCOREIFFPFOPEN“FILE3TXT“,“W“NULL{PRINTF“CANNOTOPENTHISFILE\N“EXIT0}PRINTF“ENTERNAME,NUM,SCORE“SCANF“SDF“,NAME,,WHILESTRLENNAME1{FPRINTFFP,“SDF\N“,NAME,NUM,SCOREPRINTF“ENTERNAME,NUM,SCORE“SCANF“SDF“,NAME,}REWINDFPWHILEFSCANFFP,“SDF“,NAME,FCLOSEFP},輸入ENTERNAME,NUM,SCOREZHANGSAN050190ENTERNAME,NUM,SCORELIMING050285ENTERNAME,NUM,SCOREGAOFEI050395ENTERNAME,NUM,SCORE000,輸出ZHANGSAN5019000LIMING5028500GAOFEI5039500,例2具有文件拷貝功能的程序FILECOPYC。說明兩個(gè)問題命令行參數(shù)的應(yīng)用和文件的字符輸入與輸出應(yīng)用。FGETCFP功能從指定文件讀入一個(gè)字符。FPUTCCH,FP功能把一個(gè)字符寫到指定文件中去。,INCLUDEINCLUDEINCLUDEVOIDFILECOPYFILEFP1,FILEFP2{CHARCWHILECFGETCFP1EOFFPUTCC,FP2},VOIDMAININTARGC,CHARARGV{FILEFP1,FP2//VOIDFILECOPYFILEFP1,FILEFP2IFARGC1{IFFP1FOPENARGV,“R“NULL{PRINTF“CANTFOPENS\N“,ARGVEXIT0}IFFP2FOPENARGV,“W“NULL{PRINTF“CANTFOPENS\N“,ARGVEXIT0}FILECOPYFP1,FP2}},例3文件的字符串的輸入輸出處理。FGETSSTR,N,FP字符串輸入函數(shù)其功能是從FP指定的文件中讀取一個(gè)串,若滿足以下條件讀取結(jié)束①已讀取N1個(gè)字符,②當(dāng)前讀取到的字符是回車符,③已讀取到文件尾。讀取的字符個(gè)數(shù)至多N1個(gè),余下的一個(gè)字節(jié)空間作為加“\0”串結(jié)束符。讀取回車符時(shí),也作為一個(gè)字符送入由STR所指的內(nèi)存緩沖區(qū)。然后再加一個(gè)字符結(jié)束符“\0”STR為數(shù)組名或字符指針N為讀取字符個(gè)數(shù),例3文件的字符串的輸入輸出處理。FPUTSSTR,FP字符串輸出寫函數(shù)其功能是將STR所指定的字符串寫到FP指向的文件中。與FGETS函數(shù)在輸入字符串自動(dòng)加“\0”特性對(duì)應(yīng),F(xiàn)PUTS函數(shù)在將C字符串寫入文件時(shí)其末尾的“\0”字符自動(dòng)舍去。,INCLUDEINCLUDEINCLUDEVOIDMAIN{FILEFPCHARSTR16IFFPOPEN“FILE2TXT”,”W”NULL{PRINTF“CANNOTOPENTHISFILE\N”EXIT0}WHILESTRLENGETSSTR0FPUTSSTR,FPFCLOSEFPIFFPOPEN“FILE2TXT”,”R”NULL{PRINTF“CANNOTOPENTHISFILE\N”EXIT0}WHILEFGETSSTR,16,FPNULLPRINTF“S\N”,STRFCLOSEFP},文件的讀寫,例4數(shù)據(jù)塊二進(jìn)制形式的讀寫FREADBUFFER,SIZE,COUNT,FP功能從指定文件讀入COUNT個(gè)大小為SIZE的字節(jié)數(shù)據(jù)塊,存入BUFFER所指存儲(chǔ)單元。返回所讀的數(shù)據(jù)項(xiàng)個(gè)數(shù),如遇文件結(jié)束或出錯(cuò)返回0。FWRITEBUFFER,SIZE,COUNT,FP功能從BUFFER所指存儲(chǔ)單元的數(shù)據(jù)取SIZECOUNT個(gè)字節(jié)送FP所指文件。返回寫到FP所指文件中的數(shù)據(jù)項(xiàng)的個(gè)數(shù)。,例4數(shù)據(jù)塊二進(jìn)制形式的讀寫FREADBUFFER,SIZE,COUNT,FPFWRITEBUFFER,SIZE,COUNT,FP說明BUFFER為輸入輸出在內(nèi)存中存放的首地址;SIZE為讀、寫的字節(jié)數(shù),即數(shù)據(jù)塊的大??;COUNT為輸入輸出的數(shù)據(jù)項(xiàng)的個(gè)數(shù);FREAD和FWRITE用于二進(jìn)制文件的輸入輸出。,INCLUDEINCLUDEDEFINESIZE4STRUCTSTUDENT{CHARNAME10INTNUM,AGECHARADDR15}STUDSIZEVOIDSAVE_LOAD{FILEFPINTIIFFPFOPEN“STU_LIST“,“WB“NULL{PRINTF“CANNOTOPENFILE\N“EXIT0},FORI0ISIZEI{IFFWRITEEXIT0}}REWINDFPFORI0ISIZEI{IFFREAD}},輸入ZHANG100119ROOM_101LI100219ROOM_102WANG100321ROOM_103ZHAO100421ROOM_104,輸出ZHANG100119ROOM_101LI100219ROOM_102WANG100321ROOM_103ZHAO100421ROOM_104,VOIDMAIN{INTIFORI0ISIZEISCANF“SDDS“,STUDINAME,SAVE_LOAD},回顧FGETC,FPUTC,FGETS,FPUTS,FSCANF,FPRINTF,,這些函數(shù)都是按順序讀/寫文件,35文件的隨機(jī)讀寫,解決的辦法把文件指針移到指定的位置即可。,關(guān)鍵步驟文件的定位。,35文件的隨機(jī)讀寫,問題要求打開文件后,對(duì)指定位置上的數(shù)據(jù)進(jìn)行讀寫操作,減少一些不必要的中間環(huán)節(jié)。,一、對(duì)文件隨機(jī)存取的思想,?對(duì)一個(gè)文件流,有主觀的愿望要取指定位置的記錄和更新指定位置的記錄。,如對(duì)一個(gè)文件流,可以有兩種目的,?從第I個(gè)字節(jié)開始,讀取K個(gè)字節(jié)的內(nèi)容,?把K個(gè)字節(jié)的內(nèi)容寫到從第I個(gè)字節(jié)開始后,存在的問題讀取的內(nèi)容是否滿足我們的要求,,二、隨機(jī)存取的應(yīng)用,?隨機(jī)存取文件適合于具有固定長度記錄的文件,程序可以很方便的訪問到指定位置處的記錄。,訪問,,三、隨機(jī)存取的目的,1方便、快捷,2只改變指定位置后的固定長度字節(jié)的內(nèi)容不會(huì)破壞其它的數(shù)據(jù),讀取、修改等,,問題的實(shí)質(zhì)把指定的數(shù)據(jù)寫到文件流中指定的位置。,問題的關(guān)鍵把文件指針定位到文件流中指定的位置。,步驟定位??寫數(shù)據(jù),四、向隨機(jī)文件中隨機(jī)地寫入數(shù)據(jù),五、文件定位函數(shù),FSEEK文件指針變量、位移量、起始點(diǎn),注起始點(diǎn)的取值只有3種,位移量以起始點(diǎn)為基點(diǎn)移動(dòng)的字節(jié)數(shù),0??文件開始處,1??文件位置指針的當(dāng)前位置,2??文件尾。,,位移量應(yīng)為LONG型,FSEEK的返回值,0??成功,非零??失敗,例FSEEKFP,20L,0,將位置指針從文件頭移動(dòng)20個(gè)字節(jié),FSEEKFP,?10L,1,將位置指針移到離文件尾30個(gè)字節(jié)處,FSEEKFP,?30L,2,將位置從當(dāng)前位置向后移10個(gè)字節(jié),六、位置函數(shù),FTELL文件指針變量;,作用返回位置指針的當(dāng)前指向,返回值,,≥0,文件指針的當(dāng)前指向,?1,出錯(cuò),例5文件DATA1TXT的內(nèi)容如下,THISISATEST,C語言程序設(shè)計(jì),隨機(jī)讀寫函數(shù)測試。,要求編寫一程序隨機(jī)讀出指定的記錄。,七、重新定位函數(shù),REWIND文件指針變量,作用使文件指針返回到文件的開頭,無返回值,INCLUDEINCLUDEINCLUDEVOIDMAIN{FILEFPINTLOC1,LOC2LONGD8LCHARWFPFOPEN“DATA1TXT“,“R“IFFPNULLPRINTF“ERROR\N“ELSE{LOC1FSEEKFP,D,0IFLOC10{WFGETCFPPRINTF“WC\N“,W}},運(yùn)行結(jié)果,WALOC29LOC20,LOC2FTELLFPREWINDFPPRINTF“LOC2D\N“,LOC2LOC2FTELLFPFCLOSEFPPRINTF“LOC2D\N“,LOC2},,,思考,若要采用隨機(jī)讀寫的方式讀取一個(gè)漢字,程序如何修改,提示一個(gè)漢字占2個(gè)字節(jié),可使用FGETS函數(shù)將要讀出的漢字裝A數(shù)組,讀取的字符個(gè)數(shù)必須為≥3的單數(shù),八、文件操作的錯(cuò)誤檢測,C語言對(duì)于大多數(shù)標(biāo)準(zhǔn)I/O函數(shù)不具有明確的出錯(cuò)信息。,調(diào)用形式FERRORFP,,文件指針,返回值,,0未出錯(cuò),非0出錯(cuò),FERROR函數(shù)的值是最后一次調(diào)用時(shí)的出錯(cuò)狀態(tài)。,練習(xí),程序設(shè)計(jì)題統(tǒng)計(jì)滿足條件XXYYZZ2000的所有解的個(gè)數(shù),并將統(tǒng)計(jì)結(jié)果以格式“D“寫入到新建的文件DESIGNDAT。說明若A、B、C是1個(gè)解,則A、C、B也是1個(gè)解,等等。INCLUDEVOIDMAIN{FILEPINTX,Y,Z,K0//////////////},PFOPEN“DESIGNDAT“,“W“FORX1XSQRT2000XFORY1YSQRT2000YFORZ1ZSQRT2000ZIFXXYYZZ2000KFPRINTFP,“D“,KFCLOSEP,練習(xí),程序設(shè)計(jì)題在正整數(shù)中找出1個(gè)最小的、被3、5、7、9除余數(shù)分別為1、3、5、7的數(shù),將該數(shù)以格式“D“寫到新建文件DESIGNDAT。INCLUDEINCLUDEVOIDMAIN{//////////////},FILEPINTX0PFOPEN“DESIGNDAT“,“W“DO{X}WHILEX31FPRINTFP,“D“,XFCLOSEP,
      下載積分: 6 賞幣
      上傳時(shí)間:2024-01-05
      頁數(shù): 53
      11人已閱讀
      ( 4 星級(jí))
    • 簡介:第5章單片機(jī)的C語言程序設(shè)計(jì),1C語言與MCS512C51數(shù)據(jù)類型及在MCS51中的存儲(chǔ)方式3C51數(shù)據(jù)的存儲(chǔ)類型與MCS51存儲(chǔ)結(jié)構(gòu)4MCS51特殊功能寄存器SFR的C51定義5MCS51并行接口的C51定義6位變量的C51定義7C51構(gòu)造數(shù)據(jù)類型8模塊化程序開發(fā)過程,,采用C51的優(yōu)點(diǎn),編譯器能自動(dòng)完成變量的存儲(chǔ)單元的分配,編程者可以專注于應(yīng)用軟件的設(shè)計(jì),可以對(duì)常用的接口芯片編制通用的驅(qū)動(dòng)函數(shù),對(duì)常用的功能模塊和算法編制相應(yīng)的函數(shù),可以方便地進(jìn)行信號(hào)處理算法和程序的移植,從而加快單片機(jī)應(yīng)用系統(tǒng)的開發(fā)速度。當(dāng)代碼長度超過4KB以上時(shí),C51比匯編語言更具有明顯的優(yōu)勢。,C51與ASM51相比,有如下優(yōu)點(diǎn)1對(duì)單片機(jī)的指令系統(tǒng)不要求了解,僅要求對(duì)8051的存貯器結(jié)構(gòu)有初步了解;2寄存器分配、不同存貯器的尋址及數(shù)據(jù)類型等細(xì)節(jié)可由編譯器管理;3程序有規(guī)范的結(jié)構(gòu),可分成不同的函數(shù),這種方式可使程序結(jié)構(gòu)化;,4具有將可變的選擇與特殊操作組合在一起的能力,改善了程序的可讀性;5提供的庫包含許多標(biāo)準(zhǔn)子程序,具有較強(qiáng)的數(shù)據(jù)處理能力;6由于具有方便的模塊化編程技術(shù),使已編好程序可容易地移植;,例清零程序?qū)?000H20FFH的內(nèi)容清零★匯編語言程序ORG0000HSE01MOVR0,00HMOVDPTR,2000H0000H送DPTRLOO1CLRAMOVXDPTR,A0送DPTRINCDPTRDPTR1INCR0字節(jié)數(shù)加1CJNER0,00H,LOO1不到FF個(gè)字節(jié)再清LOOPSJMPLOOPEND,清零程序?qū)?000H20FFH的內(nèi)容清零★C-51程序INCLUDEVOIDMAIN{INTIUNSIGNEDCHARXDATAP0X2000/指針指向2000H單元/FORI0I256I{P0P}/清零2000H20FFH單元/},ORG0000HL00MOVR0,10H查找16個(gè)字節(jié)MOVR1,00HMOVDPTR,2000HL11MOVXA,DPTRCJNEA,00H,L16取出內(nèi)容與00H相等嗎INCR1取出個(gè)數(shù)加1L16INCDPTRDJNZR0,L11未完繼續(xù)MOVDPTR,2100HMOVA,R1MOVXDPTR,A相同數(shù)個(gè)數(shù)送2100HL1ESJMPL1EEND,例查找零的個(gè)數(shù)(在2000H200FH中查出有幾個(gè)字節(jié)是零,把個(gè)數(shù)放在2100H單元中),★查找零的個(gè)數(shù)C-51程序INCLUDEVOIDMAIN{UNSIGNEDCHARXDATAP0X2000/指針P指向2000H單元/INTN0,IFORI0I16I{IFP0N/若該單元內(nèi)容為零,則N1/P/指針指向下一單元/}P0X2100/指針P指向2100H單元/PN/把個(gè)數(shù)放在2100H單元中/},1C語言與MCS–51,用匯編語言編程時(shí),必須要考慮其存儲(chǔ)器結(jié)構(gòu),尤其必須考慮其片內(nèi)數(shù)據(jù)存儲(chǔ)器與特殊功能寄存器正確、合理的使用以及按實(shí)際地址處理端口數(shù)據(jù)。用C語言編程中,對(duì)數(shù)據(jù)類型與變量的定義,必須要與單片機(jī)的存儲(chǔ)結(jié)構(gòu)相關(guān)聯(lián),否則編譯器不能正確地映射定位。用C語言編寫單片機(jī)程序與標(biāo)準(zhǔn)C語言程序的不同之處就在于根據(jù)單片機(jī)存儲(chǔ)結(jié)構(gòu)及內(nèi)部資源定義相應(yīng)的C語言中的數(shù)據(jù)類型和變量。,用C語言編寫的應(yīng)用程序必須經(jīng)單片機(jī)的C語言編譯器簡稱C51,轉(zhuǎn)換生成單片機(jī)可執(zhí)行的代碼程序?,F(xiàn)在支持MCS–51系列單片機(jī)的C語言編譯器有很多種。如AMERICANAUTOMATION、AUOCET、BSO/TASKING、DUNFIELDSHAREWARE、KEIL/FRANKLIN等。其中KEIL/FRANKLIN以它的代碼緊湊和使用方便等特點(diǎn)優(yōu)于其它編譯器。本章是針對(duì)這種編譯器介紹MCS–51單片機(jī)C語言程序設(shè)計(jì)。,2C51數(shù)據(jù)類型及在MCS51中的存儲(chǔ)方式,21C51的數(shù)據(jù)類型KEIL/FRANKLINC51編譯器支持的數(shù)據(jù)類型有位型BIT、無符號(hào)字符UNSIGNEDCHAR、有符號(hào)字符SINGEDCHAR、無符號(hào)整型UNSIGNEDINT、有符號(hào)整型SIGNEDINT、無符號(hào)長整型UNSIGNEDLONG、有符號(hào)長整型SIGNEDLONG、浮點(diǎn)型FLOAT和指針類型等。,表1C51的數(shù)據(jù)類型,22C51數(shù)據(jù)在MCS51中的存儲(chǔ)方式,位變量BIT與MCS51硬件特性操作有關(guān)的可定義成位變量。位變量必須定位在MCS51單片機(jī)片內(nèi)RAM的位尋址空間中。字符變量CHAR字符變量的長度為1字節(jié)即8位。對(duì)于無符號(hào)變量UNSIGNEDCHAR的值域范圍是0255。對(duì)于有符號(hào)字符變量SIGNEDCHAR,最具有重要意義的位是最高位上的符號(hào)標(biāo)志位MSB。此位為1代表“負(fù)“,為0代表“正“。有符號(hào)字符變量和無符號(hào)字符變量在表示0127的數(shù)值時(shí),其含義是一樣的,都是00X7F。負(fù)數(shù)一般用補(bǔ)碼表示,即用11111111表示1,用11111110表示2。,整型變量INT整型變量的長度為16位。MCS51系列單片機(jī)將INT型變量的高位字節(jié)數(shù)存放在低地址字節(jié)中,低位字節(jié)數(shù)存放在高地址字節(jié)中。有符號(hào)整型變量SIGNEDINT也使用MSB位作符號(hào)標(biāo)志位,并使用二進(jìn)制補(bǔ)碼表示數(shù)值??芍苯邮褂脦追N專用的機(jī)器指令來完成多字節(jié)的加、減、乘、除運(yùn)算。整型變量值0X1234以圖1所示的方式存放在內(nèi)存中。,圖1整型數(shù)的存儲(chǔ)結(jié)構(gòu),01,地址,0123,地址,圖2長整型變量的存儲(chǔ)結(jié)構(gòu),浮點(diǎn)型變量FLOAT浮點(diǎn)型變量為32位,占4個(gè)字節(jié),許多復(fù)雜的數(shù)學(xué)表達(dá)式都采用浮點(diǎn)變量數(shù)據(jù)類型。用符號(hào)位表示數(shù)的符號(hào),用階碼和尾數(shù)表示數(shù)的大小。用它們進(jìn)行任何數(shù)學(xué)運(yùn)算都需要使用由編譯器決定的各種不同效率等級(jí)的庫函數(shù)。C51的浮點(diǎn)變量數(shù)據(jù)類型的使用格式與IEEE754標(biāo)準(zhǔn)有關(guān),具有24位精度,尾數(shù)的高位始終為“1“,因而不保存,位的分布如下●1位符號(hào)位?!?位指數(shù)位?!?3位尾數(shù)。,符號(hào)位是最高位,尾數(shù)為低23位,內(nèi)存中按字節(jié)存儲(chǔ)順序如下,其中,S為符號(hào)位,1表示負(fù),0表示正;E為階碼;M為23位尾數(shù),最高位為“1“。浮點(diǎn)變量值125的十進(jìn)制為0XC1480000,它按圖3所示方式存于內(nèi)存中。,0123,地址,圖3浮點(diǎn)數(shù)的存儲(chǔ)結(jié)構(gòu),在編程時(shí),如果只強(qiáng)調(diào)運(yùn)算速度而不進(jìn)行負(fù)數(shù)運(yùn)算時(shí),最好采用無符號(hào)UNSIGNED格式。無符號(hào)字符類型的使用無論何時(shí),應(yīng)盡可能使用無符號(hào)字符變量,因?yàn)樗苤苯颖籑CS51所接受?;谕瑯拥脑?,也應(yīng)盡量使用位變量。有符號(hào)字符變量雖然也只占用一個(gè)字節(jié),但需要進(jìn)行額外的操作來進(jìn)行測試代碼的符號(hào)位。,使用簡化形式定義數(shù)據(jù)類型。其方法是在源程序開頭使用DEFINE語句自定義簡化的類型標(biāo)識(shí)符。例如DEFINEUCHARUNSIGNEDCHARDEFINEUINTUNSIGNEDINT這樣,在編程中,就可以用UCHAR代替UNSIGNEDCHAR,用UINT代替UNSIGNEDINT來定義變量。,3C51數(shù)據(jù)的存儲(chǔ)類型與MCS51存儲(chǔ)結(jié)構(gòu),表2C51存儲(chǔ)類型與MCS51存儲(chǔ)空間的對(duì)應(yīng)關(guān)系,1、DATA區(qū)8051內(nèi)128字節(jié)的內(nèi)部RAM,或8052的前128字節(jié)內(nèi)部RAM,這部分主要是作為數(shù)據(jù)段稱為DATA區(qū)。指令用一個(gè)或兩個(gè)周期來訪問數(shù)據(jù)段。數(shù)據(jù)段中有兩個(gè)小段,第一個(gè)子段包含四組寄存器組。另外一個(gè)子段叫做位尋址段BDATA,包括16個(gè)字節(jié)共128位每一位都可單獨(dú)尋址。對(duì)DATA區(qū)的尋址是最快的所以應(yīng)該把使用頻率高的變量放在DATA區(qū),DATA區(qū)除了包含程序變量外還包含了堆棧和寄存器組UNSIGNEDCHARDATASYSTEM_STATUS0UNSIGNEDINTDATAUNIT_ID2CHARDATAINP_STRING16FLOATDATAOUTP_VALUEMYTYPEDATANEW_VAR,2、BDATA區(qū)單片機(jī)內(nèi)部RAM的位尋址區(qū)叫做位尋址段BDATA區(qū),包括16個(gè)字節(jié)共128位??梢栽贒ATA區(qū)的位尋址區(qū)定義變量非浮點(diǎn)型,這個(gè)變量就可進(jìn)行位尋址,并且可以聲明位變量。UNSIGNEDCHARBDATASTATUS_BYTEUNSIGNEDINTBDATASTATUS_WORDSBITSTAT_FLAGSTATUS_BYTE4IFSTATUS_WORD15{}STAT_FLAG1編譯器不允許在BDATA段中定義FLOAT和DOUBLE類型的變量。,IDATA段8051系列的一些單片機(jī)如8052有附加的128字節(jié)的內(nèi)部RAM,位于從80H開始的地址空間中,這部分加上低128字節(jié)的內(nèi)部RAM共256字節(jié),被稱為IDATA。因?yàn)镮DATA區(qū)的地址和SFR的地址是重疊的,通過區(qū)分所訪問的存儲(chǔ)區(qū)來解決地址重疊問題,因此IDATA區(qū)只能通過間接尋址來訪問IDATA段也可存放使用比較頻繁的變量,使用寄存器作為指針進(jìn)行尋址,在寄存器中設(shè)置8位地址進(jìn)行間接尋址。和外部存儲(chǔ)器尋址比較,它的指令執(zhí)行周期和代碼長度都比較短。UNSIGNEDCHARIDATASYSTEM_STATUS0UNSIGNEDINTIDATAUNIT_ID2CHARIDATAINP_STRING16FLOATIDATAOUTP_VALUE,,PDATA區(qū)外部存儲(chǔ)區(qū)的最低地址的256個(gè)字節(jié),稱為PDATA區(qū)。通過P0口的地址對(duì)其尋址,使用指令MOVXRN,需要兩個(gè)指令周期。UNSIGNEDINTPDATAUNIT_ID2FLOATPDATAOUTP_VALUE,XDATA區(qū)8051單片機(jī)的外部RAM,存儲(chǔ)空間為64K,采用16位地址尋址稱作外部數(shù)據(jù)區(qū)簡稱XDATA區(qū)。這個(gè)區(qū)通常包括一些RAM如SRAM或一些需要通過總線接口的外圍器件。UNSIGNEDCHARXDATASYSTEM_STATUS0CHARXDATAINP_STRING16,CODE區(qū)程序存儲(chǔ)區(qū)稱為CODE區(qū),使用MOVCA,DPTR訪問。代碼段的數(shù)據(jù)是不可改變的8051的代碼段不可重寫一般代碼段中可存放數(shù)據(jù)表、跳轉(zhuǎn)向量和狀態(tài)表。對(duì)CODE段的訪問和對(duì)XDATA段的訪問的時(shí)間是一樣的,代碼段中的對(duì)象在編譯的時(shí)候初始化。UNSIGNEDINTCODEUNIT_ID1234UNSIGNEDCHARCH_ARRAY16{0X00,0X01,0X02,0X03,0X04,0X05,0X06,0X07,0X08,0X09,0X10,0X11,0X12,0X13,0X14,0X15},表3C51存儲(chǔ)類型及其數(shù)據(jù)長度和值域,帶存儲(chǔ)類型的變量的定義的一般格式為數(shù)據(jù)類型存儲(chǔ)類型變量名,帶存儲(chǔ)類型的變量定義舉例CHARDATAVAR1;BITBDATAFLAGS;FLOATIDATAX,Y,Z;UNSIGNEDINTPDATAVAR2;UNSIGNEDCHARVECTOR34;,表4存儲(chǔ)模式說明,4MCS51特殊功能寄存器SFR的C51定義,MCS51單片機(jī)中,除了程序計(jì)數(shù)器PC和4組工作寄存器組外,其它所有的寄存器均為特殊功能寄存器SFR,分散在片內(nèi)RAM區(qū)的高128字節(jié)中,地址范圍為80H0FFH。SFR中有11個(gè)寄存器具有位尋址能力,它們的字節(jié)地址都能被8整除,即字節(jié)地址是以8或0為尾數(shù)的。為了能直接訪問這些SFR,C51提供了一種自主形式的定義方法,這種定義方法與標(biāo)準(zhǔn)C語言不兼容,只適用于對(duì)MCS51系列單片機(jī)進(jìn)行C語言編程。,特殊功能寄存器C51定義的一般語法格式如下SFRSFRNAMEINTCONSTANT;“SFR“是定義語句的關(guān)鍵字,其后必須跟一個(gè)MSC51單片機(jī)真實(shí)存在的特殊功能寄存器名,““后面必須是一個(gè)整型常數(shù),不允許帶有運(yùn)算符的表達(dá)式,是特殊功能寄存器“SFRNAME“的字節(jié)地址,這個(gè)常數(shù)值的范圍須在SFR地址范圍內(nèi),位于0X800XFF。例如SFRSCON0X98;/串口控制寄存器地址98H/SFRTMOD0X89;/定時(shí)/計(jì)數(shù)器方式控制寄存器地址89H/,MCS51系列單片機(jī)的特殊功能寄存器的數(shù)量與類型不盡相同,因此一般將所有特殊的“SFR“定義放入一個(gè)頭文件中,該文件應(yīng)包括MCS51單片機(jī)系列機(jī)型中的SFR定義。C51編譯器的“REG51H“頭文件就是這樣一個(gè)文件。在新的MCS51系列產(chǎn)品中,SFR在功能上經(jīng)常組合為16位值,當(dāng)SFR的高字節(jié)地址直接位于低字節(jié)之后時(shí),對(duì)16位SFR的值可以直接進(jìn)行訪問。如52子系列的定時(shí)器/計(jì)數(shù)器2就是這種情況。為了有效地訪問這類SFR,可使用關(guān)鍵字“SFR16“來定義,其定義語句的語法格式與8位SFR相同,只是““后面的地址必須用16位SFR的低字節(jié)地址,即低字節(jié)地址作為“SFR16“的定義地址。,例如SFR16T20XCC/定時(shí)器/計(jì)數(shù)器2T2低8位地址為0CCH,T2高8位地址為0CDH/這種定義適用于所有新的16位SFR,但不能用于定時(shí)器/計(jì)數(shù)器0和1。對(duì)于位尋址的SFR中的位,C51的擴(kuò)充功能支持特殊位的定義,像SFR一樣不與標(biāo)準(zhǔn)C兼容,使用“SBIT“來定義位尋址單元。,第一種格式SBITBITNAMESFRNAMEINTCONSTANT;“SBIT“是定義語句的關(guān)鍵字,后跟一個(gè)尋址位符號(hào)名該位符號(hào)名必須是MCS51單片機(jī)中規(guī)定的位名稱,““后的“SFRNAME“必須是已定義過的SFR的名字,““后的整常數(shù)是尋址位在特殊功能寄存器“SFRNAME“中的位號(hào),必須是07范圍中的數(shù)。例如SFRPSW0XD0;/定義PSW寄存器地址為D0H/SBITOVPSW2;/定義OV位為PSW2,地址為D2H/SBITCYPSW7;/定義CY位為PSW7,地址為D7H/,第二種格式SBITBITNAMEINTCONSTANTINTCONSTANT;““后的INTCONSTANT為尋址地址位所在的特殊功能寄存器的字節(jié)地址,““符號(hào)后的INTCONSTANT為尋址位在特殊功能寄存器中的位號(hào)。例如SBITOV0XD02;/定義OV位地址是D0H字節(jié)中的第2位/SBITCY0XD07;/定義CY位地址是D0H字節(jié)中的第7位/,第三種格式SBITBITNAMEINTCONSTANT;““后的INTCONSTANT為尋址位的絕對(duì)位地址。例如SBITOV0XD2;/定義OV位地址為D2H/SBITCY0XD7;/定義CY位地址為D7H/特殊功能位代表了一個(gè)獨(dú)立的定義類,不能與其它位定義和位域互換。,5MCS51并行接口的C51定義,MCS51系列單片機(jī)并行I/O接口除了芯片上的4個(gè)I/O口P0P3外,還可以在片外擴(kuò)展I/O口。MCS51單片機(jī)I/O口與數(shù)據(jù)存儲(chǔ)器統(tǒng)一編址,即把一個(gè)I/O口當(dāng)作數(shù)據(jù)存儲(chǔ)器中的一個(gè)單元來看待。使用C51進(jìn)行編程時(shí),MCS51片內(nèi)的I/O口與片外擴(kuò)展的I/O可以統(tǒng)一在一個(gè)頭文件中定義,也可以在程序中一般在開始的位置進(jìn)行定義,其定義方法如下,對(duì)于MCS51片內(nèi)I/O口按特殊功能寄存器方法定義。如SFRP00X80;/定義P0口,地址為80H/SFRP10X90;/定義P1口,地址為90H/,對(duì)于片外擴(kuò)展I/O口,則根據(jù)硬件譯碼地址,將其視作為片外數(shù)據(jù)存儲(chǔ)器的一個(gè)單元,使用DEFINE語句進(jìn)行定義。例如INCLUDEDEFINEPORTAXBYTE0XFFC0ABSACCH是C51中絕對(duì)地址訪問函數(shù)的頭文件,將PORTA定義為外部I/O口,地址為FFC0H,長度為8位。一旦在頭文件或程序中對(duì)這些片外I/O口進(jìn)行定義后,在程序中就可以自由使用變量名與其實(shí)際地址的聯(lián)系,以便使程序員能用軟件模擬MCS51的硬件操作。,1位變量C51定義。使用C51編程時(shí),定義了位變量后,就可以用定義了的變量來表示MCS51的位尋址單元。位變量的C51定義的一般語法格式如下位類型標(biāo)識(shí)符BIT位變量名;例如BITDIRECTION_BIT;/把DIRECTION_BIT定義為位變量/BITLOOK_POINTER;/把LOOK_POINTER定義為位變量/,6位變量的C51定義,2函數(shù)可包含類型為“BIT“的參數(shù),也可以將其作為返回值。例如BITFUNCBITB0,BITB1/變量B0,B1作為函數(shù)的參數(shù)/{RETURNB1;/變量B1作為函數(shù)的返回值/}注意,使用PRAGMADISABLE或包含明確的寄存器組切換USINGN的函數(shù)不能返回位值,否則編輯器將會(huì)給出一個(gè)錯(cuò)誤信息。,,3對(duì)位變量定義的限制。位變量不能定義成一個(gè)指針,如不能定義BITBIT_POINTER。不存在位數(shù)組,如不能定義BITB_ARRAY。在位定義中,允許定義存儲(chǔ)類型,位變量都被放入一個(gè)位段,此段總位于MCS51片內(nèi)的RAM區(qū)中。因此,存儲(chǔ)類型限制為BDATA和IDATA,如果將位變量的存儲(chǔ)類型定義成其它存儲(chǔ)類型都將編譯出錯(cuò)。,例1先定義變量的數(shù)據(jù)類型和存儲(chǔ)類型BDATAINTIBASE;/定義IBASE為BDATA整型變量/BDATACHARBARY4;/BARY4定義為BDATA字符型數(shù)組/然后可使用“SBIT“定義可獨(dú)立尋址訪問的對(duì)象位SBITMYBIT0IBASE0;/MYBIT0定義為IBASE的第0位/SBITMYBIT15IBASE15;/MYBIT0定義為IBASE的第15位/SBITARY07BARY07;/ARY07定義為ABRY0的第7位/SBITARY37BARY37;/ARY37定義為ABRY3的第7位/,對(duì)象IBASE和BARY也可以字節(jié)尋址ARY370;/BARY3的第7位賦值為0/BARY3A/字節(jié)尋址,BARY3賦值為A/SBIT定義要位尋址對(duì)象所在字節(jié)基址對(duì)象的存儲(chǔ)類型為“BDATA“,否則只有絕對(duì)的特殊位定義SBIT是合法的。““操作符后的最大值依賴于指定的基類型,對(duì)于CHAR/UCHAR而言是07,對(duì)于INT/UINT而言是015,對(duì)于LONG/ULONG而言是031。,7C51構(gòu)造數(shù)據(jù)類型,71基于存儲(chǔ)器的指針基于存儲(chǔ)器的指針以存儲(chǔ)器類型為參量,它在編譯時(shí)才被確定。因此,為指針選擇存儲(chǔ)器的方法可以省掉,以便這些指針的長度為一個(gè)字節(jié)IDATA,DATA,PDATA或2個(gè)字節(jié)CODE,XDATA。編譯時(shí),這類操作一般被“行內(nèi)“INLINE編碼,而無需進(jìn)行庫調(diào)用?;诖鎯?chǔ)器的指針定義舉例CHARXDATAPX;,在XDATA存儲(chǔ)器中定義了一個(gè)指向字符型CHAR的指針變量PX。指針自身在默認(rèn)存儲(chǔ)區(qū)決定于編譯模式,長度為2個(gè)字節(jié)值為00XFFFF。CHARDATAPDX;除了明確定義指針位于MCS51內(nèi)部存儲(chǔ)區(qū)DATA外,其它與上例相同,它與編譯模式無關(guān)。CHARXDATADATAPDX,STRUCTTIME{CHARHOUR;CHARMIN;CHARSEC;STRUCTTIMEXDATAPXTIME;}在結(jié)構(gòu)STRUCTTIME中,除了其它結(jié)構(gòu)成員外,還包含有一個(gè)具有和STRUCTTIME相同的指針PXTIME,TIME位于外部數(shù)據(jù)存儲(chǔ)器XDATA,指針PXTIME具有兩個(gè)字節(jié)長度。,STRUCTTIMEIDATAPTIME;這個(gè)聲明定義了一個(gè)位于默認(rèn)存儲(chǔ)器中的指針,它指向結(jié)構(gòu)TIME,TIME位于IDATA存儲(chǔ)器中,結(jié)構(gòu)成員可以通過MCS51的R0或R1進(jìn)行間接訪問,指針PTIME為1個(gè)字節(jié)長。PTIME→PXTIME→HOUR12;使用上面的關(guān)于STRUCTTIME和STRUCTIDATAPTIME的定義,指針“PXTIME“被從結(jié)構(gòu)中間接調(diào)用,它指向位于XDATA存儲(chǔ)器中的TIME結(jié)構(gòu)。結(jié)構(gòu)成員HOUR被賦值為12。,72一般指針一般指針包括3個(gè)字節(jié)1個(gè)字節(jié)存儲(chǔ)類型和2個(gè)字節(jié)偏移地址,即,其中,第一字節(jié)代表了指針的存儲(chǔ)器類型,存儲(chǔ)器類型編碼如下,例如,以XDATA類型的0X1234地址為指針可以表示如下,當(dāng)用常數(shù)作指針時(shí),必須注意正確定義存儲(chǔ)器類型和偏移量。例如,將常數(shù)值0X41寫入地址為0X8000的外部數(shù)據(jù)存儲(chǔ)器。DEFINEXBYTECHAR0X20000LXBYTE0X80000X41;其中,XBYTE被定義為CHAR0X20000L,0X20000L為一般指針,其存儲(chǔ)類型為2,偏移量為0000H,這樣XBYTE成為指向XDATA零地址的指針。而XBYTE8000則是外部數(shù)據(jù)存儲(chǔ)器的0X8000絕對(duì)地址。,8模塊化程序開發(fā)過程,圖4程序開發(fā)過程,C51程序開發(fā)過程,81混合編程,1.命名規(guī)則,表5函數(shù)名的轉(zhuǎn)換,例2用匯編語言編寫函數(shù)“TOUPPER“,參數(shù)傳遞發(fā)生在寄存器R7中。UPPERSEGMENTCODE;程序段PUBLIC_TOUPPER;入口地址PSEGUPPER;程序段_TOUPPERMOVA,R7;從R7中取參數(shù)CJNEA,A,3JCUPPERETCJNEA,Z1,3JNCUPPERETCLRACC,5UPPERETMOVR7,A;返回值放在R7中RET;返回到C,2.參數(shù)傳遞規(guī)則,表6參數(shù)傳遞的寄存器選擇,FUNC1INTA“A“是第一個(gè)參數(shù),在R6,R7中傳遞。FUNC2INTB,INTC,INTD“B“是第一個(gè)參數(shù),在R6,R7中傳遞;“C“是第二個(gè)參數(shù),在R4,R5中傳遞;“D“是第三個(gè)參數(shù),在R1,R2,R3中傳遞。FUNC3LONGE,LONGF“E“是第一個(gè)參數(shù),在R4R7中傳遞;“F“是第二個(gè)參數(shù),不能在寄存器中傳遞,只能在參數(shù)傳遞段中傳遞。FUNC4FLOATG,CHARH“G“是第一個(gè)參數(shù),在R4R7中傳遞;“H“是第二個(gè)參數(shù),必須在參數(shù)傳遞段中傳遞。,表7函數(shù)返回值的寄存器,在匯編子程序中,當(dāng)前選擇的寄存器組及寄存器ACC、B、DPTR和PSW都可能改變。當(dāng)被C調(diào)用時(shí),必須無條件地假設(shè)這些寄存器的內(nèi)容已被破壞。如果已在連接/定位程序時(shí)選擇了覆蓋,那么每個(gè)匯編子程序包含一個(gè)單獨(dú)的程序段是必要的,因?yàn)樵诟采w過程中,函數(shù)間參量通過子程序各自的段參量計(jì)算。匯編子程序的數(shù)據(jù)區(qū)甚至可包含在覆蓋部分中,但應(yīng)注意下面兩點(diǎn)1所有段名必須以C51類似的方法建立。2每個(gè)有局部變量的匯編程序必須指定自己的數(shù)據(jù)段,這個(gè)數(shù)據(jù)段只能為其它函數(shù)訪問作參數(shù)傳遞用。所有參數(shù)一個(gè)接一個(gè)被傳遞,由其它函數(shù)計(jì)算的結(jié)果保存入棧。,82覆蓋和共享,1.覆蓋單片機(jī)片內(nèi)存儲(chǔ)空間有限,連接器/定位器通常重新啟用程序不再用的位置。這就是說,若一個(gè)程序不再調(diào)用,也不由其它程序調(diào)用甚至間接調(diào)用,那么在其它程序執(zhí)行完之前,這個(gè)程序不再運(yùn)行。這個(gè)程序的變量可以放在與其它程序完全相同的RAM空間,很像可重用的寄存器。這種技術(shù)就是覆蓋。在匯編中直接通過手工完成的這些空間分配,C語言中可以由連接器自動(dòng)管理。若有幾個(gè)不相關(guān)聯(lián)的程序時(shí),它可以使RAM單元比手工考慮要用的少。,2.共享1共享變量,2共享函數(shù)/子程序C中函數(shù)若是全局的公用的,可以放在調(diào)用的函數(shù)之后。若函數(shù)是模塊專用的,它可以定義為靜態(tài)函數(shù),這樣它不能被其它模塊調(diào)用。C語言的ANSI標(biāo)準(zhǔn)建議所有函數(shù)在主函數(shù)前要有原型進(jìn)行說明,然后實(shí)際函數(shù)可在主函數(shù)之后或其它模塊中。匯編語言中,子程序使用標(biāo)號(hào)可在給定模塊的任何位置。匯編器首先掃描得到所有的符號(hào)名,然后值就可填入LCALL或LJMP。一個(gè)模塊或另一模塊共享子程序,一個(gè)使用PUBLIC而另一個(gè)使用EXTERN。當(dāng)指定為EXTERN,符號(hào)類型CODE,DATA,XDATA,IDATA,BIT或NUMBER必須特別加以指定,以便連接器可以確定放在一起的正確類型。,83庫和連接器/定位器1庫,表9C51的編譯庫,2.連接器/定位器1組合程序模塊將幾個(gè)不同程序模塊組合為一個(gè)模塊,并自動(dòng)從庫中挑選模塊嵌入目標(biāo)文件。輸入文件按命令行中出現(xiàn)的順序處理。通常的程序模塊是由C51編譯器或A51宏匯編生成的可重入的目標(biāo)文件。,2組合段將具有相同段名的可重定位段組合成單一的段。在一個(gè)程序模塊中定義的一個(gè)段成為部分段。一個(gè)部分段在源文件中以下列形式指定1名字每個(gè)重定位段有一個(gè)名字,它可與來自其它模塊的同名的可重定位段組合。絕對(duì)段沒有名字。2類型類型表明段所屬的地址空間CODE,XDATA,DATA或BIT。,3定位方式可重定位段的定位方式有PAGE,INPAGE,INBLOCK,BITADDRESSABLE或UNIT。INPAGE表明段必須放入一頁高8位地址相同中以使用短轉(zhuǎn)移和調(diào)用指令。INBLOCK段應(yīng)使用ACALL,必須放在2048字節(jié)塊中。因?yàn)闆]有連接器可以靈活地判知調(diào)用和轉(zhuǎn)移是否在塊內(nèi)??芍囟ㄎ坏钠渌拗剖荘AGE不能超過256字節(jié)
      下載積分: 6 賞幣
      上傳時(shí)間:2024-01-05
      頁數(shù): 79
      2人已閱讀
      ( 4 星級(jí))
    關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服客服 - 聯(lián)系我們

    機(jī)械圖紙?jiān)创a,實(shí)習(xí)報(bào)告等文檔下載

    備案號(hào):浙ICP備20018660號(hào)