嵌(qian)入式(shi)開發面試關于中斷的問(wen)題(ti)
時間:2015-09-21 來源(yuan):未知(zhi)
中斷是嵌入式系統中重(zhong)要的(de)組成部(bu)分,這(zhe)導致了(le)很多編譯開發(fa)商提(ti)供一(yi)(yi)種擴(kuo)展—讓標準(zhun)C支持中斷。具代表事(shi)實是,產生了(le)一(yi)(yi)個(ge)新(xin)的(de)關(guan)(guan)鍵(jian)字 __interrupt。下面的(de)代碼就使用了(le)__interrupt關(guan)(guan)鍵(jian)字去(qu)定義了(le)一(yi)(yi)個(ge)中斷服務子程(cheng)序(ISR),請評(ping)論一(yi)(yi)下這(zhe)段代碼的(de)。
__interrupt double compute_area (double radius)
{ double area = PI * radius * radius;
printf(" Area = %f", area);
return area;
}
這個函數(shu)有太(tai)多的(de)錯誤(wu)了,以至(zhi)讓人不(bu)知從(cong)何說起了:
1). ISR 不能返回一(yi)個值。如果你不懂這個,那(nei)么你不會被雇用的(de)。
2). ISR 不能傳遞參數。如果你沒(mei)有(you)看到這一(yi)點,你被(bei)雇用的機會等(deng)同第一(yi)項。
3). 在許(xu)多的處(chu)理器(qi)(qi)(qi)/編譯器(qi)(qi)(qi)中(zhong)(zhong),浮(fu)點一(yi)般都是不(bu)可重入(ru)的。有些(xie)處(chu)理器(qi)(qi)(qi)/編譯器(qi)(qi)(qi)需要讓(rang)額處(chu)的寄存器(qi)(qi)(qi)入(ru)棧,有些(xie)處(chu)理器(qi)(qi)(qi)/編譯器(qi)(qi)(qi)就是不(bu)允許(xu)在ISR中(zhong)(zhong)做浮(fu)點運算(suan)。此(ci)外,ISR應(ying)該是短而有效(xiao)率的,在ISR中(zhong)(zhong)做浮(fu)點運算(suan)是不(bu)明智的。
4). 與第(di)三(san)點(dian)一脈相承,printf()經常(chang)有重入和性能(neng)上的(de)問(wen)題。如果你(ni)丟掉了第(di)三(san)和第(di)四點(dian),我不(bu)會太為難你(ni)的(de)。不(bu)用說,如果你(ni)能(neng)得到(dao)后兩點(dian),那么你(ni)的(de)被雇用前景越(yue)來越(yue)光明了。