bloggerads

2013年12月25日 星期三

C++ Class 小記

這裡示範一個 Class 的 sample:

//--------------------------------------------------------------------------
//  In Tui.hpp file
//--------------------------------------------------------------------------
class CTui
{
// 沒有public的部分即為private members
public:
        CTui();  //Constructor
        ~CTui(); // De-Constructor

        void print(char *p);      

};


//--------------------------------------------------------------------------
// In Tui.cpp file
//--------------------------------------------------------------------------

#include "Tui.hpp"

//
//class members of CTui
//
CTui::CTui() 
{
  // new 記憶體, initial 參數...
}
CTui::~CTui() 
{
  // delete 記憶體
}

void CTui::print(char *p) 
{

}


2013年12月23日 星期一

Differential signaling, 差分/動信號

電磁學有一章節專門討論傳輸線,有一種傳輸線叫做雙線式傳輸線目前廣泛用在電子信號傳輸,如SATA的TX/RX, PCIe的DQS, clock, USB...等等

這種差分信號的好處是可以抗雜訊,但是設計上就較複雜因為晶片要有能力把信號載到射頻上。

因為是射頻的信號,因此要提到特徵阻抗(Characteristic impedance)這個東西,特徵阻抗是電場和磁場的一個比值,單位是歐姆,他和傳輸線的材質/尺寸相關。若不是高頻使用的傳輸線,則傳輸線上的每一點特徵阻抗都會有差異,造成信號的反射(衰減)。

以SATA為例(下圖),SATA傳輸線的特徵阻抗為100Ohm+/-10%,如果信號不好通常就是調整眼圖(Eye Pattern)的參數Emphasis (pre-emphasis / de-emphasis)和Amplitude。
  • Emphasis是信號high, low互相轉換時的斜率
  • Amplitude是信號的振幅
下圖介紹眼圖裡面SNR, Jitter等名詞
圖片出處 (Eye Diagram Basics: Reading and applying eye diagrams)

2013年12月8日 星期日

C++ : class內部宣告static member

以下討論在class裡宣告static member 

static member代表他只與class相關,而不與物件相關 (故無法用this指static member)
static member有static function & static function兩種

static function 只能呼叫static variable & static function, 不可呼叫物件層級的function 和 variable。但物件層級的 function 則可同時呼叫static與非static member

請參考以下範例:


#include <stdio.h>
class cTest
{
public:
 static int Num;
 static void Func() {
  //static function 只能呼叫static variable & static function, 不可呼叫物件相關的function 和 variable member
  printf("%d", Num);
 }
};

int cTest::Num = 9; // static variable的初始值必須寫在global area. 

int main()
{
 cTest::Num = 10;
 cTest::Func();
 return 0;
}

2013年12月4日 星期三

NAND flash 與 NOR flash

EEPROM翻成中文叫電子可抹除唯讀記憶體(非常繞舌),最早發明時其構造為NOR結構,所以有人就直接將其稱為NOR flash, 後來因應大規模儲存記憶體的需求,因此再研發了以NAND為結構的EEPROM,很多人就直接稱NAND結構的EEPROM為NAND flash

所以我們有兩種flash, 一種是NAND一種是NOR

NOR的特點是可IC內執行程式(XIP, eXecute In Place),這樣應用程序可以直接在flash內執行,不必再把程式讀到系統的RAM中,實務上主機板的BIOS就是放在NOR(SPI ROM)裡

NAND實務上則是用來放資料用,如USB/EMMC/SSD這些都是使用Nand當存儲結構。

NAND flash的結構單元尺較NOR來的小很多,這幾年NAND的技術突飛猛進,從SLC->MLC->TLC,閘極通道尺寸也從24nm->19nm->15nm,甚至到了3D NAND,主要的Vendor是Toshiba, Micron, Hynix & Samsung

2013年11月29日 星期五

C 巨集用法經驗談

1. 可用來設定Memory address的value。 巨集的參數記得括弧,整個巨集也要括弧以免別人引用時因為C priority問題產生bug

#include <stdio.h>

typedef unsigned int DWORD;

#define SET_MEM_32( addr, val) \
( *(DWORD* )(addr) = (val) )

#define GET_MEM_32( addr)    (*(DWORD* )(addr))

#define MODIFY_MEM_32( addr, mask, val) \
( *(DWORD* )(addr) = GET_MEM_32(addr) & ~(mask) | (val) & (mask) ) 

