2010年12月26日 星期日

[食記]川府

0 意見
初訪~川府(芝山店)

這幾天的天氣屬於低溫+短暫陣雨,
加上 Christmas Eve 當天晚上又飄著細雨,
走在路上都覺得寒風剌骨,
這時候就覺得先前已預訂要吃火鍋的選擇是對的! XD

2010年12月24日 星期五

[C]避免使用函式巨集

0 意見
在 C++ 中,可使用 inline function 取代函式巨集的功能。

函式區集有一個非常嚴重的問題:
在定義巨集時,若參數出現不只一次,
就可能不只一次被計算到。

舉例來說:
#define isupper(c) ((c) >= 'A' && (c) <= 'Z')

2010年12月23日 星期四

[C]顯示系統時間以及記憶體資訊

0 意見
在 Embedded linux 平台上面,
有時會發生頻繁使用 script 而造成系統發生問題 (ex. kernel panic, memory dump)
此時在 debug 的時候如果想要印出一些資訊來觀察,
但又要避免使用 script,
就只好使用 c 來實作,
例如原本以 shell script 
date 查詢目前系統時間,
cat /proc/meminfo 查詢目前 LowFree 使用量以及所有記憶體資訊,
就可以用上面的C程式範例來達到與 script 同樣的效果。

2010年12月22日 星期三

[C]求值順序

0 意見
這段程式碼,在大家的平台執行會有什麼樣的結果呢?

2010年12月21日 星期二

求知若飢 虛懷若愚﹣Steve Jobs

0 意見
在 YouTube 看到的影片,跟大家分享!

linux swap file

0 意見
/ $dd if=/dev/zero of=/mnt/sd/swapfile bs=1024 count=2970
2970+0 records in
2970+0 records out
在 sd card 建立一個 2.9MB 的 swap 



/ $ mkswap /mnt/sd/swapfile
Setting up swapspace version 1, size = 3035136 bytes

/ $ swapon /mnt/sd/swapfile

/ $ free
             total         used         free       shared      buffers
 Mem:        62724        44752        17972            0           20
 Swap:         2960            0         2960
查看是否 swap 有配置成功


2010年12月19日 星期日

[路跑]2010 富邦台北馬拉松賽 (9 km)

0 意見
今天(12/19),是富邦台北馬拉松賽的活動日,
這是我第一次報名馬拉松比賽,
前一天晚上借住小晏家,
大概1點多睡著,
4點半就起床了,
5點半搭上芝山站的捷運,
看到車廂內的人右腳都綁著晶片,
感覺真特別,
很像是另類的大型集會,
一來大家全都不認識,
但其實大家的目的地都一樣(台北市政府市民廣場);
尤其是到了市政府站的時候,
捷運的車廂都空了 XDD
開始有人拿起相機拍這擁擠的人潮,
感覺好像跨年才有的氣氛!

2010年12月13日 星期一

[Chrome瀏覽器] Auto-Translate and AutoCopy

0 意見
最近使用 Chrome browser 時,一直有一件事困擾著我
以前在使用 Firefox 的時候,可以安裝 google toolbar,
然後在看某些英文文章時,
滑鼠移到某些單字上面就會出現翻譯,
但現在使用 Chrome,
在英文頁面時,只會問我要不要全文翻譯,
但是也沒辦法安裝 google toolbar (目前只支援 IE, Firefox),
所以我只好上網找看看有沒有其它 plugin 可用。

很幸運,有的!
Auto-Translate: 透過google translate幫你翻譯你所圈選的文字
AutoCopy: 自動複製選擇的文字

2010年12月11日 星期六

[電影]真愛零距離

0 意見

[生活隨拍]士林天母

0 意見
因為星期五下午請了年休假,所以有了空閒在家看書上網,
傍晚大約5點半就出發前往士林,準備等小晏下班,然後一起吃個飯。

[影片分享]38度金門高粱 -給願意挑戰自己的人

0 意見

2010年12月10日 星期五

我的 i9000 8G Android 2.1 (ZWJG5) 更新至 Android 2.2 (ZWJP6 Froyo)

0 意見
今天將 i9000 8G (ZWJG5) 更新至 2.2 (Froyo)

下面是我操作的步驟:

2010年11月30日 星期二

