星期三, 5月 25, 2005

[news] WiMAX寬頻無線接入的頻譜利用及介面分析

電子工程專輯,news。

[essay] 程式設計一定要除錯嗎?

程式設計一定要除錯嗎?
上網時間 : 2005年05月25日

對所有的程式設計人員來說,除錯是必要的工作,還是顯示出這個產業的尚未成熟?其他產業的專業人士並不會花費一半的時間來找出設計中的錯誤,但為什麼程式設計人員必須要這麼做?

Jim Turley

根據統計,整個軟體開發時間中,有五成是花在撰寫程式碼,而另外五成則是用來除錯。我想,由於這樣的情況行之有年,大部分人可能都會認為,50/50的分配應該是合理的。

但仔細想想,為什麼程式設計需要這麼多的調整與糾錯工作?其他的專業人士決不會像我們一樣,認為這麼多的修正是必須的。建築師不會將大樓蓋好後,然後再看看它會不會倒下來;其他的船舶、飛機和農業機械工程師,也大多都是將東西製造出來後,就能使用。

與程式設計師類似,硬體工程師也需要進行一些除錯的工作。他們設計、測試、找出錯誤,然後再重新設計。當然,對晶片設計來說,這是不具經濟效益的,他們必須儘量能在第一次設計時就成功。

難 道除錯真的是軟體工程領域中必備的本質與固有特性?或是,這只是我們長久以來不願改變的工作方式?或許,50/50的時間規則是這個產業尚未成熟的一種象 徵,可能還要花上更久的時間才也可能突破。我們知道,在90年代初期,那時的汽車製造商也是得不停的修改,才能將車子真正做出來,但現在,汽車的製造方式 早已不可同日而語。同樣地,近百年來醫藥科學的進步,醫生為病患進行試驗以找出病灶的次數也大幅減少。

理智上,我認為在未來的數十年中, 軟體開發將變得更正規化與更有紀律,會較類似於機械或化學工程。但是,情緒上,我卻很不忍心程式設計人員將會失去這「軟性」的一面。撰寫程式是有趣的,但 如果嵌入式軟體將成為每日生活中的一部份,從全球經濟發展的歷程來看,顯然,軟體的撰寫流程就一定會被要求變得更為嚴格、正確、與正式。如果真是這樣,程 式設計人員就會多出50%的多餘時間了!

作者:Jim Turley,Embedded Systems Programming 主編

星期六, 5月 14, 2005

[note] ARM based 嵌入式系統設計

[8051 vs ARM]

8051(8 bit microprocessor)具備 CPU core、Timer、I/O、
Flash(4/8/16K)、RAM(128K),可以I/O模擬(非同步)Flash、RAM,
接上Clock、power即可運作

ARM具有SDRAM(Memory interface),透過Memory controller外接(data/addr)。
重點在掌握Memory controller!

8 bit(D0-D7) vs ARM(D0-D31)

standard:Big/Little Endian。

Thumb state 很慢,用16 bit在run,用Thumb要降速。

clock接法有兩種,crystal/oscillater

--
[reset process]

1. CPU 先 check clock(crys or osci),OM[3:2]

2. check endian:(big or little)

3. check memory(bus width): 8/16/32,OM[1:0]

4. check read boot(read/chip select vs nRE/nGCSO)

[Exception]
不可預知的狀況/Bug,導致當機。
WatchDog,定時reset以處理 exception。

MMU:Memory re-mapping,OS之保護模式,避免user改到OS之memory。
svc不讓user access CPU使用之memory。

[]
ARM core:TDMI/920T

state:ARM/Thumb mode

ARM所有的I/O都靠memory controller 控制。根據I/O需求選擇chip。

手機chip:
sensor- (用DSP inprement)
LCD -
CODEC -
RF
Memory
CPU(400-600M),高速需求以處理運算:Image。
power contorl

chip公司有的功能app公司不要作,除非要開chip或時程考量。

[Exception]

誰產生誰負責
負責
類似BL的動作:Link register=PC+4/8
SPSR=CPSR
CPSR=Exception mode
PC=Relevant exception vector
(Exception vector:see table)

PC=Link register-4/8
CPSR=SPSR
clear...

[]

ADC:作 touch panel用

[Memory map]
OE=read
ECS=chip enable
MCLKO=clock
EWAIT=device速度跟不上CPU,需要延遲CPU。memory一般不需要。

Linux需要在SDRAM上跑。所以4510

SDRAM的data line丟兩次,以row col定址。為提升速度,採sync,

所有sync的interface都需要硬體解決。