int 
main()
{
    unsigned char arr[10]={0,1,2,3,4,5,6,7,8,9};

    SET_MEM_32(arr, 0x22334455);
    printf("%x\n",GET_MEM_32(arr));

    MODIFY_MEM_32(arr, 0xff0000, 0x770000);
    printf("%x\n",GET_MEM_32(arr));
    
    return 0;
}

--------------執行結果--------------
22334455
22774455

Internet Overview (網路概論)


https://en.wikipedia.org/wiki/OSI_model
第4層 傳輸層(Transport Layer): Segments = Data +控制資料
  • 把傳輸表頭(TH)加至資料以形成資料報。傳輸表頭包含了所使用的協定等傳送資訊。例如:傳輸控制協定義(TCP) 等。 (TCP將資料封包化並組成區段)
第3層 網路層(Network Layer): Packet = Segments +控制資料
  • 決定資料的路徑選擇和轉寄,它網路表頭(NH)加至資料報,以形成封包。網路表頭包含了網路資料。例如:網際網路協定(IP) 等。(透過路由(router)找到主機位置(邏輯位址)並決定傳送的路徑), IP分享器也在這層
第2層 資料連結層(Data Link Layer): Frame =  Packet +控制資料
  • 負責網路尋址、錯誤偵測和改錯。(交換器(Switch)分析Frame,並讀取目的端和傳送端的Mac address然後傳送到所對應的連接port)
第1層 實體層(Physical Layer) 
  • 定義一些電器的規格,如電壓,Pin腳等等。 (集線器(Hub)就是一個中繼器(repeater), 忠實的把信號傳到每個port上)
----------------------------------------------------------------
NIC (Network Interface Card): 網路介面卡
MAC address: 實體位址,每張網卡都有獨一無二的Mac address,由6個Byte組成
IP address: 邏輯位址,軟體/伺服器assign的, 透過遮罩大概知道這台電腦是透過哪個主機連過來的
IP 位址: 電腦主機在 Internet 上的位址。
IP 位址=網路位址(Network ID)+主機位址(Host ID)
IP分成class A~E各種等級, A 類、B 類和 C 類是商業類使用之位址,可指定給主機

子網路遮罩: 用來判定來源IP和目的IP是否在同一網域的一個判斷位址。
預設閘道位址: 傳送到不同網域時用以決定封包的傳輸途徑。

DNS伺服器位址: DNS 伺服器的用途在於將主機名稱(Host Name)轉成IP 位址。 

TCP和UDP的差異: ﹐TCP 提供的是可靠傳輸﹐傳輸(送)層檢測手續﹐都會在 TCP 中實現而 UDP 不是可靠傳輸,因此相較於 TCP 來說,一大堆必需佔據封包表頭的都可省略來換取更大的 payload。UDP只是一個單方向的網路協定,如果要作可靠傳輸,那麼,其確認機制將從傳輸層退為應用層進行了 (也就是程式本身要提供可靠傳輸機制)。詳細請參考:TCP 與 UDP



(待續)

2013年11月26日 星期二

C# : Class inherits and virtual (override) example


    public class Father
    {
        public Father() { Console.WriteLine("Father Constructor!"); }
        public virtual void WifeAge() { Console.WriteLine("Age is 50, father's wife!"); }
        public void FamilyName() { Console.WriteLine("Family name: Lee"); }
        ~Father() { Console.WriteLine("Father De-Constructor!"); }
        
    }
    public class Son : Father
    {
        public Son() { Console.WriteLine("Son Constructor!"); }
        public virtual void WifeAge() { Console.WriteLine("Age is 30, son's wife!"); }
        ~Son() { Console.WriteLine("Son De-Constructor!"); }
        
    }
    public class Program
    {
        public static void Main(string[] args)
        {
            Father obj = new Father();
            obj.WifeAge();
            Son obj2 = new Son();
            obj2.WifeAge();
            obj.FamilyName();
            obj2.FamilyName();
        }
    }
_/_/_/_/_/_/ _/  OUTPUT  _/_/_/_/_/_/_/_/

Father Constructor!
Age is 50, father's wife!
Father Constructor!
Son Constructor!
Age is 30, son's wife!
Family name: Lee
Family name: Lee
Son De-Constructor!
Father De-Constructor!
Father De-Constructor!