[夜景]住家旁邊的公園

0 意見
今天晚上吃飽飯後,突然想到附近的公園散步
於是就拿著FZ35隨手拍了幾張照片
果然我的類單眼在ISO400就已經慘不忍睹了

2010年11月28日 星期日

[玩樂]東區半日遊

0 意見
今天一大早出門時,剛踏出大門口,看到老天爺賞了個好天氣!

2010年11月26日 星期五

[食記]可可西里青海特色火鍋

1 意見
                                                    因為小晏跟她以前的同事都有買優惠卷
                                                         所以大家就約個時間一起來吃
                                                   剛到門口的時候,因為我拿相機在拍,
                                          有一位剛吃完要離開的客人還問我是不是記者? XDD

2010年11月21日 星期日

台大公館半日遊

0 意見
                   很難得的,爸媽這次特別從嘉義搭高鐵上來台北,除了參加表哥的婚禮外,
                                                   也上來看看大哥大嫂以及小晏。

     今天老天爺也很賞臉的給了一個大晴天,讓我可以帶著爸媽到台大校園以及公館附近走走,
             下午到台大校園時,沿著椰林大道直走,看到盡頭似乎是學生們在拍畢業團體照,
                                                        整個氣氛真的非常熱鬧。

2010年11月2日 星期二

(Vim)modeline設定

0 意見
設定 .vimrc 時,通常我會設定 tabstop=4,
Tab 將會用四個 space 取代;
但是在寫 Makefile 時,
通常必須要使用 Tab 做為開頭,
此時,
為了使用真正的 Tab, 而不想用 space 取代,
我們可以在 Makefile 開頭使用 modeline 設定,
其實,不同格式的檔案,都可以在它們的開頭加上 modeline 設定,
Vim 會去讀取這些控制參數。

ex. 以 Makefile 為例
最上方加上 # vim: set ts=4 sw=4 noet:
記得 # 與 vim 之間要有一個空格。

這樣子在 Makefile 裡面按 Tab 就不會被 space 取代了。

enjoy!



參考網址:http://edt1023.sayya.org/vim/node10.html

2010年11月1日 星期一

(圖片編輯)Ubuntu安裝Gimp

0 意見
sudo apt-get install gimp gimp-plugin-registry

(設定開機順序)以wubi安裝Ubuntu

0 意見
以我的電腦 Windows XP SP2 為例
使用 wubi 安裝 Ubuntu 10.10
每次重新開機時
會先看到一個 Windows 多重開機選單
第一個選項(預設)為 Windows 系統
第二個才是 Ubuntu
想要設定預設從 Ubuntu 開機要話要怎麼做呢?

1. 登入 windows
2. 至「我的電腦」按右鍵->「內容」->「進階」
3. 然後至「啟動及修復」的項目內,應該可以看到一個下拉選單可以設定預設作業系統
4. 選擇第二個 Ubuntu 為預設,另外還可以選擇等待時間

然後就可以跟 windows 說掰掰了...XD

2010年10月31日 星期日

(聊天通訊)Ubuntu安裝Emesene與Skype

0 意見
類似 msn 的軟體,在 Ubuntu 我是選擇 Emesene
直接
sudo apt-get update
sudo apt-get install emesene 即可。

至於 Skype,我是參考 Tsung's blog 進行安裝。
http://plog.longwin.com.tw/news-unix/2007/01/11/ubuntu_skype_setup_2007

sudo vim /etc/apt/sources.list
加入此行 deb http://download.skype.com/linux/repos/debian/ stable non-free
sudo apt-get update
sudo apt-get install skype

2010年10月24日 星期日

(網頁瀏覽)安裝Google Chrome

0 意見
1. google 搜尋「Chrome channel」,
下載google-chrome-beta_current_i386.deb (依個人喜好)

2. sudo dpkg -i google-chrome-beta_current_i386.deb

3. 安裝「Xmarks」 http://www.xmarks.com/
它可幫助我們在不同電腦、不同瀏覽器之間同步書籤。
可在 Xmarks 的「選項」功能設定自動同步,
這樣以後書籤的修改,隨時隨地就可以更新了。

2010年10月18日 星期一

[Terminal] LilyTerm

0 意見
A light and eazy-to-use terminal emulator 

