2012年2月1日 星期三

C語言- const 用法

const為constant的縮寫,用來宣告變數並設定初值後「不能」再被修改。
ex. const double = 3.14;

const在指標(pointer)使用中可以表明指標指到data是const or 指標本身是const or 兩者都是

[1] char *p = "Qoo";  /* non-const pointer, non-const data */
[2] const char *p = "Qoo"; /* non-const pointer, const data */
[3] char* const p = "Qoo"; /* const pointer, non-const data */
[4] const char* const p = "Qoo" /* const pointer, const data */

關鍵在於:*與const的前後關係!當const出現在*的左邊(const *),則表示pointer指到的data為常數;反之如果const出現在*的右邊(* const),則表示指標本身是常數

所以在[2]
*p = 10;       /*錯誤*/
*(p + 2) = 1;  /*錯誤*/

在[3]
*p = 2;          /*可以*/
*(p+1) = 10;     /*可以*/
p++;             /*不可以*/

事實上,在The C++ Programming Language中有提到一個簡單的要訣:由右向左讀!!

所以
[2] p is a pointer that point to char, which is const
[3] p is a constant pointer point to char
[4] p is a constant pointer point to char which is const

用const是其中一種固定變數值的方法,但更常用的是用#define。一來可以讓程式碼簡潔,二來可以配合macro,用一個簡單的指令替代多個步驟

References:
[1] Effective C++ clause 21.
[2] http://www.wretch.cc/blog/cwz0205/15360838

2012年1月2日 星期一

Hi-Pot test

Hi-Pot test是一種高壓測試,用來測試絕緣度。測試方式是將一高於正常工作電壓的異常電壓加在產品上測試,透過漏電流的大小來判斷物體的絕緣性是否有達到絕緣的要求,並且這個電壓必須持續一段規定的時間,最後判定只要無絕緣崩潰情形,即算通過此測試。

Reference:
[1] http://tw.knowledge.yahoo.com/question/question?qid=1508081104651
[2] H/P 訓練教材

2011年12月30日 星期五

GPIO (General Purpose I/O)

以CPU而言,上面有密密麻麻的線路外主要就是會有很多的PIN腳,PIN腳可以看做是CPU跟外面溝通的通道。至於有幾隻腳根據不同的CPU規格有所不同。其中每隻PIN腳都會定義它的功能,其中GPIO可以算是其中的一種功能。GPIO就是General Purpose I/O的縮寫。I/O就是input/output。主要為CPU輸入以及CPU輸出的功能。

所謂的input mode就是當CPU想從外面收資料/signal進來的話,就會把這個PIN腳定義為input mode; 反之如果CPU去推資料出去就會把這個PIN腳定義為output mode。
簡單的output mode的例子就如同版子上的LED。好比推1就會亮,推0就會暗,這是最簡單的output mode。input mode通常需要搭配timer去定時polling PIN腳上的訊號是1還是0決定狀態改變了沒有。而這樣其實會增加CPU的負擔

為了解決上面這個問題,但又要能達到相同的事情,我們就會看接PIN腳上的device有沒有support Interrupt。
Interrupt代表CPU不用定時去polling PIN腳上的訊號,而是外部元件「主動」發訊號給CPU而這發訊號給CPU稱之為Interrupt。
這個優點就是CPU不用去做一個timer去polling PIN腳上的訊號,減低CPU Loading也增加了效率。Interrupt可以算是GPIO裡面一個很好用也頗重要的function

Interrupt有分好幾種mode,可以分成Edge Trigger以及Level Trigger
Edge Trigger包括了Rising and Falling Edge Trigger;Level Trigger可以分成High and Low Level。我們可以用下面的圖形來表示。
Note:
1:Rising
2:Falling
3:High
4:Low

Edge Trigger主要是靠波形的變化;Level Trigger則是看絕對的準位。舉個例子,當你設定Interrupt High Level Trigger時,所以當高電位的時候就會發Interrupt給CPU

Interrupt不只是只能用GPIO來做,有些CPU會直接規定某些CPU PIN腳就是Interrupt,而有些為了省PIN腳會跟GPIO共用。這都要看CPU的spec.而定。

2011年12月28日 星期三

DLF (Destination Lookup Failure)

DLF (Destination Lookup Failure)
也就是目的地位置查詢失敗的封包,會在同一個VLAN裡面做flooding

為了預防大量的flooding packet把device打死,所以有Broadcast Storm Control這個feature。不過這feature也可以限制multicast、一般broadcast每秒通過的數量,是per port的設定。


DLF...之前常聽到這名字,但現在終於知道是指什麼

2011年12月27日 星期二

Port authenticator

Port authenticator
IEEE 802.1X有規範。per port的設定。認證過的合法使用者(PC、NB,...etc)可以透過這個port來存取網路。
透過使用者輸入的帳號密碼可以動態決定這個port要加入哪個VLAN(edgeBOX, ex. RADIUS server. 回的packet會帶有這個帳號密碼給它多少VLAN ID的information)

反之如果是認證失敗的話,則會丟入Guest VLAN(至於Guest VLAN是多少可以per port去做個別設定)

至於Guest VLAN有兩種mode可以做設定。分別是port-base還有mac-based mode。port-based mode是指當這個port有第一個人認證成功後,所有經過這個port的packet都assign給它edgeBOX回的VLAN ID(Multi-host);
mac-based mode的話則是per host來看(Multi-secure),當有不同的MAC的裝置連上都個別需要去做認證。


Note:
port authenticator是指認證pass的user可以透過這個port來存取「網路」;AAA的第一個A, Authentication則是透過認證後看user可不可以存取「Switch」。兩者用途跟意義不同。

2011年10月12日 星期三

Flow-control

Flow-control use pause packet in full-duplex operation; back-pressure in half-duplex

/* pause packet */
00 00 00 00 00 02 00 00 00 00
00 01 88 08 00 01 03 E8 00 00
00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00

Reference:
[1]IEEE-802.3x
[2]http://www.pcdvd.com.tw/showthread.php?t=582735

2011年10月6日 星期四

Reserved Multicast MAC Address

From IEEE 802.1ad-2005

spanning tree's reserved multicast address為01-80-C2-00-00-00
LACP為採用slow-protocol的一種feature,故其reserved multicast address為01-80-C2-00-00-02


延伸閱讀:
IEEE Std 802.1D and IEEE Std 802.1Q Reserved Addresses

Reference: IEEE 802.1ad-2005