2012年8月30日 星期四

DMA, Direct Memory Access

三種將資料在I/O間傳送的方法有
1. Polling
2. Interrupt-driven I/O
3. DMA(Direct Memory Access)

Polling:最簡單的方式讓I/O device與CPU溝通。I/O device只要將information放進status register,CPU會周期性的檢查並取得information來得知需要服務的device。
Interrupt-driven I/O:利用interrupt的機制,當一個I/O device需要服務時,會發出interrupt來通知CPU。一個I/O interrupt對於指令的執行是asynchronous,Control unit需要在執行一個新指令時檢查是否有pending I/O interrupt。I/O interrupt也會傳達更多訊息,如哪個device發出的interrupt和它的priority。

DMA(Direct Memory Access):提供一個device controller,讓I/O device能夠直接在記憶體做資料的傳輸,不需要CPU的參與。
在同等程度的處理器負擔下,DMA是一種快速的資料傳送方式。很多硬體的系統會使用DMA,包含硬碟控制器、繪圖顯示卡、網路卡和音效卡。

DMA transfer的三個步驟
1. CPU要初始化DMA controller,包括提供I/O device的名稱、執行何種運算、記憶體位置以及所要傳送的bytes數。
2. DMA開始運作。如果request需要多於一次的transfer在bus上,DMA unit會產生下一個memory address和初始下一次的transfer。
3. 一旦DMA transfer完成,DMA controller發出一個interrupt給CPU。

References:
[1] http://zh.wikipedia.org/wiki/DMA
[2] http://blog.yam.com/yuhaolin/article/725974

1080P? 1080i?

1080p: 逐行掃描 progressive scan
1080i: 間隔掃描 interlaced scan

1080i 是一種高清晰度電視信號格式,「1080」表示垂直方向有1080條水平掃描線,「i」表示採用交錯式掃描視頻顯示方式(interlaced scan)。
1080i 先掃描單數的垂直畫面,再掃描雙數的垂直畫面,故只需要1080p一半的頻寬,
但是碰到高速移動的物體時,物體周圍就有晃動現象。早期的高清析度電視都是這種規格,因為早期的頻寬較小,無法一次送出全部,故用這種方式一次送一半來減少頻寬。

1080p(Progressive scan),則是逐行掃描(progressive scan) ,是因現在頻寬較大而延伸出來的傳輸方式。

1080p是一種視頻顯示格式。字母p意為逐行掃描(progressive scan) ,有別於1080i的interlaced scan(隔行掃描)。數字1080則表示垂直方向有1080條掃描線。通常1080p的畫面解析度為1920×1080,即一般所說的高清晰度電視。

ex. 假設2台 畫格都是每秒60張,也就是畫面更新頻率為60Hz
為什麼呢? "逐行掃描"的意思是,在更新頻率為60Hz的條件下,每秒對整個螢幕做60次的掃描,簡單的說就是,每秒顯示60張1920x1080的"照片",而這60張不同的照片在人的眼中就成了電影.動畫.

而"隔行掃描"的意思是,在更新頻率為60Hz的條件下,每秒對整個做60次的掃描,跟p不同的是:他是交錯掃奇數行或偶數行(垂直),也就是說1080行裡,他每次只掃540行,但 畫面大小是不變的,所以垂直的部分被"拉大了",所以1080i的解析度 事實上在單一掃描畫面只有1920x540.
對於平板電視,實際上可以認為沒有1080i和1080P的區別,因為目前圖像處理電路技術發展非常快,運算速度非常快,處理能力非常強,均具有倍線技術。所謂倍線技術就是把隔行的1080i的圖像處理成逐行的1080P的圖像,可以把1080/50i完美處理成1080/50P,1080/60i處理成1080/60P,包括1080/24P的節目,更可非常輕鬆地處理為1080/50P或 1080/60P。而且任何一台平板電視都有這種電路,稍微高檔的平板電視處理效果都不錯。

References:
[1] http://www.speedyou.com/CVR/XR-1080/1080P1080i.htm
[2] http://inspire.twgg.org/audio-a-video/video/item/123-understanding-of-high-definition-hd-teach-you-identify-differences-between-720p-1080i-and-1080p.html

2012年8月27日 星期一

C語言 - #include<> vs. #include” ”

#INCLUDE 前置處理有兩種形式:

<1> #INCLUDE <檔名>:
指示 compiler 只到系統的INCLUDE目錄去找要含括的檔案。這種形式主要適用來函括標準函式庫的標頭檔。EX: #include < aa.h >

<2>#INCLUDE "檔名":
指示compiler 先到目前的工作目錄去找,若找不到,再到系統的INCLUDE目錄去找。
EX: #include "Userdef.h"

Reference:
http://tw.myblog.yahoo.com/josh-chang/article?mid=1406&next=1348&l=f&fid=8