參考此網址:
http://lilyterm.luna.com.tw/en/download.html

然後修改 /etc/apt/sources.list 加入來源
接下來,
apt-get update
apt-get install lilyterm 就可以安裝 testing version 的版本了。

2010年10月8日 星期五

基本svn流程

0 意見
1. install svn client
2. create svn respository
3. Check out
4. create project
5. Add project to respository
6. Commit project

2010年10月5日 星期二

王牌天神2-電影中蠻令人感動的對話

0 意見
今天在 gmail 翻到3年前老哥寄給我的信,
裡面寫了王牌天神2的一些感動人心的對話,
跟大家分享。


上帝與 Evan 老婆的對話:

如果有個人希望
自己可以更有耐心

你認為上帝會
直接賜予他耐心呢

還是給他一個
培養耐心的機會

2010年9月29日 星期三

OOM problem

0 意見
觀察 /proc/meminfo,
之前在某些專案遇到 Out of memory 的問題,
可以試著察看 Committed_AS 這個欄位,
系統有可能在 OOM 的情況下,
砍掉任一支吃最多ram的程式,
進而導致系統不穩定。

2010年9月21日 星期二

買手機要測試的項目

0 意見
確認一下手機的功能是否都正常,有問題七天內要拿去換:
Bluetooth O
多點觸控(縮放) O
Wi-Fi 連線 未測
3G 連線 O
通話 O
到 Market 下載軟體 O
喇叭聲音功能 O
照相功能 O
錄影功能 未測
GPS功能 未測
耳機功能 未測
充電是否正常 O

我的i9000安裝了哪些軟體

0 意見
記錄我在i9000安裝軟體的清單:

2010年9月18日 星期六

i9000入手

0 意見
就在今天
凡那比颱風登台的前夕
跟小晏一起到myfone門市買了兩支i9000
之前為了選擇手機也做了不少功課
買完手機後
要開始停止看新手機的任何消息了 XD
準備要好好研究怎麼把這支手機的功能發揮到最大
這將是陪伴我未來好幾年的手機
我會好好珍惜的

2010年9月16日 星期四

XML資料儲存(關於&符號)

0 意見
最近遇到在 xml 檔案中,
某個 Tag 儲存的內容含 & 符號,
會造成 xml 檔案的 Tag 錯亂。

錯亂的結果為 & 位置出現的前後內容都被斷開分別儲存,
但是 Tag 是完全不對稱的,
所以讀取這個錯亂的 xml 檔案就會出問題。

google 後發現某些符號對 XML 來說是有特殊意義的,
所以必須特別處理。

例如「&」符號如果要儲存,要先取代成「&amp;」再儲存。

其它查到的符號如下:
< 應該取代成「&lt;」
> 應該取代成「&gt;」
& 應該取代成「&amp;」
' 應該取代成「&apos;」
" 應該取代成「&quot;」
斷行符號 應該取代成「&#13」

2010年9月10日 星期五

[YouTube影片] iPhone4 vs HTC EVO

0 意見
這個從 YouTube 看到的影片,很有趣,跟大家分享。


中文字幕版:

2010年9月8日 星期三

單向鍊結串列

0 意見
離開學校後,幾乎所學的東西都還給老師了,
工作時雖然學到了一些 domain knowledge,
但是沒有了以前的資料結構、演算法做為工具,
寫程式總覺得很空虛,
所以有時間就稍微複習一下以前的資料結構,
範例可能寫得不好,
歡迎大家討論指教。

Linked list 算是最常用到的一個資料結果,就先拿它來做練習吧!
list.h

list.cpp

 main.cpp

Makefile


執行結果:
$ list
->Constructor
Total: 9
 Cassia Gary Louis Kanru Nami Cyt Jane Hank

Delete the node that name is "Cassia"
Total: 8
 Gary Louis Kanru Nami Cyt Jane Hank

Delete the node that name is "Kanru"
Delete the node that name is "Gary"
Total: 6
 Louis Nami Cyt Jane Hank

->Destructor

2010年9月2日 星期四

在Vim中將 source code 轉換成 html

0 意見
今天 google 時突然看到在 vim 中將 source code 轉換成 html 的指令,
在指令模式下輸入 :TOhtml
然後存檔即可。

