下面是CN人才網(wǎng)小編為大家整解答2016驅(qū)動(dòng)工程師筆試題目,歡迎大家閱讀。
2016驅(qū)動(dòng)工程師筆試題目
1.什么是GPIO?
general purpose input/output
GPIO是相對(duì)于芯片本身而言的,如某個(gè)管腳是芯片的GPIO腳,則該腳可作為輸入或輸出高或低電平使用,當(dāng)然某個(gè)腳具有復(fù)用的功能,即可做GPIO也可做其他用途。
也就是說(shuō)你可以把這些引腳拿來(lái)用作任何一般用途的輸入輸出,例如用一根引腳連到led的一極來(lái)控制它的亮滅,也可以用一根(一些)引腳連到一個(gè)傳感器上以獲得該傳感器的狀態(tài),這給cpu提供了一個(gè)方便的控制周邊設(shè)備的途經(jīng)。如果沒(méi)有足夠多的gpio管腳,在控制一些外圍設(shè)備時(shí)就會(huì)力有不逮,這時(shí)可采取的方案是使用CPLD來(lái)幫助管理。
2.觸摸屏的硬件原理?
觸摸屏的主要三大種類是:電阻技術(shù)觸摸屏、 表面聲波技術(shù)觸摸屏、 電容技術(shù)觸摸屏。
電阻觸摸屏的主要部分是一塊與顯示器表面非常配合的電阻薄膜屏, 這是一種多層的復(fù)合薄膜,它以一層玻璃或硬塑料平板作為基層,表面圖有一層透明氧化金屬 (ITO氧化銦,透明的導(dǎo)電電阻) 導(dǎo)電層,上面在蓋有一層外表面硬化處理、光滑防擦的塑料層 、它的內(nèi)表面也涂有一層ITO涂層 、在他們之間有許多細(xì)小的(小于1/1000英寸)的透明隔離點(diǎn)把兩層導(dǎo)電層隔開(kāi)絕緣 。當(dāng)手指觸摸屏幕時(shí),兩層導(dǎo)電層在觸摸點(diǎn)位置就有了接觸,控制器偵測(cè)到這一接觸并計(jì)算出(X,Y )的位置,再根據(jù)模擬鼠標(biāo)的方式運(yùn)作。這就是電阻技術(shù)觸摸屏的最基本的原理。
表面聲波技術(shù)是利用聲波在物體的表面進(jìn)行傳輸,當(dāng)有物體觸摸到表面時(shí),阻礙聲波的傳輸,換能器偵測(cè)到這個(gè)變化,反映給計(jì)算機(jī),進(jìn)而進(jìn)行鼠標(biāo)的模擬。
電容技術(shù)觸摸屏利用人體的電流感應(yīng)進(jìn)行工作 。用戶觸摸屏幕時(shí) ,由于人體電場(chǎng),用戶和觸摸屏表面形成以一個(gè)耦合電容, 對(duì)于高頻電流來(lái)說(shuō),電容是直接導(dǎo)體,于是手指從接觸點(diǎn)吸走一個(gè)很小的電流
3.在Linux C中,ls這個(gè)命令是怎么被執(zhí)行的?
使用fork創(chuàng)建一個(gè)進(jìn)程或exec函數(shù)族覆蓋原進(jìn)程。
4.在一個(gè)只有128M內(nèi)存并且沒(méi)有交換分區(qū)的機(jī)器上,說(shuō)說(shuō)下面兩個(gè)程序的運(yùn)行結(jié)果
1,#define MEMSIZE 1024*1024
int count = 0;
void *p = NULL;
while(1) {
p = (void *)malloc(MEMSIZE);
if (!p) break;
printf("Current allocation %d MB\n", ++count);
}
2,
while(1) {
p = (void *)malloc(MEMSIZE);
if (!p) break;
memset(p, 1, MEMSIZE);
printf("Current allocation %d MB\n", ++count);
}
第一道程序分配內(nèi)存但沒(méi)有填充,編譯器可能會(huì)把內(nèi)存分配優(yōu)化掉,程序死循環(huán);第二道,程序分配內(nèi)存并進(jìn)行填充,系統(tǒng)會(huì)一直分配內(nèi)存,直到內(nèi)存不足,退出循環(huán)。
5.請(qǐng)定義一個(gè)宏,比較兩個(gè)數(shù)a、b的大小,不能使用大于、小于、if語(yǔ)句
搞的比較復(fù)雜。主要思想就是a-b的值的最高位是否為0;但是又得考慮整數(shù)溢出的問(wèn)題,所以很復(fù)雜。不知道哪位大俠有更好的辦法,指點(diǎn)指點(diǎn)。
#include
#define ZHENG(i) ((i >> 31) == 0)
#define FU(i) ((i >> 31) != 0)
#define COMPARE(a,b) ((ZHENG(a) && FU(b)) || (((ZHENG(a) && ZHENG(b)) || (FU(a) && FU(b))) && ((((a) - (b)) >> 31) == 0)))
void main()
{
int a = 0x80000001;
int b = 0x6FFFFFFF;
if(COMPARE(a,b))
{
printf("a >= b\n");
}
else
{
printf("a < b\n");
}