[]
memory control要注意是採用8/16/32 ROM,硬體接法不同。
8 bit A0-A0
16bit A1-A0
32bit A2-A0

PLL:決定震盪頻率,以提供不同頻率的clock,調整頻率以省電。

[SDRAM]
memory initial很重要。(查data sheet)

[Boot code]
booting
system config(flash),先不要碰memory:

1. indicate,亮LED,代表CPU開始run
2. indicate memory,亮LED
3. memory test -faild,亮LED
-ok,亮LED

以check硬體,memory mapping。

EX-KSRC-init.s
Int_Mask
reset_handler
memory.a: memory的定義
miscore.a:
snds.a: bus width,ROM bank

[]
WINCE
Linux: file system, RT, communication
embeded:

embeded: 資源有限,要使用Dynamic memory allocation。
--

INCE
Linux: file system, RT, communication
embeded:

embeded: 資源有限,要使用Dynamic memory allocation。

[4510 Interupt]

Interupt controller 透過 mode register 決定使用 IRQ or FIQ,
CPU透過Pending register依序check interupt 由何者產生
Mask register用來disable interupt
Offset register 可 check pioraty 最高的 interupt

不同的 ARM CPU interupt controller不同,但exception都一樣。


[IRQ]

B跳至IRQ Handler,BL 取得IRQ Service Rutine 的content,inport IRQ entry,
BL IRQ entry。於C中建立 interupt table,Offset 判斷,
set interupt vector,
(an s3c4510 p.133)

[]
減少main的內容,多用background 跑。

[2410 interupt]
不需要inport,直接建interupt table
interupt分group,以防register(32bit)不夠用

[SWI]
軟體保護,與硬體有關的service rutine可放到Flash,以節省code容量。

[cache]

速度與CPU同步,CPU與cache間access只要一個machine cycle,
和memory間要5個machine cycle。

CPU透過cache access extend memory,可增加效率。

若外接device而非memory,需設定為 non cache,不透過cache access device,
否則會 error。不同CPU設定方法不同。

[memory bus]
CE
OE
WE
Addr
Data

善用編/解碼(CPLD),控制device。

使用memory interface要注意bus 衝突。(看data sheet!)

[UART]
軟體控制只能async。

interface建立的前提(communication parameter):
baud rate,Data bit,Stop bit,parity(odd or even)

[]
physical layer:Phy,電氣訊號規範
logic layer:協定

Interupt vs DMA:DMA,等待接收一定量後再interupt。

[]
對embeded系統,善用pointer,C的效率與組語差不多,移植性較佳。
所以系統的結構很重要。

[xmodem]
Rx掌控
一次丟128,所以size估計為128 倍數。

[改flash]
disable IRQ
disable cache

check MID/DID

check word/bite mode

check protect

[Interface]
Interface 要符合標準,否則會付出相容性的代價。

H.I:Host Interface:ARM可以用memory control 去 drive TFT、LCD

I/O:USB、UART

[2410]

NAN Flash
LCD/TFT
ADC
MMC/SD
IIC: serial interface/EEPROM
IIS: Audio
SPI: Audio

[]
clock: XAL/OSC
booting: NAND Flash
NO Flash
little/big: 預設是little

[UART Multidrop]
Host/Client
Client 未 enable 前都是高阻抗,Host決定 client 通訊之程序
缺點是速度受client數的影響,實際baurd rate為baurd rate/2^client數

USB要解決的(multi-drop)問題
Dynamic ID
Protocal
Speed

[]
USB cable是單向的

高速傳送前的hand shake時間很短,很難作

每個device有16個end point,將data分成16個種類

SYNC 要由硬體解決,軟體速度跟不上

USB control 解決的工作
SYNC Token
CRC
collect Data

[]
1.Set config
2.Set interupt and DMA mode
3.Host Get Description
Device Description→ Standard
Interface
Device
4.Device wait Host Download 1st record(size/length)
5.Set DMA start address and start DMa
6.Receive Binary Data
7.Jump to start

Memory→SDRAM
→SRAM
→ROM

→Flash →NOR 關電後資料還在,可用作 booting。
大容量製成困難,良率不高。
size 越大,pin越多
→NAND 縮減pin:利用多次fetch cycle,
以較少 pin 數達到相同數量的定址
controller:interface
file system
SD、MMC、CF

SPI bus:serial bus,provide by motolora。

SD/MMC card:initialize,塞data,check busy,剩下的交給controller。

[]
4410 CPU,low power control,LCD,加8051可擴充I/O
SD和MMC control command大致類似,部分細節有點不同。
(check data sheet!)