e.g.
程式檔名為 test.cpp
透過 :TOhtml 指令產生並存檔,html檔名為 test.cpp.html

而且原本在 Vim 裡面的 color scheme 以及 color 都會保存在 html 檔案內,
大家可以試看看。

2010年8月22日 星期日

(電影)天龍特攻隊

0 意見
英文片名:A Team

因為即刻救援的主角Liam Nesson也在這部電影中擔綱演出
所以讓我頗為期待
先前 Taken 就看了兩遍
這次看了 A Team 果然也是沒有令人失望
兩個小時的片子就這麼過去了
四人小組果然默契十足
一次又一次的完成任務
喜歡看劇情片、動作片的人應該會喜歡

2010年8月15日 星期日

(電影)辣妹愛宅男

0 意見
今天跟小晏又看了另一部電影,
中文片名:辣妹愛宅男
英文片名:She's Out of My League

感覺還蠻好看的,
整部看起來感覺沒有冷場,
很輕鬆有趣,
果然適合收假前觀賞 XDD

這部電影的女主角 Alice Eve 長得好像金髮尤物的 Reese Witherspoon,
可能都是金髮美女的緣故吧。

搜尋了一下,原來劇中女主角的父母是她現實生活中的親生父母,
而且也都是演員,
真的很有趣。

2010年8月14日 星期六

(電影)神偷奶爸

0 意見
因為有好長一段時間沒有到電影院看電影了,
今天心血來潮就找小晏一起到天母美麗華看電影,
因為時間很突然,
就剛好看了神偷奶爸(Despicable Me)這部卡通片,
果然一整個廳裡面幾乎都是爸媽帶著小朋友一起來看這部片的,
整部片其實都還蠻好笑的,
尤其是小小兵實在是很可愛,
目前也看了幾部電影的預告片,
其實都還蠻不錯,
之後9/10上映的惡靈古堡4應該也會去看,
畢竟是陪伴大學以及研究所時間的電影系列啊。

隨便一扯就離題了...
結論是神偷奶爸這部片子適合父母與小朋友們一起欣賞,
話說坐我後面的那位爸爸,
為什麼很多笑點你反而都笑得比你兒子還誇張呢? XDD

2010年8月12日 星期四

SVN basic command

0 意見
目前在公司跟同事開始使用svn,
記錄一下用過的指令與心得。

windows: TortoiseSVN
ubuntu: svn-workbench

Basic funcion:
Example.
1. check out
svn co http://192.168.0.4/svn/

2. commit
svn ci

3. update
svn up

4. add
svn add filename/directory

5. mv (修改檔名,但之前記錄還要留下)
svn mv filename new_filename

6. revert (還原這次的修改,回到前一版的檔案狀態)[未commit前可用]
svn revert file/directory

7. log
svn log
svn log -l 10 (顯示10筆最新log)
svn log -c 100 (顯示 revision 100 的 log)
svn log -v 100 (顯示 revision 100 的詳細 log)

8. rm
svn rm http://192.168.0.4/svn/src/driver

---------------------------------------
svn 檔案資訊
? 此檔案不存在 svn 裡
A 此次新增的檔案
C 此檔案已經有人改過,合併不成功,需人工介入
D 此次移除的檔案
M 此檔案有修改過
U 此檔案有被更新過


Reference:
1.
Tsung's Blog: SVN 基本指令教學
http://plog.longwin.com.tw/my_note-programming/2007/07/10/svn_tutorial_2007

Android, iOS 手機比較

0 意見
因為之後會購買智慧型手機,把最近看上的幾支手機做個比較:
手機 Samsung i9000 HTC Legend Apple iphone3gs
平台 Android 2.1 Android 2.1 with HTC Sense iOS 4
CPU 1GHz 600MHz 600MHz
RAM 512M 384M 256M
螢幕 Super AMOLED 4" AMOLED 3.2" 3.5"
相機 500萬畫素(無閃光燈,但有 VGA 視訊電話鏡頭) 500萬畫素(具備自動對焦及閃光燈) 300萬畫素
藍芽 支援藍牙 v 3.0 / USB v2.0 傳輸介面 Bluetooth® 2.1,含 EDR (Enhanced Data Rate) Bluetooth 2.1 + EDR 無線技術
數據機 (Tethering) 可透過 DLNA 技術連接內部裝置,進行跨平台傳輸 網際網路共用,透過 USB 應該可以,不確定

