CDMA2000發展快速 成為最先進的3G技術
上網時間 : 2005年11月22日
CDMA發展組織(CDG)行政總監Perry LaForge於3G世界大會的主題演講中宣佈,CDMA2000於61個國家的用戶總數已經超過2億,成為發展最迅速且最先進的3G技術,不但為用戶提供先進的語音與資料服務,並為供應商創造新市場與龐大收入;未來,其快速度的發展升級途逕將有助於供應商至少提前兩年將更強的功能與服務推向市場。
根據CDG的資料顯示,全球共有131家的CDMA2000供應商分佈於六大洲的61個國家,而WCDMA供應商只有78家,分佈於亞洲、歐洲及北美的38個國家。亞洲(包括東南亞地區)有35間CDMA2000供應商,拉丁美洲有31間,歐洲及俄羅斯有27間,北美有25間,非洲及中東有13間。另外於非洲、中東、拉丁美洲及亞洲還有29個CDMA2000網路正在建設中。
目前的CDMA2000 1xEV-DO版本0能在商用網路中提供600-800kbps的速率,最高速率可達3.1Mbps,預計在2006-2007年投入商用後將超越 HSDPA(高速下行分組接入)技術。1xEV-DO的下一版本A採用QoS技術,能提高反向鏈路上的資料速率,並推出完善的多媒體功能鋪路,包括在全 IP化的無線接入與核心網路上提供VoIP及視頻電話服務。
CDG表示,CDMA2000技術帶來了目前最高的網路效率與資料處理能力,未來並將持續這種優勢。版本A將於2006年後期投入商用,屆時將使運營商於上述領域保持至少兩年的領先優勢。預計將於2008年投入商用的版本B提出了動態可擴展帶寬的概念,這種功能將讓供應商可以於前向及/或反向鏈路中將最多15個1.25MHz載波合併於一起,將網路的容量及傳輸速率提高到73.5Mbps。
CDG並指出CDMA2000的競爭優勢關鍵在於能夠實現頻帶內遷移,並能使cdmaOn、TDMA、NMT與Greenfield的供應商於450MHz、800MHz、1700MHz、1900MHz或2100MHz頻帶內對現有系統進行升級或建設新網路。另一方面,WCDMA商業系統採用的是2100MHz頻帶內的Greenfield配置(除了美國),需要新的頻率範圍及新的無線電網路。
廣泛的設備選擇是CDMA2000的另一個競爭優勢。目前有900種CDMA2000設備,其中包括150種用於1xEV-DO的設備,從具有基本資料功能的低階手機到具有多媒體功能的設備,一應俱全。於規模經濟效應的推動下,CDMA2000設備的價格不斷下降,遠遠低於WCDMA設備。
CDMA2000在投入商業化的前五年發展速度已超過了WCDMA及GSM。憑藉2億的用戶數量,CDMA2000控制了85%的3G市場,服務的用戶數佔全球無線用戶總數的近10%,成為擴張最迅速的無線技術,預估在2005年底,CDMA2000用戶總數將達到2.2億。
星期二, 11月 22, 2005
大陸TD-SCDMA標準甩不掉Qualcomm專利糾纏
大陸TD-SCDMA標準甩不掉Qualcomm專利糾纏
上網時間 : 2005年11月22日
由於美國Qualcomm公司決心要對TD-SCDMA技術收取知識產權版權費(IP Royalties),中國大陸本土開發的3G行動標準要想成功,免不了要先到美國聖地牙哥(San Diego),即Qualcomm公司的總部所在地繞一圈。
在完成最後的場外測試和一旦手機廠商實現TD-SCDMA手機量產後,中國大陸非常可能從2006年開始對TD-SCDMA技術進行商業化應用。TD-SCDMA受到大陸政府的支援,因為它涉及的多數IP屬於大陸本土公司。但TD-SCDMA可能拋不開CDMA大廠Qualcomm的糾纏。
「就像所有與CDMA相關的技術一樣,我們當然也在TD-SCDMA技術方面擁有基本專利。我們在全球有60家TD-SCDMA和 WCDMA技術授權客戶,儘管我們在中國大陸沒有任何TD-SCDMA授權客戶。」Qualcomm中國大陸公司總裁孟樸(Frank Meng)表示。「一旦它進入商業化階段時,我們將與大陸廠商磋商,以簽署授權協議。」
中國大陸主管和業界人士對於Qualcomm的主張,反應則相當冷淡。TD-SCDMA產業聯盟秘書長楊驊(Yang Hua)表示,他相信該聯盟的成員擁有TD-SCDMA需要的「多數核心與基本IP」,而且這些專利在聯盟成員之間是交叉授權的。
TD-SCDMA技術論壇副主席、西門子高層李萬林(Li Wanli)表示,Qualcomm早在兩年前就提出了這個問題,但迄今為止,該公司仍然沒有提交一份他們所聲稱擁有的TD-SCDMA專利名單。(原文連結處:Qualcomm repeats China 3G ownership claim)
(Mike Clendenin)
上網時間 : 2005年11月22日
由於美國Qualcomm公司決心要對TD-SCDMA技術收取知識產權版權費(IP Royalties),中國大陸本土開發的3G行動標準要想成功,免不了要先到美國聖地牙哥(San Diego),即Qualcomm公司的總部所在地繞一圈。
在完成最後的場外測試和一旦手機廠商實現TD-SCDMA手機量產後,中國大陸非常可能從2006年開始對TD-SCDMA技術進行商業化應用。TD-SCDMA受到大陸政府的支援,因為它涉及的多數IP屬於大陸本土公司。但TD-SCDMA可能拋不開CDMA大廠Qualcomm的糾纏。
「就像所有與CDMA相關的技術一樣,我們當然也在TD-SCDMA技術方面擁有基本專利。我們在全球有60家TD-SCDMA和 WCDMA技術授權客戶,儘管我們在中國大陸沒有任何TD-SCDMA授權客戶。」Qualcomm中國大陸公司總裁孟樸(Frank Meng)表示。「一旦它進入商業化階段時,我們將與大陸廠商磋商,以簽署授權協議。」
中國大陸主管和業界人士對於Qualcomm的主張,反應則相當冷淡。TD-SCDMA產業聯盟秘書長楊驊(Yang Hua)表示,他相信該聯盟的成員擁有TD-SCDMA需要的「多數核心與基本IP」,而且這些專利在聯盟成員之間是交叉授權的。
TD-SCDMA技術論壇副主席、西門子高層李萬林(Li Wanli)表示,Qualcomm早在兩年前就提出了這個問題,但迄今為止,該公司仍然沒有提交一份他們所聲稱擁有的TD-SCDMA專利名單。(原文連結處:Qualcomm repeats China 3G ownership claim)
(Mike Clendenin)
星期一, 11月 14, 2005
HSDPA有重大缺陷 摩托羅拉提出因應之策
HSDPA有重大缺陷 摩托羅拉提出因應之策
上網時間 : 2005年11月14日
為了確保在歐洲能以最佳的形式部署具備HSDPA (High Speed Downlink Packet Access)功能的蜂巢式網路,摩托羅拉(Motorola)公司最近進行了大幅且深入的試驗,並於日前發佈了初步結果。該公司表示,從多用戶的戶外試驗之發現將有助於廠商決定如何最佳部署HSDPA。其強調,最初用戶在使用行動寬頻中的感受相當重要,而且廠商的目標必須是提供與固定寬頻類似的性能。
該公司表示,從不同試驗中所取得的三大指導方針中,最重要的一項是需要提供足夠的處理能力以減少延遲。儘管HSDPA在增強目前蜂巢式網路的傳輸率方面表現突出,但摩托羅拉的研究仍顯示,當進行諸如網頁瀏覽的應用時,該技術會出現延遲。這是由一種被稱為「state switching(狀態轉換)」的機制所引起的。這種機制會將用戶由高速狀態轉換到低速狀態,而用戶並不知曉。
而當無線電網路的狀態由慢轉回到快速運作時,會引發數秒的延遲,這對標榜為「行動寬頻」的業務是不可接受的。摩托羅拉的解決方案據稱是忽視用戶行為,避免將用戶由高速向下切換到低速狀態。由於HSDPA使無線電資源在用戶之間能進行動態共享,因此減少這種狀態切換非常重要。但是,該公司指出,這種安排(scheduling)需要基地台具有密集運算處理能力。研究建議,網路廠商應該確保他們擁有足夠的基地台處理能力,以在推出HSDPA業務時對最高可能數量的呼叫進行排序。
要成功推出HSDPA,另外一個重要問題就是採用一些重要的手機功能,因而獲得更好的行動體驗。該公司解釋,HSDPA性能與設備或手機的功能有相當的關聯性。舉例來說,當用戶處於行動狀態時,手機的一種名為均衡增強(equaliser enhance)的訊號處理功能猶為重要。摩托羅拉表示,該公司的初期試驗結果顯示,支援這種功能的手機的傳輸率可提高多達40%。但目前僅有極少手機製造商宣稱可以提供這種功能。
此外,試驗還顯示,活躍用戶達到一定規模時,視訊串流性能會下降。該公司透露:「如果沒有適當地安排優先順序,活躍用戶只要達到4位,就足以導致視訊串流出現停頓。」為了解決這個問題,廠商必須積極地為視訊服務設定比其他服務更高的優先權,或者提供更多功能。在HSDPA方面,廠商可以延遲提供視訊服務,但視訊服務本身佔UMTS功能的一大部份,這種功能應該被移植到HSDPA上,並提高效率。
(John Walko)
上網時間 : 2005年11月14日
為了確保在歐洲能以最佳的形式部署具備HSDPA (High Speed Downlink Packet Access)功能的蜂巢式網路,摩托羅拉(Motorola)公司最近進行了大幅且深入的試驗,並於日前發佈了初步結果。該公司表示,從多用戶的戶外試驗之發現將有助於廠商決定如何最佳部署HSDPA。其強調,最初用戶在使用行動寬頻中的感受相當重要,而且廠商的目標必須是提供與固定寬頻類似的性能。
該公司表示,從不同試驗中所取得的三大指導方針中,最重要的一項是需要提供足夠的處理能力以減少延遲。儘管HSDPA在增強目前蜂巢式網路的傳輸率方面表現突出,但摩托羅拉的研究仍顯示,當進行諸如網頁瀏覽的應用時,該技術會出現延遲。這是由一種被稱為「state switching(狀態轉換)」的機制所引起的。這種機制會將用戶由高速狀態轉換到低速狀態,而用戶並不知曉。
而當無線電網路的狀態由慢轉回到快速運作時,會引發數秒的延遲,這對標榜為「行動寬頻」的業務是不可接受的。摩托羅拉的解決方案據稱是忽視用戶行為,避免將用戶由高速向下切換到低速狀態。由於HSDPA使無線電資源在用戶之間能進行動態共享,因此減少這種狀態切換非常重要。但是,該公司指出,這種安排(scheduling)需要基地台具有密集運算處理能力。研究建議,網路廠商應該確保他們擁有足夠的基地台處理能力,以在推出HSDPA業務時對最高可能數量的呼叫進行排序。
要成功推出HSDPA,另外一個重要問題就是採用一些重要的手機功能,因而獲得更好的行動體驗。該公司解釋,HSDPA性能與設備或手機的功能有相當的關聯性。舉例來說,當用戶處於行動狀態時,手機的一種名為均衡增強(equaliser enhance)的訊號處理功能猶為重要。摩托羅拉表示,該公司的初期試驗結果顯示,支援這種功能的手機的傳輸率可提高多達40%。但目前僅有極少手機製造商宣稱可以提供這種功能。
此外,試驗還顯示,活躍用戶達到一定規模時,視訊串流性能會下降。該公司透露:「如果沒有適當地安排優先順序,活躍用戶只要達到4位,就足以導致視訊串流出現停頓。」為了解決這個問題,廠商必須積極地為視訊服務設定比其他服務更高的優先權,或者提供更多功能。在HSDPA方面,廠商可以延遲提供視訊服務,但視訊服務本身佔UMTS功能的一大部份,這種功能應該被移植到HSDPA上,並提高效率。
(John Walko)
星期三, 11月 09, 2005
Qualcomm是3G市場的罪魁禍首還是代罪羔羊?
Qualcomm是3G市場的罪魁禍首還是代罪羔羊?
上網時間 : 2005年11月09日
日前六家知名通訊公司向歐盟提起訴訟,針對的是CDMA晶片組巨擘Qualcomm,這件事其實並不太令人意外。但有一個簡單的問題是,到底是什麼讓業界能在如此長的時間內忍受Qualcomm霸道的商業模式。有時候,該公司會被拿來和英特爾(Intel)在微處理器市場中的做法相提並論。而二者的區別在於,Qualcomm低調的多。
諾基亞(Nokia)、Ericsson、Broadcom、NEC、Panasonic Mobile Communications和德州儀器(TI)這幾家業者指控Qualcomm利用自己持有的CDMA技術專利限制競爭對手發展,稱這種行為違反了反壟斷法。這些公司請求歐盟就Qualcomm在3G行動技術基本專利授權方面的做法展開調查,並制止Qualcomm的反公平競爭行為。
但在他們提出抗議的同時,也不禁要讓人質疑這六家廠商起訴Qualcomm的動機不純。也許有些廠商,如德州儀器,擔心Qualcomm將在3G領域成為最終的贏家,因此在市場火紅之前要及時對Qualcomm來個下馬威。還有另外一種可能性是:3G形勢不妙,而Qualcomm將成為替罪羔羊。而更也許是上述兩種情形兼而有之。
畢竟,大家認為2005年第一季整體3G手機市場是「令人失望」的,但據RBC Capital Markets的報告,預計今年下半年3G市場成長會較為強勁。RBC的資料顯示,預計2005年3G手機市場將從2004年的2,420萬部成長到5,000萬部。
無論如何,Qualcomm聲稱該公司在CDMA晶片組市場一直以來都是公平競爭的,而至少表面上也是這樣。在90年代中期,Qualcomm嘗試公開其 CDMA技術,將內部開發的cdmaOne晶片組技術授權給四家廠商:DSP Communications(後被英特爾收購)、LSI Logic、PrairieComm(後來被Freescale收購)和VLSI Technology(後來被飛利浦收購)。最近幾年,三星(Samsung)、Sony、意法半導體(ST)和德州儀器曾分別試圖進入CDMA晶片組市場。
但幾年過去了,沒有一家公司成功地開發出CDMA晶片組與Qualcomm抗衡。英特爾、LSI Logic和Sony幾年前分別受挫並退出了CDMA晶片組市場。意法半導體(ST)最近也放棄了在這方面的努力。三星沒能推出一項產品。甚至實力強大的德州儀器在這個領域也是步履維艱。
簡而言之,CDMA晶片從來就不是公平和開放的市場。當對手可望推出CDMA晶片組時,Qualcomm已至少領先兩代。大部份手機製造商不願意使用Qualcomm以外的落後和未經驗證的CDMA晶片組。
而且除了在CDMA領域外,Qualcomm還想在WCDMA領域分得更大的餅,讓人懷疑這是造成3G手機價格較高而且選擇較少的原因。3G產業一直令人非常失望。該技術在美國一直沒有如預期般發展,在亞太地區也沒有太大動靜。例如,在新加坡,3G手機非常笨重,而且服務費用昂貴。
最令人感到不解的是,在這樣的情況下消費者卻還有心思考慮4G行動服務呢!
(原文連結處:Qualcomm: the problem or scapegoat? Commentary sees 3G wireless service a major bust)
(Mark LaPedus)
上網時間 : 2005年11月09日
日前六家知名通訊公司向歐盟提起訴訟,針對的是CDMA晶片組巨擘Qualcomm,這件事其實並不太令人意外。但有一個簡單的問題是,到底是什麼讓業界能在如此長的時間內忍受Qualcomm霸道的商業模式。有時候,該公司會被拿來和英特爾(Intel)在微處理器市場中的做法相提並論。而二者的區別在於,Qualcomm低調的多。
諾基亞(Nokia)、Ericsson、Broadcom、NEC、Panasonic Mobile Communications和德州儀器(TI)這幾家業者指控Qualcomm利用自己持有的CDMA技術專利限制競爭對手發展,稱這種行為違反了反壟斷法。這些公司請求歐盟就Qualcomm在3G行動技術基本專利授權方面的做法展開調查,並制止Qualcomm的反公平競爭行為。
但在他們提出抗議的同時,也不禁要讓人質疑這六家廠商起訴Qualcomm的動機不純。也許有些廠商,如德州儀器,擔心Qualcomm將在3G領域成為最終的贏家,因此在市場火紅之前要及時對Qualcomm來個下馬威。還有另外一種可能性是:3G形勢不妙,而Qualcomm將成為替罪羔羊。而更也許是上述兩種情形兼而有之。
畢竟,大家認為2005年第一季整體3G手機市場是「令人失望」的,但據RBC Capital Markets的報告,預計今年下半年3G市場成長會較為強勁。RBC的資料顯示,預計2005年3G手機市場將從2004年的2,420萬部成長到5,000萬部。
無論如何,Qualcomm聲稱該公司在CDMA晶片組市場一直以來都是公平競爭的,而至少表面上也是這樣。在90年代中期,Qualcomm嘗試公開其 CDMA技術,將內部開發的cdmaOne晶片組技術授權給四家廠商:DSP Communications(後被英特爾收購)、LSI Logic、PrairieComm(後來被Freescale收購)和VLSI Technology(後來被飛利浦收購)。最近幾年,三星(Samsung)、Sony、意法半導體(ST)和德州儀器曾分別試圖進入CDMA晶片組市場。
但幾年過去了,沒有一家公司成功地開發出CDMA晶片組與Qualcomm抗衡。英特爾、LSI Logic和Sony幾年前分別受挫並退出了CDMA晶片組市場。意法半導體(ST)最近也放棄了在這方面的努力。三星沒能推出一項產品。甚至實力強大的德州儀器在這個領域也是步履維艱。
簡而言之,CDMA晶片從來就不是公平和開放的市場。當對手可望推出CDMA晶片組時,Qualcomm已至少領先兩代。大部份手機製造商不願意使用Qualcomm以外的落後和未經驗證的CDMA晶片組。
而且除了在CDMA領域外,Qualcomm還想在WCDMA領域分得更大的餅,讓人懷疑這是造成3G手機價格較高而且選擇較少的原因。3G產業一直令人非常失望。該技術在美國一直沒有如預期般發展,在亞太地區也沒有太大動靜。例如,在新加坡,3G手機非常笨重,而且服務費用昂貴。
最令人感到不解的是,在這樣的情況下消費者卻還有心思考慮4G行動服務呢!
(原文連結處:Qualcomm: the problem or scapegoat? Commentary sees 3G wireless service a major bust)
(Mark LaPedus)
反將一軍 Qualcomm指控諾基亞侵犯GSM專利
反將一軍 Qualcomm指控諾基亞侵犯GSM專利
上網時間 : 2005年11月09日
Qualcomm公司日前在美國San Diego的聯邦法院提起訴訟,指控行動電話大廠諾基亞(Nokia)侵犯該公司的11項專利及其全資子公司SnapTrack的一項專利。這些知識產權據稱對製造與使用GSM、GPRS和EDGE行動電話而言是必不可少的部分。
Qualcomm在起訴書中聲稱,諾基亞在美國生產或銷售的GSM系列標準產品侵犯了其專利,該公司將尋求法庭禁止諾基亞在美國繼續銷售手機,並賠償相關損失。上個月下旬,諾基亞等六家公司曾分別向歐洲委員會提起申訴,指控Qualcomm濫用與3G WCDMA技術相關的知識產權。
而Qualcomm則針對諾基亞的訴訟中所涉及的其中六項專利,也曾被Qualcomm用於2005年7月時向Broadcom提起的訴訟的基礎,該項訴訟也將在San Diego的聯邦法院舉行聽證。
Qualcomm公司的法務長兼資深副總裁Louis Lupin表示:「我們曾經就一系列問題與諾基亞展開洽談,其中包括諾基亞採用的部份基本GSM專利並未獲得我們的授權。事實上,我們並不想和諾基亞公司對簿公堂。直到不久以前,我們仍然認為這些問題是可以透過協商解決,但目前看來這種可能性已經不大。」
(John Walko)
上網時間 : 2005年11月09日
Qualcomm公司日前在美國San Diego的聯邦法院提起訴訟,指控行動電話大廠諾基亞(Nokia)侵犯該公司的11項專利及其全資子公司SnapTrack的一項專利。這些知識產權據稱對製造與使用GSM、GPRS和EDGE行動電話而言是必不可少的部分。
Qualcomm在起訴書中聲稱,諾基亞在美國生產或銷售的GSM系列標準產品侵犯了其專利,該公司將尋求法庭禁止諾基亞在美國繼續銷售手機,並賠償相關損失。上個月下旬,諾基亞等六家公司曾分別向歐洲委員會提起申訴,指控Qualcomm濫用與3G WCDMA技術相關的知識產權。
而Qualcomm則針對諾基亞的訴訟中所涉及的其中六項專利,也曾被Qualcomm用於2005年7月時向Broadcom提起的訴訟的基礎,該項訴訟也將在San Diego的聯邦法院舉行聽證。
Qualcomm公司的法務長兼資深副總裁Louis Lupin表示:「我們曾經就一系列問題與諾基亞展開洽談,其中包括諾基亞採用的部份基本GSM專利並未獲得我們的授權。事實上,我們並不想和諾基亞公司對簿公堂。直到不久以前,我們仍然認為這些問題是可以透過協商解決,但目前看來這種可能性已經不大。」
(John Walko)
誰執牛耳 明年是寬頻無線市場關鍵年
誰執牛耳 明年是寬頻無線市場關鍵年
上網時間 : 2005年11月09日
對於寬頻無線技術而言,2006年將是極其重要的一年,預計採用ZigBee、超寬頻(UWB)和WiMAX的產品將大量湧現。這是市場研究公司 Northern Sky Research (NSR)日前發表關於《寬頻無線市場:WiMAX、Wi-Fi、3G、4G、UWB與ZigBee技術展望》的報告中對於明年特別冀予厚望的看法。
報告指出,首批經過認證的802.16d WiMAX解決方案預計將於2006年中進行部署。再經過12到18個月的發展,預計到2006年底,WiMAX用戶將達到50萬用戶。在UWB方面,首批商用UMB產品將於2006年底在北美開始部署,PC和週邊設備應用則是開路先鋒。
至於ZigBee,首批具備ZigBee功能的產品將於2006年第一季在北美、歐洲和亞太地區展開,並率先針對家庭自動化和產業應用。NSR預計,到2010年,全球將部署5.8億個ZigBee元件。
NSR總裁Christopher Baugh認為,經過多年的規劃和努力,未來12個月內WiMAX、UWB和ZigBee將進入市場。這些新技術針對個人和都會區域接取網(metro access)市場,具有更高的性能,並可實現低成本和互通作業性。
值得一提的是,儘管MSR認可WiMAX甚至是UWB和ZigBee的潛力,但該公司仍然認為,就用戶規模、硬體銷售和服務收入而言,Wi-Fi、3G甚至是4G市場才是最大的市場商機。到2010年,全球3G用戶預計將達12億,因此未來5年,3G將是主要的寬頻無線技術。目前3G市場領先行動 WiMAX達3年,隨著新型的3G技術(HSDPA/HSUPA/Rev.A/Super 3G和D-CDMA)的出現,這一趨勢還將加強。
上網時間 : 2005年11月09日
對於寬頻無線技術而言,2006年將是極其重要的一年,預計採用ZigBee、超寬頻(UWB)和WiMAX的產品將大量湧現。這是市場研究公司 Northern Sky Research (NSR)日前發表關於《寬頻無線市場:WiMAX、Wi-Fi、3G、4G、UWB與ZigBee技術展望》的報告中對於明年特別冀予厚望的看法。
報告指出,首批經過認證的802.16d WiMAX解決方案預計將於2006年中進行部署。再經過12到18個月的發展,預計到2006年底,WiMAX用戶將達到50萬用戶。在UWB方面,首批商用UMB產品將於2006年底在北美開始部署,PC和週邊設備應用則是開路先鋒。
至於ZigBee,首批具備ZigBee功能的產品將於2006年第一季在北美、歐洲和亞太地區展開,並率先針對家庭自動化和產業應用。NSR預計,到2010年,全球將部署5.8億個ZigBee元件。
NSR總裁Christopher Baugh認為,經過多年的規劃和努力,未來12個月內WiMAX、UWB和ZigBee將進入市場。這些新技術針對個人和都會區域接取網(metro access)市場,具有更高的性能,並可實現低成本和互通作業性。
值得一提的是,儘管MSR認可WiMAX甚至是UWB和ZigBee的潛力,但該公司仍然認為,就用戶規模、硬體銷售和服務收入而言,Wi-Fi、3G甚至是4G市場才是最大的市場商機。到2010年,全球3G用戶預計將達12億,因此未來5年,3G將是主要的寬頻無線技術。目前3G市場領先行動 WiMAX達3年,隨著新型的3G技術(HSDPA/HSUPA/Rev.A/Super 3G和D-CDMA)的出現,這一趨勢還將加強。
星期二, 11月 08, 2005
高速下行分組接入的接收端設計挑戰分析
高速下行分組接入的接收端設計挑戰分析
上網時間 : 2005年11月08日
高速下行分組接入(HSDPA)能提供比通用移動通信系統(UMTS)更高的速率,但要求更強的處理能力、更大存儲容量和高階調製等新的性能,這些要求對接收端的設計帶來挑戰。本文分析了這些技術挑戰,並提出了採用均衡器、雙天線等解決思路。
許多有關HSDPA的討論都集中於這樣一個事實,即HSDPA可與傳統的UMTS業務共存於相同的無線網絡中。這使運營商能夠對網絡進行逐步升級,從而儘可能減少用於改善基礎設施的投資,降低傳輸每比特業務的成本。儘管許多人都強調這種技術能為運營商帶來好處,包括從原有的 UMTS順利過渡、更有效地利用現有設備以及更高的投資回報,但無線技術開發商卻很少談到它對手機設計的影響。
事實上,這種技術給手機設計帶來了挑戰,如果能夠有效解決這些挑戰的話,將為消費者提供3G的性能,使數據傳輸速率達到14.4Mbps,大大超過目前UMTS所能提供的速度。
在權衡HSDPA手機設計所面臨的挑戰時,有兩點需要考慮。其中最重要的一點是,該協議是第三代合作夥伴計劃(3GPP)規範的進一步擴展,而不是一種全新的技術。這種技術通過擴展在UMTS標準裡已經建立的技術來取得速度上的優勢。它將關鍵的數據處理從無線電網絡控製器轉移到節點B(基站),使數據處理與空中接口更靠近,從而實現更高的系統吞吐量並改善服務質量。
由於HSDPA建立在3GPP規範基礎之上,因此手機OEM廠商在開發HSDPA設備時可重複使用大量已有的設計工作,但這些手機將需要性能更高的信號處理器件。
第二個需要考慮的是上行的性能,正如其名稱暗示的那樣,HSDPA只是運營商對下行性能的升級。在未來一定時間內,對高速上行分組接入(HSUPA)的部署將會增加。目前,設計更改應該只是針對手機的接收部分,發射端(W-CDMA上行鏈路)基本保持不變,這對設計所需時間及複雜性的影響是顯而易見的。
接收器實現面臨的困難
並不是所有HSDPA的實現方式都是一樣的,注意到這點很重要。一些較早投入市場的HSDPA解決方案是基於CDMA耙式接收器(rake receiver)技術。儘管對傳統的UMTS而言,耙式接收器工作效果很好,能滿足HSDPA速率高達每秒數兆比特的系統要求,但要實現 14.4Mbps的HSDPA峰值下載速率,則還需要更先進的接收器技術。通常需要在接收器中採用先進的均衡器來應對這一挑戰。
接收器分集是HSDPA性能決定於實現方式的另一個方面。雖然單天線系統適合某些實現方式,在最佳的空中接口條件下有可能提供全速的數據速率,但對更高性能的手機和PDA來說,採用具有接收器分集特性的雙天線系統更有利。增加的第二個接收器和天線允許手機在大多數空中接口條件下達到更高的下載速率。
接收器的其它方面也需要加強。HSDPA支持16-QAM(正交振幅調製)、鏈路自適應、物理層中繼與混合自動重傳請求 (HARQ)相結合、物理層信道條件反饋,以及一種新的傳輸信道類型,這種新的傳輸信道稱為高速下行共享信道(HS-DSCH),它允許幾名用戶共享空中接口的信道資源。16-QAM調製要求更嚴格的射頻性能,特別是對線性的要求更加嚴格,接收器還必須能夠檢測信道質量並反饋給基站。
HSDPA帶來的最基本的影響就是它改變了手機的信號處理及系統控制,從而導致軟硬件實現更加複雜。
HSDPA提供的數據傳輸速率將需要更快的處理能力,並要求手機具備容量更大的存儲器。若要以可接受的成本和功耗水平實現必需的速度和存儲器功能,那麼就必須借助於65納米節點的半導體工藝技術,而目前UMTS系統通常採用130納米及90納米技術。採用65納米工藝技術製造的多內核半導體器件對HSDPA手機獲取市場領導地位將至關重要。
如上所述,以數據處理為主的高性能手機將採用兩個接收器和兩個天線,以儘可能增加在所有鏈路條件下HSDPA業務的吞吐量。儘管兩個天線都嘗試捕獲相同的信號,但通過將接收分集設計到手機裡,將獲得最佳接收性能。通過採用自適應性調製及編碼,任何一個天線接收到的高質量信號,都能進行複雜的調製與更高速率的編碼。因此,用戶能夠享受到更高吞吐量及更高速率的數據業務,同時運營商也能更有效地傳輸數據並為其他用戶保留系統資源。
為達到最好效果,每個天線和接收器都必須工作於相互獨立的信號傳輸路徑。同時,系統必須能夠結合兩個信號輸入以獲得可能的最佳信號。所有這些都增加了設計複雜性,並需要額外的電路,這可能增加手機的尺寸。
不過對設計人員而言,雙天線、雙接收器配置所帶來的最大挑戰在於兩個天線放置的位置必須儘可能離得遠些。通常說來,這意味著兩個天線必須位於手機兩端,即一個天線靠近麥克風,另一個則靠近耳機。在翻蓋式手機設計裡,這意味著信號路徑必須通過翻蓋轉軸,這會帶來工程上的問題,但還沒到無法解決的地步。
增強用戶體驗
對手機OEM廠商和消費者來說,HSDPA技術還有一個方面的好處,即其空中接口有助於延長電池的使用壽命。雖然HSDPA接收器比標準的UMTS手機要複雜得多,並且處理能力更強,但它下載數據的效率也將大幅提高。
因此,處理器不需要那麼多時間來工作,它處於低功耗狀態的時間會更長。目前還沒有數據能夠量化該技術對電池使用壽命的影響,不過預計上述特性能夠達到節能作用。儘管預計功效將得到提高,不過這仍取決於諸多因素。
無論如何,消費者將會注意到的HSDPA最大優勢就是能提供比傳統UMTS更高的速率。吞吐量翻了一番,這意味著最終用戶接收數據的速率更快,而且在更多時間裡將享受到更好的網絡性能。
作者:Bill Krenik
無線先進架構經理
德州儀器
上網時間 : 2005年11月08日
高速下行分組接入(HSDPA)能提供比通用移動通信系統(UMTS)更高的速率,但要求更強的處理能力、更大存儲容量和高階調製等新的性能,這些要求對接收端的設計帶來挑戰。本文分析了這些技術挑戰,並提出了採用均衡器、雙天線等解決思路。
許多有關HSDPA的討論都集中於這樣一個事實,即HSDPA可與傳統的UMTS業務共存於相同的無線網絡中。這使運營商能夠對網絡進行逐步升級,從而儘可能減少用於改善基礎設施的投資,降低傳輸每比特業務的成本。儘管許多人都強調這種技術能為運營商帶來好處,包括從原有的 UMTS順利過渡、更有效地利用現有設備以及更高的投資回報,但無線技術開發商卻很少談到它對手機設計的影響。
事實上,這種技術給手機設計帶來了挑戰,如果能夠有效解決這些挑戰的話,將為消費者提供3G的性能,使數據傳輸速率達到14.4Mbps,大大超過目前UMTS所能提供的速度。
在權衡HSDPA手機設計所面臨的挑戰時,有兩點需要考慮。其中最重要的一點是,該協議是第三代合作夥伴計劃(3GPP)規範的進一步擴展,而不是一種全新的技術。這種技術通過擴展在UMTS標準裡已經建立的技術來取得速度上的優勢。它將關鍵的數據處理從無線電網絡控製器轉移到節點B(基站),使數據處理與空中接口更靠近,從而實現更高的系統吞吐量並改善服務質量。
由於HSDPA建立在3GPP規範基礎之上,因此手機OEM廠商在開發HSDPA設備時可重複使用大量已有的設計工作,但這些手機將需要性能更高的信號處理器件。
第二個需要考慮的是上行的性能,正如其名稱暗示的那樣,HSDPA只是運營商對下行性能的升級。在未來一定時間內,對高速上行分組接入(HSUPA)的部署將會增加。目前,設計更改應該只是針對手機的接收部分,發射端(W-CDMA上行鏈路)基本保持不變,這對設計所需時間及複雜性的影響是顯而易見的。
接收器實現面臨的困難
並不是所有HSDPA的實現方式都是一樣的,注意到這點很重要。一些較早投入市場的HSDPA解決方案是基於CDMA耙式接收器(rake receiver)技術。儘管對傳統的UMTS而言,耙式接收器工作效果很好,能滿足HSDPA速率高達每秒數兆比特的系統要求,但要實現 14.4Mbps的HSDPA峰值下載速率,則還需要更先進的接收器技術。通常需要在接收器中採用先進的均衡器來應對這一挑戰。
接收器分集是HSDPA性能決定於實現方式的另一個方面。雖然單天線系統適合某些實現方式,在最佳的空中接口條件下有可能提供全速的數據速率,但對更高性能的手機和PDA來說,採用具有接收器分集特性的雙天線系統更有利。增加的第二個接收器和天線允許手機在大多數空中接口條件下達到更高的下載速率。
接收器的其它方面也需要加強。HSDPA支持16-QAM(正交振幅調製)、鏈路自適應、物理層中繼與混合自動重傳請求 (HARQ)相結合、物理層信道條件反饋,以及一種新的傳輸信道類型,這種新的傳輸信道稱為高速下行共享信道(HS-DSCH),它允許幾名用戶共享空中接口的信道資源。16-QAM調製要求更嚴格的射頻性能,特別是對線性的要求更加嚴格,接收器還必須能夠檢測信道質量並反饋給基站。
HSDPA帶來的最基本的影響就是它改變了手機的信號處理及系統控制,從而導致軟硬件實現更加複雜。
HSDPA提供的數據傳輸速率將需要更快的處理能力,並要求手機具備容量更大的存儲器。若要以可接受的成本和功耗水平實現必需的速度和存儲器功能,那麼就必須借助於65納米節點的半導體工藝技術,而目前UMTS系統通常採用130納米及90納米技術。採用65納米工藝技術製造的多內核半導體器件對HSDPA手機獲取市場領導地位將至關重要。
如上所述,以數據處理為主的高性能手機將採用兩個接收器和兩個天線,以儘可能增加在所有鏈路條件下HSDPA業務的吞吐量。儘管兩個天線都嘗試捕獲相同的信號,但通過將接收分集設計到手機裡,將獲得最佳接收性能。通過採用自適應性調製及編碼,任何一個天線接收到的高質量信號,都能進行複雜的調製與更高速率的編碼。因此,用戶能夠享受到更高吞吐量及更高速率的數據業務,同時運營商也能更有效地傳輸數據並為其他用戶保留系統資源。
為達到最好效果,每個天線和接收器都必須工作於相互獨立的信號傳輸路徑。同時,系統必須能夠結合兩個信號輸入以獲得可能的最佳信號。所有這些都增加了設計複雜性,並需要額外的電路,這可能增加手機的尺寸。
不過對設計人員而言,雙天線、雙接收器配置所帶來的最大挑戰在於兩個天線放置的位置必須儘可能離得遠些。通常說來,這意味著兩個天線必須位於手機兩端,即一個天線靠近麥克風,另一個則靠近耳機。在翻蓋式手機設計裡,這意味著信號路徑必須通過翻蓋轉軸,這會帶來工程上的問題,但還沒到無法解決的地步。
增強用戶體驗
對手機OEM廠商和消費者來說,HSDPA技術還有一個方面的好處,即其空中接口有助於延長電池的使用壽命。雖然HSDPA接收器比標準的UMTS手機要複雜得多,並且處理能力更強,但它下載數據的效率也將大幅提高。
因此,處理器不需要那麼多時間來工作,它處於低功耗狀態的時間會更長。目前還沒有數據能夠量化該技術對電池使用壽命的影響,不過預計上述特性能夠達到節能作用。儘管預計功效將得到提高,不過這仍取決於諸多因素。
無論如何,消費者將會注意到的HSDPA最大優勢就是能提供比傳統UMTS更高的速率。吞吐量翻了一番,這意味著最終用戶接收數據的速率更快,而且在更多時間裡將享受到更好的網絡性能。
作者:Bill Krenik
無線先進架構經理
德州儀器
星期五, 11月 04, 2005
Skyworks用TTPCom軟體開發EDGE方案
Skyworks用TTPCom軟體開發EDGE方案
上網時間 : 2005年11月04日
TTPCom表示,已授權其數位蜂巢式矽知識產權和EDGE協定軟體給無線半導體公司Skyworks,後者將運用該軟體開發Lynx EDGE蜂巢式系統解決方案,為中、高階手機強化多媒體性能。
TTPCom表示,在一個手機平台上體現EDGE數據機功能,要比執行GSM/GPRS系統性能複雜得多。平台設計者必須優化數據機的所有元件,以確保系統可行性。而TTPCom蜂巢式基頻引擎系列(CBE)為一個完整的通訊系統,能提供數據機核心元件,同時也是開發支援EDGE的基頻晶片組的起點。
Skyworks曾在1996年提出完整手機系統解決方案概念。在其Helios射頻及PA技術基礎上,Skyworks提供用於建造完整無線終端的系統解決方案,內含所有重要的軟、硬體。Skyworks同時提供符合GCF的參考設計,並預先整合協定堆疊和多媒體框架,大幅縮短了手機製造商的開發時程。
TTPCom進一步指出,在結合Skyworks的系統解決方案與TTPCom的CBE、經驗證的協定軟體和預先整合的AJAR應用框架後,將大幅減少手機製造商採用高性能平台時的成本,並縮短上市時間。
上網時間 : 2005年11月04日
TTPCom表示,已授權其數位蜂巢式矽知識產權和EDGE協定軟體給無線半導體公司Skyworks,後者將運用該軟體開發Lynx EDGE蜂巢式系統解決方案,為中、高階手機強化多媒體性能。
TTPCom表示,在一個手機平台上體現EDGE數據機功能,要比執行GSM/GPRS系統性能複雜得多。平台設計者必須優化數據機的所有元件,以確保系統可行性。而TTPCom蜂巢式基頻引擎系列(CBE)為一個完整的通訊系統,能提供數據機核心元件,同時也是開發支援EDGE的基頻晶片組的起點。
Skyworks曾在1996年提出完整手機系統解決方案概念。在其Helios射頻及PA技術基礎上,Skyworks提供用於建造完整無線終端的系統解決方案,內含所有重要的軟、硬體。Skyworks同時提供符合GCF的參考設計,並預先整合協定堆疊和多媒體框架,大幅縮短了手機製造商的開發時程。
TTPCom進一步指出,在結合Skyworks的系統解決方案與TTPCom的CBE、經驗證的協定軟體和預先整合的AJAR應用框架後,將大幅減少手機製造商採用高性能平台時的成本,並縮短上市時間。
星期四, 11月 03, 2005
3G標準戰火再起 惟速戰速決才是眾人之福
3G標準戰火再起 惟速戰速決才是眾人之福
上網時間 : 2005年11月03日
想想也不過就是六年前的事,當時由於L.M. Ericsson和Qualcomm撤消了對簿公堂的威脅,讓這一件鬧得沸沸揚揚的知識產權糾紛達成協議,因而也為3G標準開啟了平順之路。當我聽到這個消息時,覺得是心頭放下了一塊大石。之前雙方為了誰擁有這項CDMA介面技術爭論了多年。他們是在1999年3月達成協議的,適逢第三代行動電話標準獲得批准。
當然,我們現在知道它實際上導致三種相互競爭的無線介面規格並存,為現在的國際商務旅者埋下了禍根。當時磋商取得的突破,是因為當事人表示願意支援一種能夠支援多種作業模式的CDMA射頻介面標準,即在全球各個地區容忍不同的射頻介面。因此產生了下面我們非常熟悉的縮寫,即: Qualcomm的CDMA2000,主要用於美國和韓國;歐洲和日本則迅速採納了W-CDMA (W代表寬頻),目前幾乎在全球各地都在採用。
當然,與IP相關的問題往往久拖不決。但一旦擺平,無線產業一般會接受各方達成的協議,並努力應用相關技術。而現在我要以沈重的心情指出, Ericsson,現在又加上了行動大廠們:Broadcom 、NEC、德州儀器(TI)、諾基亞(Nokia)和Panasonic Mobile Communications讓戰端再起。他們向歐盟提出的申訴中指稱,Qualcomm沒有履行對國際標準機構所做出的承諾,以公平、合理和非歧視性的條款提供其技術授權。
雙方在歐洲開戰,至少最初是這樣,基本上是在預料之中的,因為歐洲正推出3G的W-CDMA版本。但由於有兩家日本廠商捲入其中,因此無法排除官司可能也會打到亞洲。只是歐洲當局將如何回應仍需拭目以待。採用以往的經驗,他們將歡迎這個可以從容審案的機會。英特爾和微軟都曾與歐盟長期爭執不下,而微軟與歐盟的官司至今仍然懸而未決。
在兩項申訴中,其中一項將令歐洲律師們垂涎三尺。這項指控的內容是:Qualcomm試圖阻止其它手機晶片組製造商在歐盟市場進行競爭或者進入此一市場,因而違反了歐盟的法規。但願他們的審理過程不會拖上幾年時間,因為我擔心會出現這種情況。六家公司分別提出申訴不會有什麼用處。如果聯合起訴,倒是有可能加速官司的進展。
更重要的是,希望上述糾紛不會延遲3G服務的推出,因為有些歐洲國家已在迅速推出3G服務。
(John Walko)
上網時間 : 2005年11月03日
想想也不過就是六年前的事,當時由於L.M. Ericsson和Qualcomm撤消了對簿公堂的威脅,讓這一件鬧得沸沸揚揚的知識產權糾紛達成協議,因而也為3G標準開啟了平順之路。當我聽到這個消息時,覺得是心頭放下了一塊大石。之前雙方為了誰擁有這項CDMA介面技術爭論了多年。他們是在1999年3月達成協議的,適逢第三代行動電話標準獲得批准。
當然,我們現在知道它實際上導致三種相互競爭的無線介面規格並存,為現在的國際商務旅者埋下了禍根。當時磋商取得的突破,是因為當事人表示願意支援一種能夠支援多種作業模式的CDMA射頻介面標準,即在全球各個地區容忍不同的射頻介面。因此產生了下面我們非常熟悉的縮寫,即: Qualcomm的CDMA2000,主要用於美國和韓國;歐洲和日本則迅速採納了W-CDMA (W代表寬頻),目前幾乎在全球各地都在採用。
當然,與IP相關的問題往往久拖不決。但一旦擺平,無線產業一般會接受各方達成的協議,並努力應用相關技術。而現在我要以沈重的心情指出, Ericsson,現在又加上了行動大廠們:Broadcom 、NEC、德州儀器(TI)、諾基亞(Nokia)和Panasonic Mobile Communications讓戰端再起。他們向歐盟提出的申訴中指稱,Qualcomm沒有履行對國際標準機構所做出的承諾,以公平、合理和非歧視性的條款提供其技術授權。
雙方在歐洲開戰,至少最初是這樣,基本上是在預料之中的,因為歐洲正推出3G的W-CDMA版本。但由於有兩家日本廠商捲入其中,因此無法排除官司可能也會打到亞洲。只是歐洲當局將如何回應仍需拭目以待。採用以往的經驗,他們將歡迎這個可以從容審案的機會。英特爾和微軟都曾與歐盟長期爭執不下,而微軟與歐盟的官司至今仍然懸而未決。
在兩項申訴中,其中一項將令歐洲律師們垂涎三尺。這項指控的內容是:Qualcomm試圖阻止其它手機晶片組製造商在歐盟市場進行競爭或者進入此一市場,因而違反了歐盟的法規。但願他們的審理過程不會拖上幾年時間,因為我擔心會出現這種情況。六家公司分別提出申訴不會有什麼用處。如果聯合起訴,倒是有可能加速官司的進展。
更重要的是,希望上述糾紛不會延遲3G服務的推出,因為有些歐洲國家已在迅速推出3G服務。
(John Walko)
星期三, 11月 02, 2005
用編譯時聲明在早期發現錯誤
用編譯時聲明在早期發現錯誤
上網時間 : 2005年11月02日
一段時間以來,筆者一直在討論如何在C和C++中使用結構來定義記憶體映射元件暫存器的佈局,並曾討論了可以用來為相應暫存器給每個結構成員以合適的尺寸和排列。然而,不同的平台對數據的排列和填充不一樣。因此,一個特定的結構定義對一個平台能正確佈局結構成員,但對另外一個不同的平台進行編譯時,可能會產生錯誤的佈局。
一種不正確的佈局結構在編譯時常常沒有警告出現,但是最終的程式在執行時不能依所期望的那樣工作。你可以改進程式碼而不用費時費力地除錯,這樣編譯器能發現佈局錯誤。其中的技巧就是利用聲明(assertion),聲明能在結構成員出現尺寸或者排列錯誤時產生明顯的編譯時 (compile-time)錯誤。
C和C++提供了實現聲明的不同方法。筆者偏愛於那些能提供標準C聲明巨集編譯時對等量的方法。我們從簡要了解一下這個巨集開始。
執行時(Run-time)聲明
聲明巨集在標準的C頭文件和標準的C++頭文件中定義。形式為:
assert(condition);
的調用擴展到測試條件的程式碼。如果條件為真(產生一個非零值),將什麼也不會產生。即在巨集調用之後,程式繼續執行下一個語句。另一方面,如果條件為假(等於零),程式寫一個診斷消息到stderr(標準錯誤串流),並透過調用標準中斷函數終止程式的執行。
聲明巨集能幫助在程式中發現邏輯錯誤。例如,假設調用get_token(f, t, n)掃描來自FILE *f的輸入,並將掃描的輸入拷貝到字符數組中,以*t開頭,長度為n,可以在get_token中調用聲明來發現錯誤的自變量值,否則將導致產生不確定的行為,如下面的函數:
bool get_token(FILE *f, char *t, size_t n)
{
...
assert(f != NULL);
assert(t != NULL);
assert(n >= 2);
...
}
如果程式不經意地用一個空指針作為第一個自變量來調用get_token函數,第一個聲明將向stderr寫入一個消息,並中斷執行。對於大多數編譯器來說,消息看起來類似於:
Assertion failed: f != NULL, file get_token.c, line 18
將聲明寫入到程式碼中能幫助進行歸檔,並提高開發程式碼的成功率。然而,因為是寫到stderr,在缺乏對標準C I/O系統支援的嵌入式環境中,標準的聲明巨集毫無用處。然而,寫你自己的聲明巨集版、在別的地方顯示消息並不那麼困難。
儘管聲明巨集可以是一種有用的除錯輔助手段,但並不適合於處理在已付運的終端用戶產品中的執行時錯誤。已付運的產品應該產生對於一般終端用戶來說很有意義的診斷消息。它還應該比透過調用中斷函數更可靠地恢復或關斷程式的執行。因此,提供了一種在原始程式碼很少或不改變的情況下使所有聲明無效的簡單方法。開發者可以在程式碼中保留聲明作為文檔,但是應該使它們不會產生程式碼。
如果在包入之前在原始文件中定義NDEBUG巨集,聲明巨集將這樣簡單地定義:
#define assert(cond) ((void)0)
因此,隨後的調用諸如:
assert(f != NULL);
擴展為:
((void)0);
編譯器能夠優化這個語句,使其根本不會產生程式碼。
可以在包入指令前,將NDEBUG的定義寫入到原始程式碼中:
#define NDEBUG
#include }
這種方法的問題是,每次想打開或者關閉聲明的時候必須修改原始程式。大多數編譯器允許在調用編譯器的時候,透過使用命令行自變量來定義巨集,通常選擇D選項。例如,像下面的命令行出現在原始程式的第一行之前,則將聲明關斷:
cc -DNDEBUG get_token.c
compiles get_token.c as if:
#define NDEBUG
使用預處理程式的編譯時聲明
開發者可以使用聲明來驗證記憶體映射結構成員具有正確的尺寸和排列。例如,假設像下面這樣為一個定時器定義元件暫存器:
typedef struct timer timer;}
struct timer
{
uint8_t MODE;
uint32_t DATA;
uint32_t COUNT;
};
可以使用一個聲明和offsetof巨集來驗證DATA成員在結構內部具有偏移4,如下:
assert(offsetof(timer, DATA) == 4);
在標準C頭文件和標準C++頭文件中定義了tffsetof巨集。一種fsetof(t, m)形式的表達式從結構類型t的開始處返回成員m的偏移,偏移佔若干位元組。
這個聲明確實解決了一個潛在的排列問題,但是並不十分理想。使用聲明來檢查一個結構成員的偏移將應該在編譯時完成的檢查延遲到執行時。對聲明的調用只可以出現在函數內,因此不得不將調用包含在一個函數里,將這個函數作為程式啟動的一部份調用,或者緊接著程式啟動調用這個函數。
這裡需要澄清的是,筆者並不是建議每個聲明都可以在編譯時檢查。例如,像測試一個變量的值的聲明如:
assert(f != NULL);
必須在執行時完成。然而,測試一個常數表達式的值的聲明,例如一個結構成員的尺寸和偏移,可以在編譯時完成。
對於只涉及常數表達式的聲明來說,一些C和C++編譯器將允許使用一個預處理程式條件語句來測試聲明,如下列語句:
#if (offsetof(timer, DATA) != 4)}
#error DATA must be at offset 4 in timer
#endif
利用這種方法,編譯器在編譯時評估這個條件─實際上是在預處理期間。如果聲明失敗(#if條件為真),預處理程式執行#error指令,這個指令顯示一個包含指令中的文本的消息,並結束編譯。不同的編譯器的消息形式各不相同,但可發現一些相似之處:
timer.h, line 14: #error: DATA must be at offset 4 in timer
使用#error指令使你能寫出非常清楚的診斷消息。
因為這種方法在編譯時評估聲明,因此聲明不會存在任何執行時的代價,因此你可以不必將聲明關閉。一個程式的編譯時聲明失敗只會導致編譯失敗。
與聲明調用不同的是,預處理指令可以出現在任何地方─全局、局部,或者甚至是在一個類或者結構定義內部,而聲明調用只能出現在函數體內。
儘管有這些優勢,使用#if指令實現聲明至少會有幾個問題。第一個問題不太嚴重,即必須對#if語句中的聲明條件求反,在這個語句中通常你會使用聲明巨集來寫。例如,為測試定時器的DATA成員的偏移為4,依下面的語句寫執行時聲明:
assert(offsetof(timer, DATA) = = 4);
為測試在編譯時的相同條件,需要用運算符!=替換= =,如:
#if (offsetof(timer, DATA) != 4)}
#error ...
#endif
或者在邏輯上對整個條件求反,如:
#if (!(offsetof(timer, DATA) == 4))
#error ...
#endif
或者不管條件,將#error指令放到#else部份,如:
#if (offsetof(timer, DATA) == 4)}
#else
#error ...
#endif
第二個問題是關於使用#if指令來實現聲明,這個問題比較嚴重:標準C和C++不識別在#if條件中的sizeof和 offsetof。它們也不能識別在#if條件中的枚舉常數。一些編譯器允許在#if中作為擴展存在sizeof、offsetof和枚舉常數,但是大多數編譯器是不允許的。慶幸的是,你可以以另外一種沒有這種限制的方式來寫編譯時聲明。
編譯時聲明的無效聲明
在C和C++中,規定一個數組聲明中元素數量的一個常數表達式必須具有一個正值。例如:
int w[10];
int x[1];
是有效的數組聲明,而int y[0];不是。一個常數維數組具有多個作業數和運算符,包括sizeof和offsetof子表達式,例如:
int z[2 * sizeof(w) / sizeof(w[0])];
這聲明數組z具有兩倍於數組w的元素。
開發者可以利用常數數組的維數必須是正數的要求,來以巨集的形式實現編譯時聲明:
#define compile_time_assert(cond)
char assertion[(cond) ? 1 : 0]
如果x是一個評估為真的表達式,於是調用:
compile_time_assert(x);
擴展到一個有效的數組聲明(一維)。否則,擴展到一個無效的數組聲明(0維),這個數組聲明產生一個編譯時診斷消息(錯誤或者警告)。
然而,當聲明失敗時錯誤消息的文本對於不同的編譯器是不同的。筆者看到過的消息如『數組必須至少具有一個元素’,或者『無效的腳本或者腳本過大’。
如果幸運,編譯器產生包含數組名的一個消息,例如數組大小『聲明’為零。在那種情況下,它幫助使數組名成為一個額外的巨集參數,如下:
#define compile_time_assert(cond, msg)
char msg[(cond) ? 1 : 0]
然後,你可以使用數組名來描述聲明失敗的原因。例如,如果調用:
compile_time_assert(offsetof(timer, DATA) == 4,}
DATA_must_be_at_offset_4);
造成一個聲明失敗,那麼將可能看到一個錯誤消息,類似於:
size of array 'DATA_must_be_at_offset_4' is zero
如上所述,這個巨集有一個很容易解決的小問題。這個問題是,在某些情況下,數組聲明可能是分配儲存的一個定義。可以將數組聲明轉變為typedef來避免這個問題,如:
#define compile_time_assert(cond, msg)
typedef char msg[(cond) ? 1 : 0]
在相同的範圍內,兩個typedefs不能具有相同的名字,因此必須使用msg參數來給每個typedef一個獨特的名字。如果不願意採用msg參數,那麼可以將數組聲明為外部數組,如下所示:
#define compile_time_assert(cond)
extern char assertion[(cond) ? 1 : 0]
然而,如果採用這種方法,將不能在C++類中使用巨集,因為你不能將C++類成員聲明為外部量。你可以發現編譯器不會對0大小的數組提出『抱怨’。在這種情況下,你可能嘗試將0改變為-1,如下所示:
#define compile_time_assert(cond, msg)
typedef char msg[(cond) ? 1 : -1]
Boost庫(www.boost.org)為C++程式設計師提供了另一種以稱為BOOST_STATIC_ASSERT 的巨集的形式實現編譯時聲明的方法。利用C++模板可以巧妙地實現這個巨集。如果你是一個C++程式設計師,而且你理解模板的特殊性,你可以進行嘗試。
作者: Dan Saks
總裁
Email:dsaks@wittenberg.edu
Saks & Associates公司
上網時間 : 2005年11月02日
一段時間以來,筆者一直在討論如何在C和C++中使用結構來定義記憶體映射元件暫存器的佈局,並曾討論了可以用來為相應暫存器給每個結構成員以合適的尺寸和排列。然而,不同的平台對數據的排列和填充不一樣。因此,一個特定的結構定義對一個平台能正確佈局結構成員,但對另外一個不同的平台進行編譯時,可能會產生錯誤的佈局。
一種不正確的佈局結構在編譯時常常沒有警告出現,但是最終的程式在執行時不能依所期望的那樣工作。你可以改進程式碼而不用費時費力地除錯,這樣編譯器能發現佈局錯誤。其中的技巧就是利用聲明(assertion),聲明能在結構成員出現尺寸或者排列錯誤時產生明顯的編譯時 (compile-time)錯誤。
C和C++提供了實現聲明的不同方法。筆者偏愛於那些能提供標準C聲明巨集編譯時對等量的方法。我們從簡要了解一下這個巨集開始。
執行時(Run-time)聲明
聲明巨集在標準的C頭文件和標準的C++頭文件中定義。形式為:
assert(condition);
的調用擴展到測試條件的程式碼。如果條件為真(產生一個非零值),將什麼也不會產生。即在巨集調用之後,程式繼續執行下一個語句。另一方面,如果條件為假(等於零),程式寫一個診斷消息到stderr(標準錯誤串流),並透過調用標準中斷函數終止程式的執行。
聲明巨集能幫助在程式中發現邏輯錯誤。例如,假設調用get_token(f, t, n)掃描來自FILE *f的輸入,並將掃描的輸入拷貝到字符數組中,以*t開頭,長度為n,可以在get_token中調用聲明來發現錯誤的自變量值,否則將導致產生不確定的行為,如下面的函數:
bool get_token(FILE *f, char *t, size_t n)
{
...
assert(f != NULL);
assert(t != NULL);
assert(n >= 2);
...
}
如果程式不經意地用一個空指針作為第一個自變量來調用get_token函數,第一個聲明將向stderr寫入一個消息,並中斷執行。對於大多數編譯器來說,消息看起來類似於:
Assertion failed: f != NULL, file get_token.c, line 18
將聲明寫入到程式碼中能幫助進行歸檔,並提高開發程式碼的成功率。然而,因為是寫到stderr,在缺乏對標準C I/O系統支援的嵌入式環境中,標準的聲明巨集毫無用處。然而,寫你自己的聲明巨集版、在別的地方顯示消息並不那麼困難。
儘管聲明巨集可以是一種有用的除錯輔助手段,但並不適合於處理在已付運的終端用戶產品中的執行時錯誤。已付運的產品應該產生對於一般終端用戶來說很有意義的診斷消息。它還應該比透過調用中斷函數更可靠地恢復或關斷程式的執行。因此,提供了一種在原始程式碼很少或不改變的情況下使所有聲明無效的簡單方法。開發者可以在程式碼中保留聲明作為文檔,但是應該使它們不會產生程式碼。
如果在包入之前在原始文件中定義NDEBUG巨集,聲明巨集將這樣簡單地定義:
#define assert(cond) ((void)0)
因此,隨後的調用諸如:
assert(f != NULL);
擴展為:
((void)0);
編譯器能夠優化這個語句,使其根本不會產生程式碼。
可以在包入指令前,將NDEBUG的定義寫入到原始程式碼中:
#define NDEBUG
#include }
這種方法的問題是,每次想打開或者關閉聲明的時候必須修改原始程式。大多數編譯器允許在調用編譯器的時候,透過使用命令行自變量來定義巨集,通常選擇D選項。例如,像下面的命令行出現在原始程式的第一行之前,則將聲明關斷:
cc -DNDEBUG get_token.c
compiles get_token.c as if:
#define NDEBUG
使用預處理程式的編譯時聲明
開發者可以使用聲明來驗證記憶體映射結構成員具有正確的尺寸和排列。例如,假設像下面這樣為一個定時器定義元件暫存器:
typedef struct timer timer;}
struct timer
{
uint8_t MODE;
uint32_t DATA;
uint32_t COUNT;
};
可以使用一個聲明和offsetof巨集來驗證DATA成員在結構內部具有偏移4,如下:
assert(offsetof(timer, DATA) == 4);
在標準C頭文件和標準C++頭文件中定義了tffsetof巨集。一種fsetof(t, m)形式的表達式從結構類型t的開始處返回成員m的偏移,偏移佔若干位元組。
這個聲明確實解決了一個潛在的排列問題,但是並不十分理想。使用聲明來檢查一個結構成員的偏移將應該在編譯時完成的檢查延遲到執行時。對聲明的調用只可以出現在函數內,因此不得不將調用包含在一個函數里,將這個函數作為程式啟動的一部份調用,或者緊接著程式啟動調用這個函數。
這裡需要澄清的是,筆者並不是建議每個聲明都可以在編譯時檢查。例如,像測試一個變量的值的聲明如:
assert(f != NULL);
必須在執行時完成。然而,測試一個常數表達式的值的聲明,例如一個結構成員的尺寸和偏移,可以在編譯時完成。
對於只涉及常數表達式的聲明來說,一些C和C++編譯器將允許使用一個預處理程式條件語句來測試聲明,如下列語句:
#if (offsetof(timer, DATA) != 4)}
#error DATA must be at offset 4 in timer
#endif
利用這種方法,編譯器在編譯時評估這個條件─實際上是在預處理期間。如果聲明失敗(#if條件為真),預處理程式執行#error指令,這個指令顯示一個包含指令中的文本的消息,並結束編譯。不同的編譯器的消息形式各不相同,但可發現一些相似之處:
timer.h, line 14: #error: DATA must be at offset 4 in timer
使用#error指令使你能寫出非常清楚的診斷消息。
因為這種方法在編譯時評估聲明,因此聲明不會存在任何執行時的代價,因此你可以不必將聲明關閉。一個程式的編譯時聲明失敗只會導致編譯失敗。
與聲明調用不同的是,預處理指令可以出現在任何地方─全局、局部,或者甚至是在一個類或者結構定義內部,而聲明調用只能出現在函數體內。
儘管有這些優勢,使用#if指令實現聲明至少會有幾個問題。第一個問題不太嚴重,即必須對#if語句中的聲明條件求反,在這個語句中通常你會使用聲明巨集來寫。例如,為測試定時器的DATA成員的偏移為4,依下面的語句寫執行時聲明:
assert(offsetof(timer, DATA) = = 4);
為測試在編譯時的相同條件,需要用運算符!=替換= =,如:
#if (offsetof(timer, DATA) != 4)}
#error ...
#endif
或者在邏輯上對整個條件求反,如:
#if (!(offsetof(timer, DATA) == 4))
#error ...
#endif
或者不管條件,將#error指令放到#else部份,如:
#if (offsetof(timer, DATA) == 4)}
#else
#error ...
#endif
第二個問題是關於使用#if指令來實現聲明,這個問題比較嚴重:標準C和C++不識別在#if條件中的sizeof和 offsetof。它們也不能識別在#if條件中的枚舉常數。一些編譯器允許在#if中作為擴展存在sizeof、offsetof和枚舉常數,但是大多數編譯器是不允許的。慶幸的是,你可以以另外一種沒有這種限制的方式來寫編譯時聲明。
編譯時聲明的無效聲明
在C和C++中,規定一個數組聲明中元素數量的一個常數表達式必須具有一個正值。例如:
int w[10];
int x[1];
是有效的數組聲明,而int y[0];不是。一個常數維數組具有多個作業數和運算符,包括sizeof和offsetof子表達式,例如:
int z[2 * sizeof(w) / sizeof(w[0])];
這聲明數組z具有兩倍於數組w的元素。
開發者可以利用常數數組的維數必須是正數的要求,來以巨集的形式實現編譯時聲明:
#define compile_time_assert(cond)
char assertion[(cond) ? 1 : 0]
如果x是一個評估為真的表達式,於是調用:
compile_time_assert(x);
擴展到一個有效的數組聲明(一維)。否則,擴展到一個無效的數組聲明(0維),這個數組聲明產生一個編譯時診斷消息(錯誤或者警告)。
然而,當聲明失敗時錯誤消息的文本對於不同的編譯器是不同的。筆者看到過的消息如『數組必須至少具有一個元素’,或者『無效的腳本或者腳本過大’。
如果幸運,編譯器產生包含數組名的一個消息,例如數組大小『聲明’為零。在那種情況下,它幫助使數組名成為一個額外的巨集參數,如下:
#define compile_time_assert(cond, msg)
char msg[(cond) ? 1 : 0]
然後,你可以使用數組名來描述聲明失敗的原因。例如,如果調用:
compile_time_assert(offsetof(timer, DATA) == 4,}
DATA_must_be_at_offset_4);
造成一個聲明失敗,那麼將可能看到一個錯誤消息,類似於:
size of array 'DATA_must_be_at_offset_4' is zero
如上所述,這個巨集有一個很容易解決的小問題。這個問題是,在某些情況下,數組聲明可能是分配儲存的一個定義。可以將數組聲明轉變為typedef來避免這個問題,如:
#define compile_time_assert(cond, msg)
typedef char msg[(cond) ? 1 : 0]
在相同的範圍內,兩個typedefs不能具有相同的名字,因此必須使用msg參數來給每個typedef一個獨特的名字。如果不願意採用msg參數,那麼可以將數組聲明為外部數組,如下所示:
#define compile_time_assert(cond)
extern char assertion[(cond) ? 1 : 0]
然而,如果採用這種方法,將不能在C++類中使用巨集,因為你不能將C++類成員聲明為外部量。你可以發現編譯器不會對0大小的數組提出『抱怨’。在這種情況下,你可能嘗試將0改變為-1,如下所示:
#define compile_time_assert(cond, msg)
typedef char msg[(cond) ? 1 : -1]
Boost庫(www.boost.org)為C++程式設計師提供了另一種以稱為BOOST_STATIC_ASSERT 的巨集的形式實現編譯時聲明的方法。利用C++模板可以巧妙地實現這個巨集。如果你是一個C++程式設計師,而且你理解模板的特殊性,你可以進行嘗試。
作者: Dan Saks
總裁
Email:dsaks@wittenberg.edu
Saks & Associates公司
訂閱:
文章 (Atom)