namespace List { class Program { static void Main(string[] args) { List<int> list = new List<int>(new int[] { 19, 23, 29 }); int index = list.IndexOf(23); // Check if 23 Exists. Console.WriteLine(index); index = list.IndexOf(10); // Does not exist. Console.WriteLine(index); list.Add(35); list.Insert(1, 40); list.Remove(23); // RemoveAt(index) method, or the Remove(obj) list.RemoveAt(0); // RemoveAt(index) method, or the Remove(obj) foreach (int x in list) { Console.WriteLine(x); } Console.ReadLine(); } } }
bloggerads
2015年12月31日 星期四
C# : algorithm "List" sample code
C# : algorithm "Dictionary" sample code
The following sample code was searched from internet, It's a good example to show how C++ map work on C# as Dictionary
// Algorithm map namespace Map { class Program { static void Main(string[] args) { // Use Dictionary as a map. var map = new Dictionary<string, string>(); // ... Add some keys and values. map.Add("cat", "orange"); map.Add("dog", "brown"); // ... Loop over the map. foreach (var pair in map) { string key = pair.Key; string value = pair.Value; Console.WriteLine(key + "/" + value); } // ... Get value at a known key. string result = map["cat"]; Console.WriteLine(result); // ... Use TryGetValue to safely look up a value in the map. string mapValue; if (map.TryGetValue("dog", out mapValue)) { Console.WriteLine(mapValue); } } } }
2015年12月30日 星期三
C# : The difference between C# and C in initializing a struct array
The difference between C# and C in initializing a struct array
// C# struct st { public int x; public int y; } public static void Main(string[] args) { st [] o = new st [] { new st { x=2, y=3 }, new st { x=3, y=4 } }; } // C/C++ struct st { int x; int y; }; int main() { st o[] = { {.x=2, .y=3}, {.x=3, .y=4} }; }
2015年12月29日 星期二
ACPI: Power Management
ACPI: Advanced Configuration & Power Interface
ACPI分別對系統(Gx), 周邊裝置(Dx), 睡覺層級(Sx), CPU(Cx) 定義電源層級, 如下
1. Gx (Global state, 整個系統) :
ACPI分別對系統(Gx), 周邊裝置(Dx), 睡覺層級(Sx), CPU(Cx) 定義電源層級, 如下
1. Gx (Global state, 整個系統) :
- G0 = Working state (C0~C3)
- G1 = Sleeping state (S2~S4)
- G2 = Soft off (S5)正常關機,電源還插著因此主機板還有standby power,可被外部如LAN喚醒開機
- G3 = 拔電源(Mechanical off)
- D0 = 正常運作
- 耗電 D1 > D2
- D3 = 斷電
2015年12月24日 星期四
x86 spec / Bios 常見術語
[ CPUID ]
CPUID 是 80486 CPU 新增的一個指令,它的用途在於鑑別 CPU 種類或提供 CPU 特性,讀取方式如下:
void cpuid (DWORD idx) // idx是index, 不同index得到不同資料
{
_asm
{
mov eax, idx
cpuid
}
// eax, edx, ecx,...值為CPU相關的資訊
}
|
Check fingerprint of SSH public key (Linux command)
//
// Check SSH public key fingerprint
//
[root@martin Desktop]# ls /etc/ssh/*key*
/etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_ed25519_key /etc/ssh/ssh_host_rsa_key.pub
[root@martin Desktop]# ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
2048 99:d1:36:00:44:0a:cb:70:83:c8:21:76:c5:2a:d7:d9 (RSA) // fingerprint
// Check SSH public key fingerprint
//
[root@martin Desktop]# ls /etc/ssh/*key*
/etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_ed25519_key /etc/ssh/ssh_host_rsa_key.pub
[root@martin Desktop]# ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub
2048 99:d1:36:00:44:0a:cb:70:83:c8:21:76:c5:2a:d7:d9 (RSA) // fingerprint
2015年12月22日 星期二
pscp (putty) : Transfer data between Windows / Linux
Step 1: Install putty, I use pscp command in putty in Windows side (client)
sudo apt-get install openssh-server openssh-client
My Linux configure ---> IP: 111.111.111.111,
Step 2: Install openssh-server openssh-client in Linux side (server)
Step 3: Demonstrate a example (The default path in Linux is Home)
# I am in windows (client), trying to copy file e:\MyFile.xxx from / to Linux(server)
My Linux configure ---> IP: 111.111.111.111,
Admin_Name/Password: MartinLee/8888,
file at Home/Documents/MyFile.xxx
file at Home/Documents/MyFile.xxx
2015年12月7日 星期一
ACPI: APEI (ACPI Platform Error Interfaces)
ACPI: OS和Bios溝通的介面,APCI定義有3個Runtime元件(ACPI Registers/ACPI Bios/ACPI Tables)
OSPM: 支援ACPI規範的OS
ACPI Bios: 支援ACPI規範的Bios
OSPM: 支援ACPI規範的OS
ACPI Bios: 支援ACPI規範的Bios
2015年12月5日 星期六
UEFI : programming notes
UEFI一共分成SEC->PEI->DXE->BDS->TSL->RT->AL這幾種階段。
我們會將晶片的一些driving 值寫在PEI stage。DXE階段大部分Bios Vendor都有提供相對應的driver。目前只有碰到為了寫Option Rom或做實驗才針對這個device去寫DXE driver。
焦點回到PEI->DXE這兩個關鍵的階段並列出一些重要的觀念:
1. 在boot時,PEI的階段基本上會有兩條路,一條是正常開機呼叫到的function,另一種則是S3 resume呼叫到的function,而Bios 在S3不做DXE init。因此如果是為了加code來patch 問題,必須知道patch的點
2. PEI 裡面的程式都是叫做module, PEIM, 這些module有些是有相依性的。PEI和PEI互相溝通的橋梁就是PPI,透過這個interface, (*PeiServices)->LocatePpi(), 可以去呼叫已被安裝的service以及去讀取外部的參數
3. 在PEI到DXE時,會透過HOB, (*PeiServices)->GetHobList去得到由PEI階段pass過來的資料
4. 在x86架構就是使用PCI架構及其定義的三種空間, (CFG space / MMIO / IO space),基本上掌握住這三種空間的access方式,加code就不會太難。在早期legacy Bios + DOS的年代要access就是: MMIO 透過指標,IO及CFG space透過IN/OUT指令就可以完成了。UEFI的架構則最好是透過PEI service/ DXE protocol來做。DXE的部分就是使用 EFI PCI IO PROTOCOL 這個protocol
2015年12月3日 星期四
MSI Capability (0x05) 和 MSIX Capability (0x11)
2015年12月1日 星期二
SMBus (System Management Bus)
X86架構下要access SMBus device,可以透過 SMBus Controller (D31:F3)的IO Base address ,Intel定義這個IO位置在PCI configuration space的0x20~0x23
從0x20~0x23得到SMBus IO Base address後,主要是操作下列0~7 offset IO registers就可以完成Byte/Word/Block command的R/W
訂閱:
文章 (Atom)