2010年7月31日 星期六

gVim 7.3b lang en error

0 意見
使用的是 windows 的版本
目前解決的方式是修改 _vimrc
將 lang mes en 移到檔案的最開頭
且後面不再設定 lang en
目前修改後看起來是正常的

2010年7月13日 星期二

First Makefile example

0 意見
CC=arm-linux-gcc
CFLAGS= -Wall -O2 -march=armv4 -mtune=arm9tdmi
USER_SRC=/usr/src/arm-linux-2.6
INC+=-I$(USER_SRC)

%.o: %.c (表示利用 pattern rule 來做一些自訂的內隱規則)
$(CC) $(CFLAGS) -c -o $@ $< $(INC)

% : 表示所有相對於後面先決條件的檔名的意思,
不是*,
因為它有一對一的關係,
例如 hello.o 就要找 hello.c;
表示所有遇到 .o 的 target,去找相對應的 .c,
如果找不到就不做下去了
$@ : 目前的目標項目名稱
$< : 代表目前的相依性項目
$*: 代表目前的相依性項目,不過不含副檔名

2010年7月7日 星期三

(輸入法)Ubuntu 安裝無蝦米

0 意見
sudo apt-get update
sudo apt-get install gcin
sudo im-switch -s gcin
wget http://edt1023.sayya.org/gcin/noseeing-12.tar.gz
tar zxvf noseeing-12.tar.gz
mkdir ~/.gcin
mv noseeing.gtab ~/.gcin

2010.10.31 新增
1. 要注意,上述的動作請用一般user帳號進行操作,不要切換至root
2. 如果切換至root, 有可能發生按右鍵「設定gcin」,會無法設定,工作列上的 gcin icon 會消失

2010年6月16日 星期三

First Qt program - Hello

0 意見
程式碼如下:(參考良葛格Qt4範例)


qmake -project: 產生 .pro 專案檔
qmake: 產生 Makefile
make

然後切換至 debug 目錄
執行 hello

執行結果:


Learning Materials:
Tutorials
http://doc.qt.nokia.com/4.6/tutorials.html

How to Learn Qt
http://doc.trolltech.com/4.6/how-to-learn-qt.html

All Overviews and HOWTOs
http://doc.trolltech.com/4.6/overviews.html

API References
http://doc.trolltech.com/4.6/index.html

Qt 環境配置 [Windows]

0 意見
1. 下載 MinGW - Minimalist GNU for Windows
網址:http://sourceforge.net/projects/mingw/files/

安裝下列三者:
a. MinGW base tools
b. g++ compiler
c. MinGW Make

設定環境變數:
C:\MinGW\bin

MinGW base tools 包含下列項目:


2. 下載 QT Framework
網址:http://qt.nokia.com/downloads/


設定環境變數:
C:\Qt\4.6.3\bin

執行開始功能表中 Qt 資料夾
(預設名稱為 "Qt by Nokia v4.6.3 (OpenSource)")裡的
"Qt 4.6.3 (Build Debug Libraries)",
以建立 Debug Library。
(這個過程可能需要2個小時以上)


build成功後,如下圖:



相關連結:
http://program-lover.blogspot.com/2008/09/installing-qt-on-windows.html

2010年6月8日 星期二

message queue

0 意見
1. msgQ很像fifo, 但是更有效率。
2. 讓兩個不相關的程序可以傳送資料。
3. 可免除同步化和擱置的問題。

sys/msg.h
sys/types.h
sys/ipc.h

int msgctl(int id, int command, struct msgid_ds *buf):
控制函數 (IPC_STAT, IPC_SET, IPC_RMID)

int msgget(key_t, int msgflg):
產生和存取 msgQ (IPC_CREAT)

int msgrcv(int id, void *msg_ptr, size_t sz, long int msgtype, int msgflg):
從 msgQ 取出訊息

int msgsnd(int id, const void*msg_ptr, size_t sz, int msgflg):
增加一個 msg 至 queue
struct msg {
long int type;
/*the data you wish to transfer*/
char data[MAX_SIZE];
}
第三個參數 sz, 是 msg_ptr 的大小, 但是不包含第一個 long int
第四個參數 msgflg 如果含 IPC_NOWAIT, 則會立即回覆

