2013年5月15日 星期三

Data Segment

rodata

變數被定義為const或者是固定字串

text

程式指令的部分

data

有初始值的global variable

bss

沒有初始值的global variable

heap

dynamic memory,透過malloc等function取得的。

stack

local variables

2013年5月13日 星期一

面試必備 -- BIT MASK

Set Specific Bit

value = value | (1 << bit)

#define SET_BIT(x, y) ((x) = (x) | ((1)<<(y)))

Clear Specific Bit

value = value & ~(1 <<bit)

#define CLEAR_BIT(x, y) ((x) = (x) & ~((1)<<(y)))

Inverse Specific Bit

value = value ^ (1 << bit)

#define INVERSE_BIT(x, y) ((x) = (x) ^ ((1)<<(y)))

Get Specific Bit

ret = (value >> bit) & 1

#define GET_BIT(x, y) ((x)>>(y) & 1)

Bit Count

code:
int counter = 0;
while ( input ) {
    counter++;
    input &= (input - 1);
}

2013年5月2日 星期四

棒球英文用語

棒球英文用語

職棒聯盟:

  • CPBL - Chinese Professional Baseball League
  • MLB - Major League Baseball
  • NPB - Nippon Professional League

野手名稱

  • Pitcher - 投手
  • Catcher - 捕手
  • Infielder - 內野手
    • First Baseman - 一壘手
    • Second Baseman - 二壘手
    • Third Baseman - 三壘手
    • Shortstop - 游擊手
  • Outfielder - 外野手
    • Left Fielder - 左外野手
    • Right Fielder - 右外野手
    • Center Fielder - 中外野手
專業術語
  • 安打
    • one-base hit - 一壘安打
    • two-base hit - -二壘安打
    • three-base hit - 三壘安打
    • home run - 全壘打
  • 投球
    • strikeout - 三振
    • walks / base on balls - 四壞

2013年5月1日 星期三

面試必備 -- 數值swap

數值swap

程式碼:

int swap(int a, int b) {
    a = a^b;
    b = a^b;
    a = a ^b;
}

面試必備 -- 計算幾個bit為1

計算幾個bit為1

常見基本面試考題
  • 基本bit mask概念
  • 數學概念
程式碼:

while (input) {
    counter++;
    input &= (input -1);
}      

2013年4月29日 星期一

英文文法 -- 名詞

可數名詞

英文稱為: Countable Noun
字典標 : [C]

  • 單數
    • 一般狀況
      • a dog
    • 一般遇到母音開頭,使用 an
      • an apple
  • 複數
    • 一般狀況
      • dogs
    • 單字字尾是  X, S, CH, SH
      • box > boxes
      • bus > buses
      • watch > watches
      • dish > dishes
    • 單字字尾是 O
      • 可能是 s or es
      • hero > heroes
      • zoo > zoos
    • 單字字尾是 F/FE
      • 可能是直接加 S
        • roof > roofs
      • 可能去掉F 然後加 VSE
        • leaf > leaves
        • wife > wives

不可數名詞

英文稱為: Uncountable Noun
字典標 : [U]
  • a piece of paper.
  • two pieces of paper
  • one cup of coffee
  • two cups of coffee

2013年4月24日 星期三

Assembly格式

Assembly 格式

在assembly寫法上面主要有兩種格式
  • AT&T
  • Intel
主要有下列幾種差異

Source & Destination

從 register A(eax) --> register B(ebx)
  • AT&T :  mov  %eax, %ebx
  • Intel    :   mov ebx, eax

暫存器命名:

  • AT&T: 暫存器名稱前要加 % 符號
  • Intel: 不用加

立即值

  • AT&T:  立即值前面要加 $ 符號
    • mov  $1, %ebx
  • Intel: 不用加
    • mov ebx, 1

間接定址

  • AT&T: 用小括號 "("  ")"
  • Intel: 用中括號 "[" "}"

GCC使用的是AT&T的語法

2013年4月2日 星期二

C Language - Const

Const

const 意味著固定不變的意思。所以當變數設定為const時,此一變數的值是不允許被變更的,換句話說這個值會在初始的時候便決定。

Example


int main(int argc, char **argv)
{
    const int a = 10;
    
    a = 11; // compiler will return an error message

    return 0;
}

Usage

一般使用可能會和pointer一起使用,在判讀上面會有困擾,底下列出幾個比較常出現的寫法。
  1. const int a;
    • a 是int type而且是const
  2. const int *p;
    • pointer p 指向一個const int value 
  3. int const *p;
    • pointer p是const
  4. int * const p;
    • pointer p 指向一個const int value
  5. const int * const p
    • pointer p 指向一個const int value; 而且pointer p是const
以筆者的經驗來說,case 2和case 3比較容易搞混。以case 2來說,我會解讀成const修飾int *p,而*p是代表pointer p指向的記憶體內容。而case 3,我會解讀成const修飾 p這個pointer。
一點心得,有錯歡迎指正。

2013年4月1日 星期一

C語言 -- Volatile

Volatile

volatile按照字面上的意思就是短暫的,容易改變的意思。
這個關鍵字的用法在embedded system上面是具有相當的意義在裡面,算是開發者必備的。



Example:

333.    int *p = REGISTER_005_ADDRESS;
334.    int b, c;
335.    
336.    ...
342.    b =*p;
343.    ...
345.    c = *p;
346.    ...

一般來說 register的值可能一直在變動著,當如同上例般的宣告,compiler的optimization功能可能會把第342行和第345行變成 b = c = *p 這樣子的意思,如此一來就可能違背程式一開始的意思,BUG因此產生。

所以應該改宣告為  volatile int *p = REGISTER_005_ADDRESS;


Conclusion

程式設計者必須要很清楚每個變數取得的用法,而且了解compiler對一般最佳化可能採取的作法為何,並做出適當的宣告。

英文文法 -- 過去完成式

過去完成式

主詞 + had + 過去分詞(Past Participle)

用來表示在過去的某個時間點已經完成的事件。

Example:
  • Tom had already finished his homework when Mom came home.

營業毛利率

營業毛利率

每一塊錢的營收貢獻多少比例的獲利。與一般毛利率最大差別是在於,營業毛利率除了考慮生產的成本,還要加上取得收益之中所有該付出的成本。
( 營業收入 - 一切營業成本 ) / 營業收入 * 100%

2013年2月3日 星期日

英文文法 -- 過去進行式

過去進行式

用來表示"過去時間的狀態"或者"在過去某一個時間點時段正在進行的狀態"

  1. What were you doing at 8 clock last night?
  2. It was raining at 4 clock this morning.
  3. Tim was watching TV, while I was cooking dinner.
  4. Judy was working in Taipei at that time.

和過去式比較

對於結果表示未知(或者是說從句子不能了解結果)

  1. We are building our company last year.  我們去年正在建立了我們的公司 (完成與否未知)
  2. We built our company last year. 我們去年建立了我們的公司

2013年1月13日 星期日

Vim不能使用Backsapace

Backspace不能刪除

當使用vim卻不能使用backsapce刪除字元的時候,請確認
  1. 是否在insertion mode下
  2. 當1無效時,請在vimrc設定 set backspace=2