//--------------------------------------------------------------------------
// 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)
{
}
|
bloggerads
2013年12月25日 星期三
C++ Class 小記
這裡示範一個 Class 的 sample:
2013年12月23日 星期一
Differential signaling, 差分/動信號
電磁學有一章節專門討論傳輸線,有一種傳輸線叫做雙線式傳輸線目前廣泛用在電子信號傳輸,如SATA的TX/RX, PCIe的DQS, clock, USB...等等
圖片出處 (Eye Diagram Basics: Reading and applying eye diagrams)
這種差分信號的好處是可以抗雜訊,但是設計上就較複雜因為晶片要有能力把信號載到射頻上。
因為是射頻的信號,因此要提到特徵阻抗(Characteristic impedance)這個東西,特徵阻抗是電場和磁場的一個比值,單位是歐姆,他和傳輸線的材質/尺寸相關。若不是高頻使用的傳輸線,則傳輸線上的每一點特徵阻抗都會有差異,造成信號的反射(衰減)。
以SATA為例(下圖),SATA傳輸線的特徵阻抗為100Ohm+/-10%,如果信號不好通常就是調整眼圖(Eye Pattern)的參數Emphasis (pre-emphasis / de-emphasis)和Amplitude。
- Emphasis是信號high, low互相轉換時的斜率
- Amplitude是信號的振幅
圖片出處 (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
請參考以下範例:
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
所以我們有兩種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
--------------執行結果--------------
22334455
22774455
#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 |
- 把傳輸表頭(TH)加至資料以形成資料報。傳輸表頭包含了所使用的協定等傳送資訊。例如:傳輸控制協定義(TCP) 等。 (TCP將資料封包化並組成區段)
- 決定資料的路徑選擇和轉寄,它網路表頭(NH)加至資料報,以形成封包。網路表頭包含了網路資料。例如:網際網路協定(IP) 等。(透過路由(router)找到主機位置(邏輯位址)並決定傳送的路徑), IP分享器也在這層
- 負責網路尋址、錯誤偵測和改錯。(交換器(Switch)分析Frame,並讀取目的端和傳送端的Mac address然後傳送到所對應的連接port)
- 定義一些電器的規格,如電壓,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!
訂閱:
文章 (Atom)