舉例來說,
如果伺服器與客戶端要溝通,雙方可以各有一個 msgQ,
而如果有很多客戶端,如果使用大量的 msgQ,可能會較浪費;
此時可以試著將第一個 type 欄位拿來記錄客戶端的 ID,
用來區別要送到哪個客戶端;
而每個客戶端也可以抓取屬於他們自己的訊息,
而不會動到其它客戶端的訊息。

socket programming - select

0 意見
socket介面其實很像pipe,使用方式很雷同,但是還可以跨越網路通訊。

平常在實作中,常使用無窮迴圈做 busy wait,然後掃描是否有需要處理的事件;
但是這樣的方式較耗費CPU時間。

sys/types.h
sys/time.h
現在,可以試著使用 select() 系統呼叫,
可以同時處理很多檔案描述子(就像是很多客戶端),
但是沒有任何輸入/輸出時,
是處於擱置狀態。

select() 在 fd_set 的結構上運作,
我使用過的例子是設定 socket 為 Non-Block 模式,
然後 select 設定 Timeout 時間,
如果 time out 時間過了仍然沒有任何事件發生需要處理,
select() 也會回覆。

select() 回傳 -1 代表失敗,並會設定errno說明錯誤。
藉由 timeout 的管理,如果發生 time out,select() 會回傳0。

不多說,來看個例子吧!

2010年5月30日 星期日

天空

0 意見

星期五早上一如往常的走路上班,
但是那天剛好身上帶著相機,
在走路的同時,看著藍天白雲,
心情頓時變得很好,
如果能躺在一望無際的草原或沙灘上,
然後盡情的欣賞無邊無際的天空,
該有多好呀!
當天拍了一張照片跟大家分享!

2010年5月17日 星期一

三芝一日遊

0 意見
寶貝與學妹~

我家寶貝~長髮時有人說像蕭亞軒,短髮有人說像賴雅妍...XD

我與小晏


三芝~淺水灣~

雙連-三五水餃

0 意見


捷運雙連站2號出口,出來後往左手邊走,大約2分鐘就到了,就在麵包店旁邊。
每次去都是吃10個水餃(50元),有時再搭一碗酸辣湯(20元),就很滿足囉。

2010年5月3日 星期一

FIFOs

0 意見
利用FIFO讓兩個不相關的程式也可以交換資料。

引用
sys/types.h
sys/stat.h

所謂FIFO其實就是檔案,用open, close分別開啟與關閉一個FIFO。
open 必須傳入FIFO的路徑名稱。

FIFO 有 Block, NonBlock 模式可供選擇,依個人需求。

☆ 在 linux 下,process被擱置時是不會消耗 CPU 資源,所以使用 FIFO 時,這樣的同步方式是非常有效率的。

可以試著寫一個 daemon 與 client 利用 FIFO 溝通,
分為 write 與 read (request),
但是 read 的時候,
每個 client 最好能有自己的 FIFO,
以免資料被另一個 client 讀取造成錯誤(NonBlock模式下),
當然如果是 Block 模式就沒有此問題了。

由於 i2c bus 是單工的,
同一時間處理一個 command,
如果有很多 device 要做 i2c read/write,
也可以考慮統一把 i2c 讀寫的動作丟給一個專門負責的 daemon,
一來可以統一介面好維護,
再來是 i2c 的讀寫可以保證同一時間只處理一個,
不用擔心 i2c 仲裁的問題。

2010年4月14日 星期三

cscope

0 意見
find . -name "*.h" -o -name "*.c" -o -name "*.cpp" > cscope.files
cscope -bqkR

然後可以至 vim 去載入 cscope.out,
R 表示會搜尋子目錄

如果專案很大,或是涉及到 linux kernel 時,
我不曉得 cscope 處理的時間會不會很久;
同事是建議可以用 eclipse,
而且 IDE 的操作據說也很方便,
我不曉得 eclipse 遇到相同的情況是怎麼去建立索引的,
不過 trace code 時必須快速在 function 間跳來跳去,
所以一個好的工具的確是很重要。

青菜蘿蔔每個人各有喜好,
目前我的專案都還不是很大,
所以 vim + cscope + taglist 已足夠應付我大部份需求了。

