前言:一篇好文章的誕生,需要你不斷地搜集資料、整理思路,本站小編為你收集了豐富的酒的詩句主題范文,僅供參考,歡迎閱讀并收藏。
>> 從古代詩句中映象出的葡萄酒文化(上) 從古代詩句中映象出的葡萄酒文化(下) 婚禮上的葡萄酒香 葡萄酒上的美國夢 葡萄上的白霜 舌尖上的意大利葡萄酒鄉(xiāng) 甜葡萄酒,舌尖上的舞蹈 舌尖上的吃(上) 葉子上的秘密(上) 郵票上的書法(上) 古代地理(上) 指尖上出“精彩” 古代試卷上的趣事 舌尖上的文化 上出《品質(zhì)》的“品質(zhì)” 從蘇堤上走過 葡萄酒行業(yè):酒文化里的就業(yè)黑馬 淺論宋詞中的葡萄酒文化 葡萄酒文化營銷模式的創(chuàng)新研究 葡萄酒文化在中國的傳播探討 常見問題解答 當(dāng)前所在位置:中國 > 藝術(shù) > 從古代詩句中映象出的葡萄酒文化(上) 從古代詩句中映象出的葡萄酒文化(上) 雜志之家、寫作服務(wù)和雜志訂閱支持對(duì)公帳戶付款!安全又可靠! document.write("作者: 劉慶")
申明:本網(wǎng)站內(nèi)容僅用于學(xué)術(shù)交流,如有侵犯您的權(quán)益,請(qǐng)及時(shí)告知我們,本站將立即刪除有關(guān)內(nèi)容。 記載張騫出使西域的壁畫
多年以來,我國史學(xué)家普遍認(rèn)為:公元前138年,張騫出使西域,將葡萄酒的釀造技術(shù)帶回中國。據(jù)《史記?大宛列傳》中記載,張騫出使西域,途經(jīng)大宛,親見:“宛左右以蒲桃為酒,富人藏酒至萬余石,久者數(shù)十歲不敗。俗嗜酒,馬嗜苜蓿……”于是,漢使(騫)“取其實(shí)來,天子始種苜蓿、蒲桃” 。蒲桃即葡萄。成書于北宋年間的《太平御覽》記載,西漢年間“離宮列觀盡種蒲桃” 。而當(dāng)代考古學(xué)的發(fā)現(xiàn)卻打破了這一史學(xué)定論。1980年,考古學(xué)家從河南商代遺址中,發(fā)掘出的銅卣內(nèi)盛滿酒液,科學(xué)家在酒液里化驗(yàn)出了葡萄酒成分,將我國釀造葡萄酒的歷史提前了一千多年。葡萄在夏、商、周時(shí)期被稱為“葛”,流傳于西周至春秋時(shí)期的第一部詩歌總集《詩經(jīng)》中就有關(guān)于“葛”的詩兩首,其一《王風(fēng)?葛》:“綿綿葛,在河之滸,終遠(yuǎn)兄弟,謂他人父。謂他人父,亦莫我顧?!逼涠吨苣?蓼木》:“南有蓼木,葛累之。樂只君子,福履綏之?!奔热挥小熬d綿葛”,那么以此為原料釀造美酒就成為一種可能。而河南商代遺址中出土的“葡萄酒”便證明了這種可能性。西漢張騫出使西域帶回的葡萄酒釀造技術(shù)應(yīng)該不同于商周時(shí)期西域各國的葡萄酒釀造技術(shù),故而被司馬遷明確記載下來。葡萄酒在西漢屬于貴族享用的“奢侈品”?!短接[》第972卷《續(xù)漢書》中同樣記載了關(guān)于“蒲桃酒”的一則事件:“佗又以蒲桃酒一斛遺讓,即拜涼州刺史?!睗h朝時(shí)的一斛約合現(xiàn)在的20升,以現(xiàn)在常規(guī)瓶裝葡萄酒每瓶750毫升為標(biāo)準(zhǔn),一斛“蒲桃酒”即為26.6瓶葡萄酒。把上面古文g成白話文,就是說孟佗這個(gè)人用27瓶蒲桃酒行賄內(nèi)侍張讓,馬上被封為涼州地區(qū)的行政長官。可見,葡萄酒在漢末是極具奢華的貴族享用品,非尋常百姓可以飲用。備注一下,孟佗雖不出名,但他兒子孟達(dá)是三國時(shí)期的風(fēng)云人物。
1、九九八十一是乘法口訣,意思是九九八十一9X9=81。
2、乘法口訣是中國古代籌算中進(jìn)行乘法、除法、開方等運(yùn)算的基本計(jì)算規(guī)則,沿用至今已有兩千多年,九九表也是小學(xué)算術(shù)的基本功。
3、古時(shí)的乘法口訣,是自上而下,從“九九八十一”開始,至“一一如一”止,與使用的順序相反,因此古人用乘法口訣開始的兩個(gè)字“九九”作為此口訣的名稱,又稱九九表、九九歌、九因歌、九九乘法表。
(來源:文章屋網(wǎng) )
你給自己倒了杯可樂,這叫低配置。
你給自己倒了杯啤酒,這叫標(biāo)準(zhǔn)配置。
你給自己倒了杯茶水,這茶的顏色還跟啤酒一樣,這叫木馬。
你給自己倒了杯可樂,還滴了幾滴醋,不僅顏色跟啤酒一樣,而且不冒熱氣還有泡泡,這叫超級(jí)木馬。
你的同事給你倒了杯白酒,這叫推薦配置。
人到齊了,酒席開始了。
你先一個(gè)人喝了一小口,這叫單元測試。你跟旁邊的人說哥們?cè)垭S意,這叫交叉測試。
但是他說不行,這杯要干了,這叫壓力測試。
于是你說那就大家一起來吧,這叫內(nèi)部測試。
這個(gè)時(shí)候boss向全場舉杯,這叫公開測試。
菜過三巡,你就不跟他們客氣了。
你向?qū)γ娴娜司淳?,這叫p2p。
你向?qū)γ娴娜司淳疲鼐茨?,你又再敬他……這叫tcp。
你向一桌人挨個(gè)敬酒,這叫令牌環(huán)。
你說只要是兄弟就干了這杯,這叫廣播。
可是你的上司jj聽了不高興了,只有兄弟么,罰酒三杯。這叫炸彈。
還有你的下級(jí)mm聽了不高興了,我喝一口,你喝一杯,這叫惡意攻擊。
一個(gè)人過來向這桌敬酒,你說不行,你先過了我這關(guān),這叫防火墻。
你的小弟們過來敬你酒,這叫一對(duì)多。
你是boss,所有人過來敬你酒,這叫服務(wù)器。
酒是一樣的,可是喝法是不同的。
你喝了一杯,boss喝了一口,這叫c#。
你喝了一杯,mm喝了一口,這叫vb。
你喝了一杯,你大哥喝了半杯,這叫c++。
你喝了半杯,你小弟喝了一杯,這叫匯編。
你喝了一杯,你的搭檔也喝了一杯,這叫c。
你越喝臉越紅,這叫頻繁分配釋放資源。
你越喝臉越白,這叫資源不釋放。
你已經(jīng)醉了,卻說我還能喝,叫資源額度不足。
你明明能喝,卻說我已經(jīng)醉了,叫資源保留。
你喝一段時(shí)間就上廁所,這叫cache。
酒過三巡,你也讀活動(dòng)活動(dòng)了。
你一桌一桌地走,這叫輪巡。
你突然看到某一桌的漂亮mm,走了過去,這叫優(yōu)先級(jí)。
你去了坐下來就不打算走了,這叫死循環(huán)。你的老大舉杯邀你過去,你只好過去,這叫激活事件。
你向一桌敬酒,他們說不行不行,我們都喝白的,于是你也喝白的,這叫本地化。
你向boss敬酒,可是boss被圍了起來,你只能站在外圈,這叫排隊(duì)。
你終于到了內(nèi)圈,小心翼翼地向前一步,這叫訪問臨界區(qū)。
你拍著boss的肩膀說哥們?cè)蹅兒纫槐@叫越界。
你不知喝了幾圈了,只會(huì)說兩個(gè)字,干了,這叫udp。
可是還有人拿著酒瓶跑過來說,剛才都沒跟你喝,這叫丟包。
喝酒唱到最后的結(jié)果都一樣。
你突然跑向廁所,這叫捕獲異常。
你在廁所吐了,反而覺得狀態(tài)不錯(cuò),這叫清空內(nèi)存。
你在臺(tái)面上吐了,覺得很慚愧,這叫程序異常。
我的心“咯噔”一下,瞬間便被驚愕和錯(cuò)亂填滿。那個(gè)嫵媚的女子,眼角眉梢都是說不出的風(fēng)情,站在我家門口和我的男人熱絡(luò),意欲何為?
秦子陽接過我手里的大包小包,指著那嫵媚的女子對(duì)我說:“瑞瑩,她是我們的新鄰居,叫方妮。”
方妮淺笑著伸出手來,你好。
我木木地握了,只訥訥地說了一句“你好”,便失了言,不知要和她如何寒暄客套下去。
方妮的目光迅速地在我的臉上一掠而過,然后看了秦子陽一眼。那一眼,意味深長,有著諸多的內(nèi)容,似乎隱隱地在為秦子陽的俊朗抱屈。
心里騰地有火焰冒起,我轉(zhuǎn)身蹬蹬蹬地進(jìn)屋,秦子陽忙不迭地和方妮說再見,亦步亦趨地跟在我身后。回家后,我皮笑肉不笑地看著他,老實(shí)交代,這個(gè)新鄰居,到底是新鄰居還是舊相識(shí)?
秦子陽打著哈哈,當(dāng)然是新鄰居了,也算是舊相識(shí)吧,從裝修房子的時(shí)候算起,也認(rèn)識(shí)有三個(gè)月了吧。
看樣子,秦子陽是不打算說實(shí)話了。
他不知道,那個(gè)叫方妮的女子,我其實(shí)是認(rèn)識(shí)的。并且我還知道,方妮,就是秦子陽的初戀女友。兩個(gè)人曾經(jīng)很熱烈地愛了三年。
我是在秦子陽和方妮分手后和他相識(shí)相戀的。剛認(rèn)識(shí)秦子陽那會(huì)兒,他還沉浸在失戀的痛苦當(dāng)中,心里眼里都還是舊時(shí)的戀人,偶爾酒醉,會(huì)口齒不清地叫著方妮。只不過,那時(shí),我們還沒有談情說愛,所以,我沒有指責(zé)他的立場。后來我們?cè)谝黄鸷螅覜]有追問過他的情史,秦子陽也將往事封藏在心里。他以為,我不知道方妮這個(gè)人,更不認(rèn)識(shí)方妮。而偏偏,我卻是認(rèn)識(shí)方妮的,曾經(jīng)和她因?yàn)楣ぷ麝P(guān)系打過幾次照面,只是,彼此沒有交談過。后來,我和秦子陽一起離開A城到了省城發(fā)展,我以為我們的生活從此與那個(gè)叫方妮的女人再無交集。
沒想到,時(shí)隔四年之后,我們竟然在同一個(gè)小區(qū)買了房子,而且比鄰而居。此時(shí),真是打心眼里后悔裝修的時(shí)候怕苦怕累將一應(yīng)事務(wù)一股腦兒地推給了秦子陽,一想到他們已經(jīng)重逢了三個(gè)月,我卻一無所知,心里就亂得不行。
細(xì)細(xì)地回味秦子陽近段時(shí)間的表現(xiàn),倒也沒有什么舊情復(fù)燃的跡象。只是,剛開始裝修新房的那幾天,他從新房回來,總有片刻的走神。那時(shí),我以為,不過是為裝修的事傷神,現(xiàn)在,我才明白,是與方妮重逢后的心神不寧。
炒菜的時(shí)候,一抬眼,就能看到對(duì)方在廚房里的身影。
我們的臥室,湖藍(lán)色的窗簾正對(duì)著方妮家淺紫的窗簾,晚上,若是放肆一些,對(duì)方又有意細(xì)聽,定能聽見那親熱的聲音。
想到這里,我搬進(jìn)新房子的好心情驟然降至冰點(diǎn)。
和秦子陽結(jié)婚四年了,我們才結(jié)束住出租屋的日子。當(dāng)初雖然是義無反顧地嫁給連房子首付都付不起的秦子陽,但出租屋里簡陋的新房總是令人感到遺憾的。少不了在秦子陽耳邊抱怨:“也就是我吧,換了是別的勢利女孩能嫁給你嗎?”念得秦子陽的耳朵起了繭,也念得他一門心思地在升職加薪的康莊大道上奔馳,終于在漂亮的花園小區(qū)里買了新房。
秦子陽說方妮是我們的新鄰居,顯然是不打算讓我知道他和方妮的那一段過去。或許他覺得以前沒有告訴我,現(xiàn)在兩家比鄰而居就更沒有告訴我的必要,免得生出是非。
顯然他和方妮已經(jīng)達(dá)成共識(shí),我在心里冷笑,這樣也好,其實(shí)當(dāng)一個(gè)心知肚明的旁觀者,要比當(dāng)一個(gè)當(dāng)局者更游刃有余。
方妮從此就如一粒沙子,硬生生地嵌進(jìn)了我的眼睛,不時(shí)地在我的眼前出現(xiàn)。有時(shí)是在小區(qū)的花園里,有時(shí)是在電梯里。很少看見她的丈夫,大多時(shí)候都是她一個(gè)人。碰到她大包小包地拎著東西,如果秦子陽在,會(huì)很客氣地要幫她拎著,她往往也不客氣,一副理所當(dāng)然的表情。
我不動(dòng)聲色地看著。在旁人眼里,那也不過是鄰里之間的友好互助,但是誰又能知道,暗地里,有一些什么樣的情愫在流動(dòng)?
也許是女人天生的直覺吧,方妮好似很渴望打破和秦子陽目前這種舊情人新鄰居的關(guān)系。方妮的丈夫,是那種很熱衷于成功的男人,大多數(shù)時(shí)候都不在家。我常??匆姺侥菀粋€(gè)人,穿著很性感的衣服。在他們的臥室里走來走去。她當(dāng)然不是穿給我看的,也許是在自我欣賞,也許更希望有一個(gè)人能夠看見,然后心動(dòng)。她不知道,秦子陽在家的時(shí)候,我總是要拉上臥室的窗簾。
我看到了方妮的寂寞,還看到了她婚姻的乏味。一個(gè)婚姻乏味的女人,遇到初戀情人,特別是這個(gè)初戀情人好像變得比以前更有味道的時(shí)候,她的心,難免會(huì)蠢蠢欲動(dòng)。而秦子陽對(duì)方妮總是那么客氣,他以為的客氣,看在我和方妮的眼里,其實(shí)都是一種曖昧。更或者,他心里本就還在留戀著曾經(jīng)的美好,所以,他本人也是喜歡這種曖昧的。男人都有初戀情結(jié),特別是沒有結(jié)果的初戀,對(duì)方棄他而去的初戀,在男人的心里永遠(yuǎn)都是一個(gè)遺憾。我不知道,秦子陽的心,會(huì)不會(huì)因?yàn)檫@個(gè)遺憾有了彌補(bǔ)的機(jī)會(huì)而蠢蠢欲動(dòng),特別是在我們的婚姻已經(jīng)平淡如水的時(shí)候。
我和秦子陽都喜面食。周五下班早,我就去菜場買了肉餡和韭菜,準(zhǔn)備晚上包餃子?;丶业臅r(shí)候,和方妮在電梯里相遇,她看了看我手上提的菜,說了一句:“其實(shí)他喜歡芹菜餡的?!?/p>
我愣了一下。才反應(yīng)過來她口里的那個(gè)“他”應(yīng)該是指秦子陽。我裝傻,回了一句:“是嗎,你們家那位喜歡芹菜餡的?”心里卻翻騰開來,這話分明就是暗示我她和秦子陽的關(guān)系不一般,難道她真的蠢蠢欲動(dòng)了?是一個(gè)人蠢蠢欲動(dòng)呢,還是兩個(gè)人?
最終,我還是去買了芹菜。秦子陽回家,看到餐桌上熱氣騰騰的餃子,貪婪地嗅著空氣中芹菜的香味,問我:“老婆,是芹菜餡的吧?”
看到秦子陽胃口大開的樣子,我不由得有些愧疚。做了人家四年的老婆,竟然不知道他喜歡芹菜餡的餃子。我是在他一窮二白的時(shí)候“下嫁”于他,無形中便有了居高臨下的意味,家里的事情都以我的喜好為主,秦子陽在事事順著我的時(shí)候,心里也還是有委屈的吧!
我將手覆上了秦子陽的手,聲音哽咽了:“老公,對(duì)不起!”
秦子陽詫異地看著我,問:“怎么了?”
我說:“有時(shí)候我自私任性了些,讓你受委屈了,真是對(duì)不起?!?/p>
“好好的,說這些煽情的話干什么?!鼻刈雨栃α?,眼角也濕潤了。
方妮來我們家“閑”坐的時(shí)候,我聲情并茂地講述我和秦子陽當(dāng)初是如何相戀的,而我們的相戀又是如何遭到我父母的堅(jiān)決反對(duì);當(dāng)時(shí)的我,如何鐵了心要嫁給秦子陽;我母親是如何以絕食相逼,我又是如何先說動(dòng)父親,然后再聯(lián)合父親說服了母親。這一切娓娓道來,秦子陽在旁邊也聽得動(dòng)容,半晌不語。因?yàn)樗⒉恢牢以诤退Y(jié)婚之前竟然還遇到了父母的百般阻攔。而我當(dāng)時(shí)怕他擔(dān)心,并沒有告訴他這些。
講起我和秦子陽在出租屋里那些拮據(jù)卻相親相愛的日子,我更是著力渲染。出租屋里沒有暖氣,冬夜,我和秦子陽灌了大大小小五六個(gè)熱水袋堆在被窩里,然后兩個(gè)人緊緊地?fù)еS袔状?,家里沒有錢了,我都是瞞著秦子陽向自己的朋友借錢,因?yàn)槲也幌胱屗粋€(gè)大男人去借錢,那會(huì)讓他很沒面子。
我承認(rèn),我講這些是別有用心的。我知道,當(dāng)初方妮和秦子陽分手,就是因?yàn)榍刈雨栆桓F二白,方妮權(quán)衡了很久最后還是離他而去。我是想讓秦子陽懂得,當(dāng)初是誰在他一窮二白的時(shí)候離開了他,又是誰義無反顧地來到了他的身邊,還有,在出租屋的那些艱苦卻溫馨的日子,怎么能夠輕易忘卻?畢竟,我們是曾經(jīng)共患難的夫妻。
在我繪聲繪色的描述中,方妮漸漸沉默,而秦子陽,看我的目光越來越溫柔。
我和秦子陽,在不知不覺中竟然像是回到了新婚的時(shí)候,感情越來越熱絡(luò)。開始的時(shí)候,我是刻意為之,怕自家婚姻的乏味讓秦子陽的心飛了,所以處處關(guān)心著他,體貼著他,還破天荒地為他擦了一次皮鞋。他看我的目光中竟然又有了激情的火花在跳躍,而秦子陽漸漸升溫的激情也感染了我,一度平淡如水的婚姻又充滿了生機(jī)。
那夜,秦子陽像是下了很大決心,說:“老婆,有件事情我想我應(yīng)該告訴你?!?/p>
我知道,他要說的,無非就是他和方妮曾經(jīng)是一對(duì)戀人的事情。
一直以為自己有揮霍不完的青春,直到那天,同學(xué)看著剛?cè)雽W(xué)的初一新生,感嘆地說“我們都老了”時(shí),我才幡然醒悟,我已經(jīng)升上初二了,在這個(gè)校園里已經(jīng)有人可以管我喊學(xué)姐了。
我,已經(jīng)十四歲了。而我這個(gè)特別的十四歲已經(jīng)到九局下半了。
二
我和林子既是從小玩到大的同班哥們兒,又是遠(yuǎn)親不如近鄰的對(duì)門,用句那時(shí)班上常說的話就是,咱倆誰跟誰,我的東西就是你的東西,我媽就是你媽,我家就是你家。
有一天晚上比較歹勢。那天我爸媽又滿世界出差去了,留我一人在家。本來晚上要去林子家的,結(jié)果我倆因?yàn)槎〈簏c(diǎn)兒的小事大吵一架,我這人又特愛面子,所以任憑云姨(林子她媽)怎么勸說,我還是把頭搖得那個(gè)堅(jiān)決。
結(jié)果當(dāng)天夜里我就后悔了。
半夜,我被一片玻璃的破碎聲驚醒,接著就聽到外面的風(fēng)鬼哭狼嚎地狂刮。我立馬一個(gè)鯉魚打挺從床上翻起來,本能地去摸臺(tái)燈開關(guān)――沒電!窗外聲音混亂,屋里又伸手不見五指。耳邊的風(fēng)怎么聽怎么像是鬧鬼,從窗簾縫射入的時(shí)閃時(shí)滅的光線也成了鬼火。我膽子不是那么大!以前好像挺能耐挺勇敢還不都是硬著頭皮裝出來的!
正當(dāng)我打算高呼“救命”時(shí),我家門鈴響了。
我趕緊下床,連拖鞋也顧不得找,摸著墻跌跌撞撞地跑去開了門。然后就看見林子拎著個(gè)手電筒站在門口。對(duì)面,云姨敞著門,一臉微笑地等我進(jìn)去。
三
稀里糊涂就上了初二。我的后桌是位帥哥。其實(shí)也說不上多英俊瀟灑,但因?yàn)槿撕?,再加上笑容可掬,讓人覺得模樣還挺耐看的,也是個(gè)人緣好得一塌糊涂的家伙,大伙都叫他“龍哥”。有不少女生追過他,無奈龍哥屬于那種腦子里少根弦的男生,說白了就是遲鈍,對(duì)這種事無所謂得很,不知傷了多少純情少女的心。
國慶節(jié)過后,秋季運(yùn)動(dòng)會(huì)如期而至。我嘛,報(bào)了一千五。
“各就各位,預(yù)備――跑!”
我立馬拿出我跑一百的勁兒一陣猛跑,把其他人甩了個(gè)十萬八千里,當(dāng)時(shí)感覺爽極了??梢蝗Σ坏剑业乃俣染兔黠@慢下來了,我開始覺得體力不支。我有點(diǎn)兒慌,這才到哪兒,還有三圈呢。
第二圈跑完的時(shí)候,有一個(gè)小個(gè)子把我給超過去了。林子他們那邊立馬就不干了,一個(gè)個(gè)都上了凳子,龍哥站在最前頭,舉著個(gè)大旗拼命搖。
我這人偏偏就好這個(gè),一看這陣勢,立馬來勁了,死命加速。可很快又堅(jiān)持不住了。這時(shí),林子、龍哥、橘子等就從跑道邊躥出來了。林子邊跑邊喊:“禾火,你今天要是跑了第一,我讓我媽給你做一大盤拔絲山藥!”
云姨做的拔絲山藥是我這輩子最最最愛吃的菜。聽了這話,我立馬抱著必死的決心展開沖刺,不但把緊追在我后頭不放的給甩了,居然還奇跡般地追上了剛才超過我的小個(gè)子。旁邊又齊聲高呼:“拔絲山藥!”我就閉著眼睛沖過了終點(diǎn)。我撲倒在前來接我的橘子懷里,一陣頭重腳輕,一屁股坐在凳子上再也起不來了,接著就狂咳不止。天,這一千五跑得――差點(diǎn)沒把我小命搭進(jìn)去。林子扛了張凳子坐在我旁邊,一邊給我捶背一邊問:“你死不了吧?”
我剛想說“林子你輕點(diǎn)兒”,無奈一口水正卡在嗓子眼里,害得我又更加驚天動(dòng)地地咳起來。林子顧不上開玩笑,加大力度一陣狂捶爛砸。我一邊猛咳一邊痛苦地想,林子我是不是欠你錢了???
龍哥過來了,他對(duì)林子說:“哎哎,林子,別捶了,你瞅禾火這臉色,都快斷氣兒了。”我琢磨著龍哥這也可以啊,開始懂得憐香惜玉了,結(jié)果他后邊半句就立刻讓我打消了剛才的念頭。
“都快沒氣兒了,還不快去拿紙和筆來立遺囑呀?”
林子恍然大悟,笑著附和:“哦,對(duì)對(duì)。禾火同志,您有什么臨終遺言就盡管說吧?!?/p>
我從牙縫里擠出兩個(gè)字:“去死!”
四
那天晚上正猛K作業(yè),停電了;不但停電,大冬天的把暖氣也給停了。
林子敲開我家的門:“上微微那兒去吧?!?/p>
微微是一個(gè)開書吧的外地打工妹。微微書吧幾個(gè)月前開的張,我們常去。
我們捎上作業(yè)就奔書吧。
途經(jīng)一個(gè)正在施工的路口,亂糟糟的,只允許自行車通過。
“咱倆繞行吧?!绷肿诱f。
“不行,我再在外頭多呆一秒鐘就得凍死了?!?/p>
“你自己瞅瞅這路,繞道未必比從這兒走慢?!?/p>
“那行,咱倆比比,我從這兒走,你繞道走,看誰先到!”
“輸?shù)恼?qǐng)喝熱咖啡!”
“一言為定!”
然后我倆就在路口分開了。我先到書吧,等得快瘋了林子還沒到。
林子出車禍了。就在我們分開沒多久,為了救一個(gè)小孩,林子被那個(gè)酒后駕車的司機(jī)撞了……
我瘋了似地趕到醫(yī)院。林子睜開眼睛看著我:“這兒是哪兒?你是誰?”
我說林子你再這樣我就與你絕交。但林子依然是這樣子。我慌了。我從椅子上起來跌跌撞撞地去喊云姨和醫(yī)生。我拽著醫(yī)生的胳膊說,您快救她,我求您了,治好了讓我變啞巴都成,就是別讓她不認(rèn)識(shí)我……
林子失憶了。
你說這年頭玩什么不好非得玩失憶。我也想失憶。你什么都忘了可我都記得清清楚楚啊……
十三年,我和你的十三年就這么從你腦海里刪除了……
許亦林,你這個(gè)混蛋?。?!
晚上,云姨來我家找我,第一句話就是:“阿姨求你個(gè)事。
醫(yī)生說,林子自己本身很想恢復(fù)記憶,一旦見到有些熟悉的人,她就會(huì)努力地進(jìn)行回想,但這樣對(duì)她的大腦損害很大……阿姨會(huì)給林子轉(zhuǎn)學(xué)的……阿姨是看著你倆長大的,阿姨知道你倆比親姐妹還親……但是……”
云姨說著說著就泣不成聲了。我摟住云姨的肩膀說,云姨您甭說了,我都明白。
送走云姨后,我把自己鎖在屋里,咬著被角哭了一宿。
我從沒流過那么多眼淚。我還以為我得哭死了。
五
開學(xué)后不久,我就搬到外婆家住了。
我又像往常一樣瘋玩傻笑了,即便有時(shí)候那是裝出來的。我還是很想林子。特別是林子生日那天。
那天放學(xué),我偷偷去了林子的學(xué)校。兩學(xué)校隔了三十多里,那天風(fēng)又大,等我趕到學(xué)校,兩只爪子早已凍出了好幾條裂痕。
我下了車,站在風(fēng)中,靜靜地等林子放學(xué)。突然,龍哥從天而降似地出現(xiàn)在我面前,一把捧起我的爪子,把自己的手套脫下來給我套上,半天才蹦出兩個(gè)字“傻冒!”
“你一直跟著我?”我問。
龍哥有些不好意思地點(diǎn)點(diǎn)頭:“我也想看看林子?!?/p>
林子出來了。我興奮得差點(diǎn)沒喊出來。林子在一群人中說說笑笑地往外走,一點(diǎn)兒也沒變,走哪兒都這么顯眼,跟誰都搭話。瘋丫頭一個(gè)。
看著林子遠(yuǎn)去的背影,我的眼淚就下來了。
好半天,龍哥才輕輕地說道:“其實(shí)你應(yīng)該高興才對(duì)。林子在一個(gè)新的環(huán)境里還是像以前一樣開朗、快樂,她過得很好。這樣就足夠了。”聽了龍哥的話我就不哭了。我站起來,拍拍屁股上的土,望著林子的學(xué)校,輕輕在心里說了句:林子,生日快樂。然后叫上龍哥:“走了!”
周末出去,路過一家新開張的音像超市,正請(qǐng)了一幫跳街舞的捧場。說實(shí)話,那是我這輩子看過的最棒的街舞。
等他們跳完了,我就去問那個(gè)領(lǐng)舞的,這是什么歌。
“《九局下半》?!?/p>
我把這首歌翻錄在一盤磁帶上,寄給了林子。當(dāng)然,沒有任何署名。
馬上就要進(jìn)行初二的結(jié)業(yè)考試了。這是我十四歲的九局下半的最后一投。
并不是兄弟間在劫難逃,而是父親李淵在他們?nèi)值荛g反復(fù)搖擺,首鼠兩端,把他們?nèi)急七M(jìn)了死胡同。
幾年之后,當(dāng)李世民把他親手殺害的兩兄弟重新封王以禮下葬之時(shí),相信他再一次的慟哭失聲也是他心底最真實(shí)的情感流露。只是在他兒子問將來誰繼承皇位的這個(gè)心結(jié),即便如他這樣的聰明才智也會(huì)與許多皇權(quán)繼承所遇到的問題一樣:無解。
知子莫如父,應(yīng)當(dāng)說他很快就發(fā)現(xiàn)了太子李承乾身上的種種不是,這樣的人是全無資格繼承他所創(chuàng)造發(fā)展的事業(yè)的。聲色犬馬,奢靡無度,這本是紈绔兒的通病,倒并不一定觸動(dòng)了他最敏感的神經(jīng)。但李承乾身上種種怪異無端的個(gè)性與行為,讓人不能不再一次想起玄武門,已經(jīng)無可避免地成了太子的夢魘,
太子謀反,差不多就等于是他自己謀反自己,但這個(gè)不幸卻理所當(dāng)然地發(fā)生了。面對(duì)此種不堪,李世民問股肱近臣、該怎樣處置這個(gè)孽子呢?而此時(shí)內(nèi)心里,他決不允許孽子重蹈他父親的覆轍。面對(duì)大臣們的面面相覷,他寬恕了太子。
李承乾的謀反,可以肯定并不是針對(duì)他,而是風(fēng)頭漸勁的另一個(gè)兒子李泰。李泰聰明伶俐,有著李世民身上同樣的許多優(yōu)點(diǎn),是他心目中理想的繼承人。但李秦一句似仁而近乎大偽大謬的話,卻又讓李世民再次陷入沉思,因?yàn)槿绱怂芮宄o可避免地殃及他另一個(gè)兒子晉王李治,也就是未來的唐高宗。李泰對(duì)他說:假若父親把皇位傳給他,他將把自己的兒子殺掉以絕后,好在將來把皇位再交給晉王。此離人情之常太遠(yuǎn)了,傻二當(dāng)能聽出李泰的鬼話。而聰明一世的李世民此時(shí)卻作了如此的感嘆:人誰不愛其子,看到好兒子李泰這么說,真是可憐他了!大臣褚遂良只一句,就讓他啞口無言:天下還有兒子都不愛惜,還能愛惜兄弟的人么?!
2、不要讓過去的自己,綁架現(xiàn)在的自己。不要讓現(xiàn)在的自己,討厭未來的自己。不要讓未來的你,后悔現(xiàn)在的自己。
3、生活豈能百般如意,正因有了遺漏和缺憾,我們才會(huì)有所追尋。每一次煩惱的出現(xiàn),都是一個(gè)給我們尋找自己缺點(diǎn)的機(jī)會(huì)。人生如同坐火車,風(fēng)景再美也會(huì)后退,流逝的時(shí)間和邂逅的人終會(huì)漸行漸遠(yuǎn),前行的始終是自己。
4、以前的自己,仍在成長歷練,沒有真正成熟。
5、今天的事情做錯(cuò)了,但是錯(cuò)了也不后悔,都是為了你好,朋友也是分三六九等的,酒肉朋友如果稱兄道弟的就可以永遠(yuǎn)不要聯(lián)系,今天的事就是個(gè)教訓(xùn)。
6、別等到錯(cuò)過后才后悔,別等到失去后才想挽回。
7、路上的風(fēng)景,人生的感動(dòng),失去才知道自己做什么,得到,才知道自己失去了多少。
8、付出,就不要后悔,失去,也不要遺憾。
9、沒有不合適的兩個(gè)人,只有一顆不想在一起的心。
關(guān)鍵詞:數(shù)據(jù)庫;查詢;SQL
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2010)03-513-03
The Study of Database Query Method
GAO Hong-yan
(Dept. Phys. & Inform. Tech. Baoji Univ. Arts & Sci., Baoji 721007, China)
Abstract: The Access is a very useful database management system software. The several query method are introduced in this text. The kinds of Access query have a strong function in solving practical problems.
Key words: database; query; SQL
查詢是對(duì)數(shù)據(jù)源進(jìn)行一系列檢索操作,它可以從表中按照一定的規(guī)則取出特定的信息,在取出數(shù)據(jù)的同時(shí)可以對(duì)數(shù)據(jù)進(jìn)行一定的統(tǒng)計(jì)、分析和計(jì)算,然后按照用戶的要求對(duì)數(shù)據(jù)進(jìn)行排序并顯示結(jié)果。查詢的結(jié)果可以作為窗體、報(bào)表和新數(shù)據(jù)表的數(shù)據(jù)來源,當(dāng)然也可以在此基礎(chǔ)上再設(shè)置條件進(jìn)行查詢。查詢?yōu)橛脩羰褂脭?shù)據(jù)庫提供了極大的方便。通過查詢不僅可以檢索數(shù)據(jù)庫中的信息,還可以利用查詢編輯數(shù)據(jù)庫中的數(shù)據(jù),而這種編輯一次就可以更改整個(gè)數(shù)據(jù)庫中的相關(guān)數(shù)據(jù),因此可以通過查詢來實(shí)時(shí)更新數(shù)據(jù)源。
1 選擇查詢
選擇查詢是最常見的一種查詢類型,它使用指定的條件從一個(gè)或多個(gè)表中檢索數(shù)據(jù),然后按照所需順序顯示數(shù)據(jù),并且在可以更新記錄(采用某些限制條件)的數(shù)據(jù)表中顯示結(jié)果。也可以使用選擇查詢來對(duì)記錄進(jìn)行分組,計(jì)算總和、計(jì)數(shù)、平均值以及其他類型的總和。創(chuàng)建查詢的方法有兩種,利用向?qū)Ш屠貌樵円晥D。
1.1 利用向?qū)?chuàng)建選擇查詢
1) 打開已有的數(shù)據(jù)庫。
2) 在數(shù)據(jù)庫窗口中,單擊“對(duì)象”列表中的“查詢”項(xiàng),然后單擊“數(shù)據(jù)庫”窗口工具欄上的“新建”按鈕。在“新建查詢”對(duì)話框的列表中選擇“簡單查詢向?qū)А?然后單擊“確定”按鈕,參見圖1。
3) 進(jìn)入“簡單查詢向?qū)А焙?在“表/查詢”下拉列表中選擇要查詢的表。從“可用字段”列表中選定要查詢的字段,然后通過“添加”按鈕,將它們依次移入“選定字段”列表中,參見圖2。然后單擊“完成”,這樣一個(gè)新的選擇查詢就建立成功了。
1.2 使用設(shè)計(jì)視圖創(chuàng)建選擇查詢
1) 在數(shù)據(jù)庫窗的 “對(duì)象”欄中選擇“查詢”項(xiàng),然后單擊“數(shù)據(jù)庫”窗口工具欄上的“新建”按鈕。在“新建查詢”對(duì)話框的列表中選擇“設(shè)計(jì)視圖”,然后單擊“確定”按鈕。
2) 進(jìn)入“顯示表”對(duì)話框后,單擊要添加的表,然后單擊“添加”按鈕,或者直接雙擊要添加的表名稱,也可以添加查詢,添加所需的表或者查詢后,單擊“關(guān)閉”,此時(shí)在設(shè)計(jì)視圖窗口中顯示出添加的表。參見圖3。
3) 可以從添加的表或查詢中,直接將字段拖到字段行中的單元格或者單擊字段行中的單元格,這是出現(xiàn)一個(gè)小三角按鈕,單擊小三角選擇所需的字段。參見圖4。保存此查詢,輸入名稱,然后單擊工具欄上的“運(yùn)行”按鈕即可查看查詢的結(jié)果。一個(gè)新的查詢就建立成功了。
2 交叉查詢
使用交叉查詢可以計(jì)算并重新組織數(shù)據(jù)的結(jié)構(gòu),這樣可以更加方便的分析數(shù)據(jù)。交叉查詢計(jì)算數(shù)據(jù)的總計(jì)、平均值、計(jì)數(shù)或其他數(shù)據(jù)的總和,這種數(shù)據(jù)可以分為兩組信息:一類在數(shù)據(jù)表左側(cè)排列,另一類在數(shù)據(jù)表的頂端。數(shù)據(jù)表行和列的交叉處顯示該字段的計(jì)算結(jié)果。
利用交叉查詢提供的功能可以把用戶的信息集中起來,并使用這些信息生成圖表,這樣可以更清楚地了解信息。建立交叉查詢的方法同樣有兩種:一是使用交叉表查詢向?qū)?二是使用設(shè)計(jì)視圖。
2.1 使用“交叉表查詢向?qū)А苯⒉樵?/p>
1) 在“新建查詢”對(duì)話框中,單擊“交叉表查詢向?qū)А?然后單擊“確定”。
2) 選擇作為“交叉表查詢”的數(shù)據(jù)來源。從“可用字段”列表中選擇作為行標(biāo)題的字段,最多可選三個(gè)字段。按“下一步”按鈕。
3) 從“可用字段”列表中選擇作為列標(biāo)題的字段。本例中,選擇“課程號(hào)”。一旦選定了它,即出現(xiàn)在下方的交叉表預(yù)覽窗口中,也被自動(dòng)分配一個(gè)編號(hào),由此所選定的字段將顯示在交叉表的頂端。按“下一步”按鈕。
4) 從“字段”列表中選擇交叉表中交叉單元格所要顯示的字段,然后還可在“字段”列表右側(cè)“函數(shù)”列表中選擇計(jì)算方式。
5) 在最后一個(gè)對(duì)話框中,輸入新查詢的名稱后,可以選擇是“查看查詢”,還是在“設(shè)計(jì)視圖”中“修改設(shè)計(jì)”。如果生成的查詢不完全符合要求,可以返回向?qū)Щ蛟凇霸O(shè)計(jì)視圖”中更改查詢。
2.2 使用“設(shè)計(jì)視圖”建立查詢
1) 在“新建查詢”對(duì)話框中,單擊“設(shè)計(jì)視圖”,然后單擊“確定”。
2) 在“顯示表”對(duì)話框中,單擊列出了所需的表或查詢數(shù)據(jù)的選項(xiàng)卡。雙擊要添加到查詢的每個(gè)對(duì)象的名字,然后單擊“關(guān)閉”。
3) 在設(shè)計(jì)網(wǎng)格中將字段添加到“ 字段”行。執(zhí)行“查詢/ 交叉表查詢”命令,或按下工具欄上“查詢類型”按鈕,選擇“交叉表查詢”命令,查詢“設(shè)計(jì)視圖”窗口的下半部將多出“總計(jì)”及“交叉表”兩行。
4) 如果要將字段的值按行顯示,請(qǐng)單擊“交叉表”行,然后單擊“行標(biāo)題”。可指定一個(gè)或多個(gè)行標(biāo)題選項(xiàng),但至少要有一項(xiàng)作為分組依據(jù),即在該字段的“總計(jì)”行保留默認(rèn)的GroupBy。如果要將字段的值顯示為列標(biāo)題,請(qǐng)單擊“交叉表”行,然后單擊“列標(biāo)題”。只能選擇一個(gè)字段作為“列標(biāo)題”,且必須為這個(gè)字段的“總計(jì)”行保留默認(rèn)的 Group By。
5) 對(duì)于要將其值用于交叉表的字段,請(qǐng)單擊“交叉表”行,然后單擊“值”。只有一個(gè)字段可以設(shè)置為“值”。在這個(gè)字段的“總計(jì)”行,單擊希望用于交叉表的聚合函數(shù)類型(例如Sum、Avg 或Count),按下工具欄上“視圖”按鈕查看分析的結(jié)果。
3 參數(shù)查詢
利用參數(shù)的定義,用戶可以在同一個(gè)查詢中,輸入不同的參數(shù)而查看不同的結(jié)果。最常見的情況是顯示一個(gè)對(duì)話框,要求用戶輸入?yún)?shù),系統(tǒng)根據(jù)所輸入的參數(shù),找出符合條件的記錄。創(chuàng)建步驟如下
1) 打開參數(shù)查詢的設(shè)計(jì)視圖。
2) 在“條件”行中要?jiǎng)?chuàng)建參數(shù)查詢字段單元格中輸入表達(dá)式,如要查找“成績”的記錄,則在“成績”字段的條件單元格中輸入:< [輸入成績數(shù)]。
3) 單擊主窗口工具欄上的“運(yùn)行”按鈕,則會(huì)打開如圖5的對(duì)話框,輸入“60”,按“確定”,則會(huì)顯示所有學(xué)生不及格的課程信息,參見圖6。
4 操作查詢
操作查詢是這樣一種查詢,使用這種查詢只需要進(jìn)行一次操作就可以對(duì)許多記錄更改和移動(dòng)。它包括4種查詢:1) 刪除查詢:可以從一個(gè)或多個(gè)表中刪除一組記錄。使用刪除查詢,通常會(huì)刪除整個(gè)記錄,而不只是記錄中所選字段;2) 更新查詢:可以對(duì)一個(gè)或多個(gè)表中的一組記錄作全局更新。使用更新查詢,可以更新表中的已有數(shù)據(jù)記錄;3) 追加查詢:將一個(gè)或多個(gè)表中的一組記錄添加到一個(gè)或多個(gè)表的末尾;4) 生成表查詢:可以根據(jù)一個(gè)或多個(gè)表全部或部分?jǐn)?shù)據(jù)新建表。生成查詢有助于創(chuàng)建表以導(dǎo)出到其他Microsoft Access數(shù)據(jù)庫或包含所有舊記錄的歷史表。
5 SQL查詢
SQL查詢即用戶使用SQL語句創(chuàng)建的查詢,所有的查詢都可以看作是SQL查詢,其背后都隱含著SQL 窗口。實(shí)際上,Access 2003的各種查詢都可以通過SQL語句來實(shí)現(xiàn)。
5.1 選擇查詢用SQL實(shí)現(xiàn)
SELECT學(xué)號(hào),課程名
FROM 選課
5.2 交叉查詢
TRANSFORM Count(選課.學(xué)號(hào)) AS 學(xué)號(hào)之計(jì)數(shù)
SELECT 選課.課程名, Count(選課.學(xué)號(hào)) AS [總計(jì) 學(xué)號(hào)]
FROM 選課
GROUP BY 選課.課程名
PIVOT 選課.成績;
5.3 參數(shù)查詢
SELECT 學(xué)生.姓名, 課程.課程名稱, 選課.成績
FROM 學(xué)生, 課程, 選課
WHERE 學(xué)生.學(xué)號(hào)=選課.學(xué)號(hào) AND
選課.課程號(hào)=課程.課程號(hào) AND
成績
5.4 操作查詢
1) 刪除查詢
DELETE
FROM 選課
WHERE 課程名=’網(wǎng)絡(luò)’ ;
2) 更新查詢
UPDATE 選課
SET 課程名=’網(wǎng)絡(luò)工程’
WHERE 課程名=’網(wǎng)絡(luò)’ ;
3) 追加查詢
CREATE TABLE 課程平均成績
(課程號(hào) CHAR(15)平均分SMALLINT);
INSERT
INTO 課程平均成績(課程號(hào), 平均分)
SELECT 選課.課程號(hào), AVG(成績)
FROM 課程, 選課
WHERE 選課.課程號(hào)=課程.課程號(hào)
GROUP BY 選課.課程號(hào);
4) 生成表查詢
SELECT 學(xué)生.姓名, 課程.課程名稱, 選課.成績
INTO 123
FROM 課程
INNER JOIN (選課 INNER JOIN 學(xué)生 ON 選課.學(xué)號(hào) = 學(xué)生.學(xué)號(hào)) ON 課程.課程號(hào) = 選課.課程號(hào)
ORDER BY 學(xué)生.姓名。
參考文獻(xiàn):
[1] 薩師煊,王珊.數(shù)據(jù)庫系統(tǒng)概論[M].4版.北京:高等教育出版社,2004.
[2] 梁燦,趙艷鐸.Access數(shù)據(jù)庫應(yīng)用基礎(chǔ)教程[M].北京:清華大學(xué)出版社,2005.
[3] 章立民.Access 2003――用150個(gè)范例學(xué)查詢[M].北京:電子工業(yè)出版社,2006.
關(guān)鍵詞:軟件測試 仿真 軟件測試平臺(tái)
A Research on Real-Time Embedded Software Testing Tools
ABSTRACT This thesis has a test for the Real-Time Embedded Software under the environment without the real hardware with simulation. Construct an environment suitable for the simulation of software running, and put forward some testing models suitable for varied environment.
引言
在國內(nèi),目前大型的軟件工程中大都使用國外的軟件測試平臺(tái),我們?cè)跍y試工程中使用法國的LOGISCOPE測試平臺(tái)對(duì)C語言開發(fā)的實(shí)時(shí)嵌入式軟件進(jìn)行測試。
由于實(shí)時(shí)嵌入式軟件主要是對(duì)外部接口設(shè)備進(jìn)行控制,而被送檢的軟件需要大量不同的硬件環(huán)境,在進(jìn)行測試時(shí),由于無法建立大量不同的接口設(shè)備的硬件仿真環(huán)境,每當(dāng)執(zhí)行輸入輸出指令時(shí),程序便無法繼續(xù)運(yùn)行,因此,測試軟件無法完整地覆蓋整個(gè)程序的各個(gè)分支和語句。同時(shí),被測試軟件常常需要多個(gè)模塊同時(shí)對(duì)某個(gè)外設(shè)進(jìn)行共同測試,需要通過網(wǎng)絡(luò)環(huán)境進(jìn)行集中測試。
為了完成對(duì)各種實(shí)時(shí)嵌入式軟件的測試工作,我們研制開發(fā)了基于網(wǎng)絡(luò)的接口設(shè)備的軟件仿真環(huán)境,使得用戶程序運(yùn)行時(shí)不再需要真正的接口硬件設(shè)備,而是與仿真軟件進(jìn)行通訊,交換數(shù)據(jù),從而使得被測程序在脫離硬件的環(huán)境中順利運(yùn)行。本課題主要解決C語言和匯編語言混合編程中,把所有原來控制外設(shè)的輸入輸出指令都修改成與仿真軟件進(jìn)行通信的函數(shù),同時(shí),把原來由硬件觸發(fā)的中斷處理功能轉(zhuǎn)由軟件觸發(fā),以及通過網(wǎng)絡(luò)環(huán)境完成多模塊的集中測試。
本課題的意義在于建成一種通用的方法,使得不同軟件開發(fā)的程序都能夠使用這些功能模塊與接口仿真軟件進(jìn)行通信,從而順利地進(jìn)行軟件測試。
被測軟件的運(yùn)行環(huán)境絕大多數(shù)是基于DOS的,在仿真環(huán)境下進(jìn)行測試時(shí),由于原來的硬件環(huán)境不再存在,因此要求對(duì)被測軟件進(jìn)行相應(yīng)的修改,使其在一個(gè)新的系統(tǒng)模型當(dāng)中運(yùn)行:原來與硬件進(jìn)行I/O的指令,變成對(duì)仿真軟件通訊動(dòng)態(tài)鏈接庫中函數(shù)的調(diào)用;由硬件觸發(fā)的中斷信號(hào)變成來自仿真軟件的消息;更重要的是,原來由CPU負(fù)責(zé)調(diào)度的中斷服務(wù)函數(shù)必須由新的模型來負(fù)責(zé)(因?yàn)椴辉儆杏布袛嘈盘?hào)),而由于DOS是一個(gè)單任務(wù)的操作系統(tǒng),系統(tǒng)模型需要解決以下的問題:系統(tǒng)如何在程序運(yùn)行的時(shí)刻檢測到通過網(wǎng)絡(luò)發(fā)過來的“中斷信號(hào)”,如何中斷當(dāng)前的程序,去執(zhí)行相應(yīng)的中斷服務(wù)函數(shù),如何具有中斷嵌套的功能。
基于以上要求,系統(tǒng)模型采用以下兩種:
基于DOS的多任務(wù)調(diào)度系統(tǒng)模型 基于Windows多線程環(huán)境的系統(tǒng)模型
2.基于DOS環(huán)境的多任務(wù)調(diào)度模型
2.1實(shí)現(xiàn)原理
想要在DOS環(huán)境下實(shí)現(xiàn)多任務(wù)調(diào)度,必須使每個(gè)任務(wù)具有自己的堆棧。首先,棧用來實(shí)現(xiàn)任務(wù)切換,其次,它用來存貯任務(wù)的局部變量。
任務(wù)的切換是通過調(diào)用一個(gè)子程序來實(shí)現(xiàn)的,該子程序?qū)⒍褩V羔樣稍瓉碇赶蚶先蝿?wù)的堆棧置為指向新任務(wù)的堆棧。程序返回時(shí),新的任務(wù)指令指針(IP)就從棧中彈出。新任務(wù)就開始自動(dòng)開始執(zhí)行。
這個(gè)負(fù)責(zé)調(diào)度的子程序是通過時(shí)鐘中斷來定期觸發(fā)的。當(dāng)產(chǎn)生時(shí)鐘中斷時(shí),需要做兩件事情。首先,將標(biāo)志(Flags)寄存器的內(nèi)容壓入棧中,其次,緊跟在指令指針(IP)之后,將CS(代碼段)也壓入棧中。最后,將中斷服務(wù)子程序的段地址裝入CS寄存器中,將偏址裝入IP寄存器中.這樣可以使ISR開始運(yùn)行.中斷返回時(shí),CS,IP和Flags寄存器的內(nèi)容自動(dòng)彈出。為了實(shí)現(xiàn)任務(wù)的調(diào)度,新的時(shí)鐘中斷服務(wù)函數(shù)要完成兩項(xiàng)工作。首先,它將除了棧指針(SP)和棧段(SS)寄存器之外的所有寄存器的值都存到棧中。(SP和SS的值存在另外的位置)。其次,它改變SS和SP寄存器的值,使它們指向另一個(gè)任務(wù)的堆棧。因此,當(dāng)ISR返回時(shí),新的任務(wù)的堆棧被彈出到各寄存器中,這使得機(jī)器的狀態(tài)是針對(duì)新的任務(wù)的。由于IP中也是彈出的寄存器的值,因此新任務(wù)就開始執(zhí)行。
在任務(wù)運(yùn)行前,它必須按一定方式使堆棧初始化,這樣使得當(dāng)?shù)谝粋€(gè)時(shí)間片到來時(shí),從棧中彈出的值能夠使該任務(wù)從頭開始運(yùn)行。因此,任務(wù)的堆棧必須初始化并存放正確的寄存器值,同時(shí)指令指針也必須指向程序中的第一條指令。
2.2調(diào)度內(nèi)核實(shí)現(xiàn)所用到的數(shù)據(jù)結(jié)構(gòu)
interrupt 類型 當(dāng)說明一個(gè)函數(shù)為interrupt類型時(shí),它告訴編譯器自動(dòng)保存所有寄存器(sp和ss除外)的值,并且IRET指令終止該函數(shù)。每當(dāng)進(jìn)入到interrupt函數(shù)時(shí),執(zhí)行下列指令:
push ax, push bx, push cx,
push dx, push es, push ds
push si, push di, push bp
發(fā)生中斷時(shí),CPU自動(dòng)將Flags,cs和IP寄存器壓棧。因此,在interrupt函數(shù)入口處,堆棧如圖2.2.1.2所示。我們將利用interrupt函數(shù)的棧的安排方式對(duì)要執(zhí)行的任務(wù)的堆棧進(jìn)行初始化。
Bp<-top of stack
DI
SI
DS
ES
DX
CX
BX
AX
IP
CS
PLAGS
任務(wù)中使用的寄存器的數(shù)據(jù)結(jié)構(gòu) typedef struct int_regs{
unsigned bp;
unsigned di;
unsigned si;
unsigned ds;
unsigned es;
unsigned dx;
unsigned cx;
unsigned bx;
unsigned ax;
unsigned ip;
unsigned cs;
unsigned flags;
};
此結(jié)構(gòu)嚴(yán)格按照interrupt函數(shù)入口處堆棧的結(jié)構(gòu)定義,初始化時(shí),將結(jié)構(gòu)中的代碼段(CS),指令指針(IP)設(shè)置成構(gòu)成此任務(wù)的函數(shù)的段地址和偏移地址。
用于任務(wù)管理的數(shù)據(jù)結(jié)構(gòu) struct task_struct{
unsigned sp;
unsigned ss;
unsigned char *stck;
unsigned LastTask;
unsigned IntNum;
unsigned Status;
}
當(dāng)執(zhí)行任務(wù)切換時(shí),sp和ss保存當(dāng)前棧指針和堆棧段地址,而任務(wù)調(diào)度程序?qū)?dāng)前棧指針(_SP)和棧地址(_SS)設(shè)置成下一個(gè)將要執(zhí)行的任務(wù)的棧指針和棧地址,當(dāng)調(diào)度程序結(jié)束運(yùn)行時(shí),由于從棧中彈出的各個(gè)寄存器,包括代碼段和指令指針都是指向新任務(wù)的,因此,新任務(wù)將自動(dòng)運(yùn)行,從而達(dá)到任務(wù)切換的目的。
2.3應(yīng)用多任務(wù)調(diào)度功能實(shí)現(xiàn)對(duì)中斷的仿真處理
由于被測試的用戶源程序是工作在仿真環(huán)境下,無法接收硬件產(chǎn)生的中斷信號(hào)從而自動(dòng)執(zhí)行相應(yīng)的中斷服務(wù)程序。因此,改編后的程序應(yīng)該能夠定期檢查是否有從仿真軟件發(fā)過來的中斷信號(hào),若有,則中斷當(dāng)前程序的執(zhí)行,轉(zhuǎn)入相應(yīng)的中斷服務(wù)函數(shù)執(zhí)行。
因?yàn)橛脩舻某绦虍?dāng)中顯式地設(shè)置中斷向量,在改寫用戶的程序時(shí),將每個(gè)中斷服務(wù)函數(shù)入口都置于一個(gè)向量數(shù)組當(dāng)中,此數(shù)組即為全局中斷向量表,將任務(wù)號(hào)與相應(yīng)的中斷號(hào)一一對(duì)應(yīng)。
當(dāng)時(shí)鐘中斷觸發(fā)任務(wù)調(diào)度程序時(shí),調(diào)度程序首先檢測由仿真軟件發(fā)來的中斷信號(hào),如果有,則調(diào)度程序在當(dāng)前運(yùn)行的任務(wù)的數(shù)據(jù)結(jié)構(gòu)中保存堆棧段段地址寄存器(_SS)、棧指針寄存器(_SP)、當(dāng)前任務(wù)號(hào),并將堆棧段段地址寄存器和棧指針寄存器設(shè)置成新的中斷服務(wù)程序所在的任務(wù)的相應(yīng)的值,使得當(dāng)調(diào)度程序返回時(shí),能夠從新的任務(wù)開始運(yùn)行。然后生成一個(gè)新的任務(wù),在此任務(wù)當(dāng)中調(diào)度對(duì)應(yīng)于此中斷號(hào)的中斷服務(wù)程序這樣就可以實(shí)現(xiàn)中斷功能。
3.基于Windows多線程環(huán)境的系統(tǒng)模型
3.1實(shí)現(xiàn)原理
考慮部分由C語言編寫的實(shí)時(shí)嵌入式程序經(jīng)過適當(dāng)?shù)男薷目梢杂蒝C編譯后,在Windows環(huán)境中運(yùn)行。因此可以利用Windows的多線程特性構(gòu)造系統(tǒng)模型:把用戶的主函數(shù)放在系統(tǒng)初始化時(shí)生成的一個(gè)主線程當(dāng)中運(yùn)行,同時(shí),系統(tǒng)主函數(shù)監(jiān)測由Socket端口發(fā)來的數(shù)據(jù),如果是一個(gè)中斷產(chǎn)生信號(hào),系統(tǒng)主函數(shù)掛起當(dāng)前正在執(zhí)行的線程,新生成一個(gè)新的線程,并在新線程中執(zhí)行相應(yīng)的中斷服務(wù)函數(shù)。
3.2系統(tǒng)的結(jié)構(gòu)
由于CSocket類不能夠由各個(gè)線程之間共享,而各個(gè)線程內(nèi)部又要通過Socket端口接收和發(fā)送數(shù)據(jù),因此應(yīng)建立高效而又防止各線程之間沖突的機(jī)制,下面是系統(tǒng)的結(jié)構(gòu)圖:
當(dāng)線程需要通過Socket接口收發(fā)數(shù)據(jù)時(shí),首先檢測/設(shè)置相應(yīng)函數(shù)的信號(hào)量,若此資源不能使用,則線程被自動(dòng)掛起。系統(tǒng)的主調(diào)函數(shù)負(fù)責(zé)輪詢來自Socket接口的數(shù)據(jù)以及各個(gè)信號(hào)量資源,當(dāng)資源可用時(shí),喚醒相應(yīng)的線程,完成其請(qǐng)求的操作。如果接收到中斷產(chǎn)生信號(hào),則生成新的線程,并掛起當(dāng)前的線程,從而完成對(duì)中斷請(qǐng)求的響應(yīng)。
4.結(jié)束語
本文介紹了針對(duì)實(shí)時(shí)嵌入式軟件的測試工具的研究與完善工作,根據(jù)不同的軟件特點(diǎn),
構(gòu)造了兩種系統(tǒng)模型。通過實(shí)際的使用,都達(dá)到了比較滿意的結(jié)果。
這兩種系統(tǒng)模型經(jīng)過適當(dāng)?shù)男薷?,可以?yīng)用在其它語言編寫的軟件上,從而可以實(shí)現(xiàn)通用的模塊功能。
參考文獻(xiàn)