freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于arm9和linux的嵌入式打印終端系統(tǒng)-文庫(kù)吧

2025-07-26 14:34 本頁(yè)面


【正文】 使用比較少。而Vx Works由于較昂貴的使用費(fèi)用,在中小型公司中使用也較少。WinCE主要用于PDA等領(lǐng)域,嵌入式Linux由于其源碼開(kāi)放,共享資源豐富,整個(gè)系統(tǒng)功能異常強(qiáng)大,因此在嵌入式領(lǐng)域應(yīng)用得也最為廣泛。 軟件驅(qū)動(dòng)支持:由于不同的嵌入式開(kāi)發(fā)板上提供的接口也各不相同,因此Linux內(nèi)核源碼包不可能提供所有外設(shè)接口的底層驅(qū)動(dòng)。通常情況下,這些底層驅(qū)動(dòng)或者由嵌入式開(kāi)發(fā)板提供商做好后提供給用戶(hù)使用,或者由用戶(hù)自己開(kāi)發(fā)出來(lái)。而底層驅(qū)動(dòng)的開(kāi)發(fā)是整個(gè)系統(tǒng)設(shè)計(jì)中比較耗時(shí)的工作,所以用戶(hù)在選擇開(kāi)發(fā)板時(shí),盡量選擇已提供自己所需要的底層驅(qū)動(dòng)的開(kāi)發(fā)板,這樣可以縮短項(xiàng)目的開(kāi)發(fā)周期,減少項(xiàng)目投資,提高整個(gè)產(chǎn)品的競(jìng)爭(zhēng)力。 打印機(jī)驅(qū)動(dòng)的編寫(xiě)Linux的設(shè)備分為塊設(shè)備,字符設(shè)備和網(wǎng)絡(luò)設(shè)備,該系統(tǒng)使用到的微型打印機(jī)屬于字符設(shè)備,下面將具體說(shuō)明如何設(shè)計(jì)打印機(jī)驅(qū)動(dòng)。 定義設(shè)備名define DEVICE_NAME weida_printer 模塊函數(shù)設(shè)計(jì)在該系統(tǒng)中,采用模塊化加載驅(qū)動(dòng)程序的方法,因此必須實(shí)現(xiàn)模塊的初始化函數(shù)和卸載函數(shù)。采用devfs方式注冊(cè)打印機(jī)。初始化函數(shù)weida_init通過(guò)devfs_register函數(shù)向系統(tǒng)注冊(cè)設(shè)備。函數(shù)原型devfs_register(NULL, DEVICE_NAME, DEVFS_FL_DEFAULT, 0, 0, S_IFCHR | S_IRUSR | S_IWUSR, amp。weida_printer_fops, NULL)。其中,DEVICE_NAME為主設(shè)備名,weida_printer_fops為定義的一個(gè)數(shù)據(jù)結(jié)構(gòu),用來(lái)實(shí)現(xiàn)的文件操作,包括open、close、write等。 初始化打印端口初始化打印機(jī)第一個(gè)要做的事情就是要對(duì)GPIO口進(jìn)行初始化,初始化函數(shù)如下:static void weida_init(void){devfs_register()。 /*注冊(cè)設(shè)備驅(qū)動(dòng)*/set_gpio_ctrl(WEIDA_STB|GPIO_PULLUP_DIS|GPIO_MODE_OUT)。 /*設(shè)置STB口*/ write_gpio_bit(WEIDA_STB,1)。 weida_printer_io_port_init()。/*設(shè)置其它IO口,以及賦初值*/ }其中,WEIDA_STB為連接打印機(jī)選通口初始化為高電平,GPIO_PULL_DIS是設(shè)置是否需要上拉電阻,GPIO_MODE_OUT 設(shè)置GPIO口為輸出口。最后使用module_init(weida_printer_init)。采用模塊方式加載驅(qū)動(dòng)。 通過(guò)上面幾個(gè)步驟,打印機(jī)驅(qū)動(dòng)模塊已經(jīng)注冊(cè)到內(nèi)核,在/dev目錄下可以找到weida_printer設(shè)備。編寫(xiě)如下簡(jiǎn)單程序測(cè)試代碼?!nt main(void)  {   int weida_fd,ret?! ? char *data=“Hello,wel to use weida printer!“。    weida_fd=open(“/dev/weida_printer”,O_WRONLY)。 //打開(kāi)/dev/weida_printer設(shè)備   if(weida_fd0){   perror(“open device buttons”)?! ? exit(1)?!   ret=write(weida_fd,data,strlen(data))。//向打印機(jī)輸出數(shù)據(jù),打印“Hello……”字符串  if(ret!=strlen(data))   perror(“print wrong\n”)?! octl(weida_fd,WEIDA_IOCSLINESPACE,1)?! leep(1)?! et=write(weida_fd,data,strlen(data))。  if(ret!=strlen(data))   perror(“print wrong\n”)。  close(weida_fd)?! eturn 0。   } ioctl()函數(shù)主要完成打印機(jī)字體、行距等參數(shù)的設(shè)置,在設(shè)計(jì)過(guò)程中必須解決用戶(hù)數(shù)據(jù)和內(nèi)核數(shù)據(jù)之間如何傳遞。從用戶(hù)態(tài)讀取數(shù)據(jù),然后在內(nèi)核態(tài)運(yùn)行,可以使用copy_from_user函數(shù)來(lái)完成傳遞數(shù)據(jù)。 weida_printer_write ( )先對(duì)打印機(jī)是否在線(xiàn),是否忙,是否準(zhǔn)備好做進(jìn)一步的判斷,然后再進(jìn)行打印。在打印的時(shí)候要注意每發(fā)一個(gè)字符要延遲150毫秒,因?yàn)槿绻蛴?shù)據(jù)發(fā)得過(guò)快打印機(jī)的來(lái)不急處理,所以要設(shè)置延時(shí)。open/close函數(shù)打開(kāi)/關(guān)閉文件,因?yàn)樵贚INUX下設(shè)備都是當(dāng)作文件來(lái)操作的,所以需要open和close這兩個(gè)接口函數(shù)。 掃描儀串口的設(shè)置 嵌入式移動(dòng)打印終端中使用到的掃描儀是串口掃描儀,這種掃描儀相對(duì)于USB接口的掃描儀來(lái)說(shuō),控制較簡(jiǎn)單,在掃描儀掃描后,可以直接從串口讀取數(shù)據(jù)。 串口設(shè)置 設(shè)置串口速率函數(shù):set_speed(int fd, int speed),其中fd 為打開(kāi)的設(shè)備文件,speed為速率。設(shè)置串口參數(shù):set_parity(int fd,int data bits,int stop bits,int parity),data bits為有多少個(gè)數(shù)據(jù)位,stop bit為設(shè)置多少個(gè)停止位,parity為奇偶校驗(yàn)位設(shè)置。設(shè)置串口波特率為9600,數(shù)據(jù)位為8位,一位停止位,沒(méi)有校驗(yàn)位?!  oid set_speed(int fd,int speed)  {  int j?! nt status?! truct termios Opt?! cgetattr(fd,amp。Opt)?! or(i=0。isizeof(speed_arr)/sizeof(int)。i++){  if(speed==name_arr[i]){  tcflush(fd,TCIOFLUSH)。  cfsetispeed(amp。Opt,speed_arr[i])?! fsetospeed(amp。Opt,speed_arr[i])。  status=tcsetattr(fd,TCSANOW,amp。Opt)?! f
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)教案相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1