8051 Timer

0 意見
8051的計時計數器應用我只使用過計量暫存器,
主要的控制流程為:
1. 初始化 Timer 的相關設定,設定 counter 初始值;
我使用的是 Mode 2 的工作模式,所以 counter 的最大值為256,
當我把 TH0, TL0 都設為 255 時,
表示每個 CPU Cycle 都會產生 Interrupt;
當知道每個 CPU Cycle 的時間後,
其實就可以推算到底 TH0, TL0 要設為多少(取決於你要多久後發生中斷)

2. 在 timer0 中斷副程式中,
還可以維護另一個 counter 變數(軟體控制),
上述1.是硬體的timer,
兩層 counter 的機制,
可以用來使一些應用,
ex. 馬達控制、GPIO模擬波形、...等

2010年4月12日 星期一

GPIO Setting

0 意見
最近在寫 Micron firmware,
在產品上很常看到 GPIO 的一些應用,
以及與 Main chip 的 i2c 溝通。

在設定 GPIO 的 Pin define 時,
我們必須指定這支 pin 的用途(bi-directional, push-pull, input only, open-drain);
雖然是念資工的,
但是電路圖其實我也只看得懂大概,
示波器也只會量測波形的 high / low 而已,
以前學校的老師應該會覺得很難過吧 ^^"

目前我也只用到 input only, bi-directional 的設定;
但是一直不了解 push-pull, open-drain 的差別,
google 找到的說明感覺比較偏硬體的解釋,
寫軟體的人好像很難懂(我是說我自己...XD),
所以如果有哪位網友有簡潔的方式可以教會我的,
還煩請分享一下。
0 意見
列出自己較常用的 vim plugin:

autocomplpop.vim
cscope_maps.vim
minubufexpl.vim
NERD_tree.vim
taglist.vim

2010.11.1 補充
在Ubuntu,先安裝 exuberant-ctags,搭配 taglist 使用

Ubuntu 與 Debian 環境下的 eclipse 有些按鍵無法動作

0 意見
平常用 Vim 習慣了,
但是因為最近同事在推廣 eclipse 的好用之處,
所以我就裝起來試試看,
結果在創建專案時,
遇到 Next / Cancel / Finish 的按鍵沒有作用的現象;
上網 google 後,
參考 http://softsmith.blogspot.com/2010/02/eclipse-button-ubuntu.html (軟體工匠) 的教學,
在 Ubuntu 上面已經 ok 了,
但是我在公司的 Debian 居然還是一樣不正常 ="=,
(後來發現把Debian重開後,就正常了!)
所以在公司還是繼續用 Vim ^_^

筆記一下(解法):
#!/bin/sh
export GDK_NATIVE_WINDOWS=true
./eclipse

2010年3月27日 星期六

8051 review

0 意見
下面為先前複習8051的一些筆記,主要內容來自以前所買的一本書(例說89S51-C語言)

Memory Structure
● ROM
內建 4K, 外接最大 64K(含內建4K)
有一個角位要指定是否要使用外部記憶體(接高準位或接地)
CPU Reset後,程式將從程式記憶體0000H位置開始執行,如沒遇到跳躍指令,則沿著程式記憶體順序執行
● RAM
資料記憶體與程式記憶體是分開的獨立區塊,因此,兩者的位址並不衝突
內建128bytes, 外接最大 64K
0000H~007FH的128bytes:可直接定址或間接定址
● 暫存器庫
0000H~001FH的32個位址為暫存器庫(Register Bank)
0000H~0007H為 RB0
0008H~000FH為 RB1
0010H~0017H為 RB2
0018H~001FH為 RB3
----------------------------------------------------------------------------------------------------------
每個暫存器庫都包含 R0,R1, ..., R7等8個暫存器,而同一時間只能使用其中一組暫存器庫
----------------------------------------------------------------------------------------------------------
暫存器庫的切換,可以PSW(Program Status Word)的RS1, RS0來決定
----------------------------------------------------------------------------------------------------------
CPU Reset, 系統的堆疊指標SP指向07H位址,所以資料存入堆疊時,將從08H開始。
為了避免衝突或不必要的錯誤,通常會把堆疊指標移到30H以後的位址
----------------------------------------------------------------------------------------------------------
● 可位元定址
0020H~002FH的16個位元組為可位元定址區, 通常存取時是byte為單位
----------------------------------------------------------------------------------------------------------
可位元定址則是指定存取一個位元(bit)
----------------------------------------------------------------------------------------------------------
● 一般資料與堆疊區
0030H~007FH的80個位元組位址為一般資料存取及堆疊區
----------------------------------------------------------------------------------------------------------
由於 CPU Reset 後,堆疊指標指向07H,為了確保資料安全性與程式執行正確,
最好能將堆疊指標移至本區
----------------------------------------------------------------------------------------------------------
● 0080H~00FFH的128bytes為SFR(Special Fucntion Register),可直接定址
這些位置的宣告放在 Keil C 提供的 reg51.h header file (不用特別去記)
----------------------------------------------------------------------------------------------------------
SP(Stack Pointer register), First In Last Out
PCON(Power Control register): 設定CPU電源模式
TCON(Timer/Counter Control register)
TMOD(Timer/Counter Mode Control register)
TL0,TH0為第一組計時/計數器(Timer 0)的計量暫存器
SCON(Serial Port Control register)
IE(Interrupt Enable register)
IP(Interrupt Priority register)

Timing analysis and reset

Clock 是整個系統運作的依據

ex. 8051 定義 clock 為 0 ~ 24 MHz, 表示只要不超過 24 MHz 都是 ok

至於要不要使用最高的頻率,需視程式複雜性而定

機械週期:含幾個 clock pluse (ex. 1 machine cycle contains 12 clock pluse)

12MHz -> 一個clock pluse 週期為 1/12 微秒, 因此1個 machine cycle 含12個 clock pluse = 12 x 1/12 = 1微秒

在8051的所有指令中,只有乘法與除法需要4個machine cycle, 其餘指令都能在1~2個machine cycle 完成

8051 reset: 將高準位加到 reset 接腳超過2微秒

Develop process and tools

「硬體設計」與「軟體設計」並行

硬體設計 target board

軟體設計,然後應用實體模擬器(In-Circuit Emulator, ICE),載入可執行碼,然後在target board進行實體模擬

如果軟、硬體設計無誤,可以實際燒錄

tools: Keil C 的整合開發環境

introduce Keil C

常數:在指定記憶體位置,放置固定不變的資料
變數:在指定記憶體位置裡的資料是可變的

Data Type
char, 8 bit, -128~+127
unsigned char, 8 bit, 0~255
enum, 8/16 bit, -128~127/-32768~32767
short, 16, -32768~32767
unsigned short, 16, 0 ~ 65535
int, 16, -32768~32767
unsigned int, 16, 0~65535
long, 32,
unsigned long, 32,
double, 32
void, 0

8051 Data type
bit, sbit, sfr, sfr16, idata(間接定址)

bit, 1 bit, 0/1 --> 0x20~0x2f之間的位址
sbit, 1 bit, 0/1 --> 0x20~0x2f之間的可位視定址記憶體,或 0x80~0xff的SFR
ex.
char bdata scan;
sbit input_0 = scan^0; (表示第0位元)

ex.
sfr P0=0x80;
sbit P0_0 = P0^0;

sfr, 8 bit, 0~255
sfr16, 16 bit, 0~65535

記憶體形式
code -> 程式記憶體 -> 0x0000~0xffff(64k)
data -> 直接定址的內部資料記憶體 -> 0x00~0x7f (128)
idata -> 間接定址的內部資料記憶體 -> 0x80~0xff (128)
bdata -> 位元定址的內部資料記憶體 -> 0x20~0x2f(16)

void 中斷副程式名稱(void) interrupt 中斷編號 using 暫存器庫
8051 只有使用 0 ~ 4 的中斷編號
0: INT0
1: Timer 0

認識中斷
好端端的幹嘛中斷?其實是為了提升效率!
8051提供5個中斷:外部中斷INT0, INT1, Timer0, Timer1,以及串列埠中斷UART(RI/TI)

外部中斷:TCON, IT0/IT1, IE, IP
計時計數器中斷:若是計時器中斷,CPU將計數內部的時鐘脈波,而提出內部中斷
若是計數器,CPU將計數外部的脈波,而提出內部中斷