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

正文內(nèi)容

基于安卓控制的智能無線開關(guān)畢業(yè)設(shè)計論文(編輯修改稿)

2025-07-16 12:59 本頁面
 

【文章內(nèi)容簡介】 也可以連接配對,比如含藍牙的數(shù)碼相機,藍牙GPS,藍牙串口打印機,等等,特別地,藍牙GPS 為典型例子例:發(fā)送:AT+PIN8888返回:OKsetpin這時藍牙配對密碼改為8888,模塊在出廠時的默認配對密碼是1234。參數(shù)可以掉電保存,只需修改一次。無校驗設(shè)置指令:( 版后支持)AT+PN(默認就是這個設(shè)置)偶校驗設(shè)置指令:( 版后支持)AT+PE奇校驗設(shè)置指令:( 版后支持)AT+PO獲取AT 指令版本命令:AT+VERSION 則為正品4 系統(tǒng)軟件的設(shè)計 相關(guān)軟件編程技術(shù) 嵌入式C編程 Windows平臺下的普通C語言編程跟Linux平臺下的嵌入式C語言編程幾乎沒什么不同。主要差別只是在于編譯器、API等開發(fā)工具的不同。但是,在嵌入式C編程的世界里,如果要編寫出嵌入式驅(qū)動程序,僅僅是熟悉C語言是遠遠不夠的,還得精通嵌入式芯片工作原理(寄存器設(shè)定等),操作系統(tǒng)原理(存儲空間分配等),除此之外,還需要了解基本的數(shù)模電的電路知識等硬件知識??梢?,嵌入式C編程比普通的C編程難度大多了。 安卓JAVA編程 JAVA語言是典型的面向?qū)ο蟮恼Z言。面向?qū)ο蟮某绦蛟O(shè)計語言必須有描述對象及其相互之間關(guān)系的語言成分。這些程序設(shè)計語言可以歸納為以下幾類:系統(tǒng)中一切皆為對象;對象是屬性及其操作的封裝體;對象可按其性質(zhì)劃分為類,對象成為類的實例;實例關(guān)系和繼承關(guān)系是對象之間的靜態(tài)關(guān)系;消息傳遞是對象之間動態(tài)聯(lián)系的唯一形式,也是計算的唯一形式;方法是消息的序列。本次設(shè)計我們的android應(yīng)用程序用的是java語言,因此必須得對面向?qū)ο笏枷胗袀€深刻的認識。 系統(tǒng)底層軟件的設(shè)計 本系統(tǒng)的底層軟件指LED燈的驅(qū)動程序,測試程序以及UART串口的初始化程序,這些程序的編寫都是在ubuntu環(huán)境下用vi編輯器編寫的。 LED燈驅(qū)動程序設(shè)計 我們知道,要寫出硬件的驅(qū)動程序,除了擁有必要的軟件編程能力之外,必須得熟悉硬件的工作原理。此驅(qū)動程序的源文件名為:我們先查看LED燈的電路原理圖,通過查看GEC210開發(fā)板核心版的schematic,可知原理圖如下:圖9 LED燈的電路原理圖由圖可知,核心版上的4個led燈是與處理器的GPJ2_X引腳連接,根據(jù)二極管的工作原理,VDD_REG1_IO端為高電平,則只要把GPJ2_X端設(shè)置為低電平,led燈就會被點亮。再查此原理圖,可知GPJ2_X引腳與處理器的連接如下:圖10 GPJ2_X引腳與處理器的連接此時則可知道要控制led的亮滅先執(zhí)行兩個步驟,第一:把管理GPJ2_X的控制寄存器GPJ2_CON相應(yīng)位設(shè)置為輸出模式,第二:把數(shù)據(jù)寄存器GPJ2DAT設(shè)置為輸出低電平。此驅(qū)動程序的源文件名為:(具體內(nèi)容請見附錄):驅(qū)動模塊加載函數(shù):static int __init gec210_led_dev_init(void) { int ret。 int i。 for (i = 0。 i LED_NUM。 i++) { ret = gpio_request(led_gpios[i], LED)。//申請LED燈的I/O口 s3c_gpio_cfgpin(led_gpios[i], S3C_GPIO_OUTPUT)。 gpio_set_value(led_gpios[i], 1)。 } ret = misc_register(amp。gec210_led_dev)。 //注冊雜項設(shè)備 printk(DEVICE_NAME\tinitialized\n)。 return ret。}驅(qū)動模塊卸載函數(shù):static void __exit gec210_led_dev_exit(void) { int i。 for (i = 0。 i LED_NUM。 i++) { gpio_free(led_gpios[i])。 //釋放I/O口 } misc_deregister(amp。gec210_led_dev)。//卸載雜項設(shè)備}定義ioctl函數(shù)static long gec210_leds_ioctl(struct file *filp, unsigned int cmd, unsigned long arg){ printk(_IOC_NR(cmd)=%d arg=%d\n,_IOC_NR(cmd),(int)arg)。 if( _IOC_TYPE(cmd) != LED_MAGIC ) return EINVAL。 if( _IOC_NR(cmd) MAX_NR ) return EINVAL。 switch( cmd ) { case LED1: //設(shè)置LED1 的開或者關(guān) gpio_set_value(led_gpios[_IOC_NR(cmd)],arg)。 printk(led 1\n)。 break。 case LED2: //設(shè)置LED2 的開或者關(guān) gpio_set_value(led_gpios[_IOC_NR(cmd)],arg)。 printk(led2\n)。 break。 case LED3: //設(shè)置LED3 的開或者關(guān) gpio_set_value(led_gpios[_IOC_NR(cmd)],arg)。 printk(led3\n)。 break。 case LED4: //設(shè)置LED4 的開或者關(guān) gpio_set_value(led_gpios[_IOC_NR(cmd)],arg)。 printk(led4\n)。 break。 default: printk(default\n)。 return EINVAL。 } return 0。}//把自定義的ioctl函數(shù)賦值給file_operations static struct file_operations gec210_led_dev_fops = { .owner = THIS_MODULE, .unlocked_ioctl = gec210_leds_ioctl,}Makefile文件內(nèi)容:CONFIG_MYCHAR_DEV ?=mifneq ($(KERNELRELEASE),) dc_motor objs:= obj$(CONFIG_MYCHAR_DEV)+=elsePWD :=$(shell pwd)KERN_VER = $(shell uname r)KERN_DIR = /home/chengjunyi/androidsource/gec210/class60/modules: $(MAKE) C $(KERN_DIR) M=$(PWD) modulesendifclean: rm rf *.o *~core .depend *.cmd *.ko *. *.tmp_versions Makefile編譯完成后,,在pc端通過adb push 命令下載到開發(fā)板端,然后在開發(fā)板端的終端輸入insmod ,再通過chmod命令修改驅(qū)動權(quán)限,則已成功加載led燈的驅(qū)動程序了。 LED燈測試程序設(shè)計 有了上面的驅(qū)動程序,自然得寫一個應(yīng)用程序去操控LED燈,以測試驅(qū)動程序是否成功編寫。此處并不用驅(qū)動程序那么復(fù)雜,只需寫一個簡單的C程序,通過main函數(shù)的參數(shù)把用戶從鍵盤輸入的數(shù)據(jù)通過ioctl函數(shù)把參數(shù)傳遞到底層的驅(qū)動程序,以控制LED燈的亮滅。此測試程序的源文件名為:(具體內(nèi)容請見附錄)核心代碼如下:fd = open(/dev/leds, O_RDWR)。 // 打開設(shè)備led_no = strtoul(argv[1], 0, 0) 1。 // 操作哪個LED?if (!strcmp(argv[2], on)) { //開燈 switch(led_no) { case 0: ioctl(fd,LED1,IOCTL_LED_ON)。 break。 case 1: ioctl(fd,LED2,IOCTL_LED_ON)。 break。 case 2: ioctl(fd,LED3,IOCTL_LED_ON)。 break。 case 3: ioctl(fd,LED4,IOCTL_LED_ON)。 break。 default: break。 } } else if (!strcmp(argv[2], off)) { //關(guān)燈 switch(led_no) { case 0: ioctl(fd,LED1,IOCTL_LED_OFF)。 break。 case 1: ioctl(fd,LED2,IOCTL_LED_OFF)。 break。 case 2: ioctl(fd,LED3,IOCTL_LED_OFF)。 break。 case 3: ioctl(fd,LED4,IOCTL_LED_OFF)。 break。 default: break。 } }測試程序編寫完畢后,一般的linux系統(tǒng)環(huán)境下只需通過armlinuxgcc交叉編譯后即可成功把可執(zhí)行文件下載到開發(fā)板上運行,但是由于我們的開發(fā)板搭載的是android系統(tǒng),android系統(tǒng)并不支持此交叉編譯器編譯出來的可執(zhí)行文件。:LOCAL_PATH:= $(call mydir) //對LOCAL_PATH進行賦值,獲取編譯源代位置include $(CLEAR_VARS) //清空全局變量(LOCAL_打頭的變量),除了這個LOCAL_PATH之外LOCAL_SRC_FILES := //編譯哪些文件LOCAL_MODULE := ledtest //生成的模塊名LOCAL_MODULE_TAGS := eng //這個程序的版本enginclude $(BUILD_EXECUTABLE) //生成可執(zhí)行文件,則需要在Android源代碼的目錄下進行編譯,定位到android源代碼的目錄,然后執(zhí)行一下操作:a、source build/b、lunch 4c、mmm “”如果編譯成功,然后打開amd命令行,通過adb push命令把ledtest文件下載到開發(fā)板上運行。下載完畢后開發(fā)板終端輸入./ledtest 3 on,第三盞燈確實被點亮,按照此方法多試其他燈,依然可以被點亮,則證明前面所寫的led燈的驅(qū)動可用。 UART串口配置經(jīng)過查閱GEC210的數(shù)據(jù)手冊,可對串口進行以下設(shè)置:核心代碼如下:define DEV_PATH /dev/s3c2410_serial2 //定義需要配置的串口的路徑static struct timeval timeout。 //定義靜態(tài)超時結(jié)構(gòu)體/* 設(shè)置窗口參數(shù):9600速率 */void init_tty(int fd) { //聲明設(shè)置串口的結(jié)構(gòu)體 struct termios termios_new。 //先清空該結(jié)構(gòu)體 bzero(amp。termios_new, sizeof(termios_new))。 // cfmakeraw()設(shè)置終端屬性,就是設(shè)置termios結(jié)構(gòu)中的各個參數(shù)。 cfmakeraw(amp。termios_new)。 //設(shè)置波特率 //=(B9600)。 cfsetispeed(amp。termios_new, B9600)。 cfsetospeed(amp。termios_new, B9600)。 //CLOCAL和CREAD分別用于本地連接和接受使能,因此,首先要通過位掩碼的方式激活這兩個選項。 |= CLOCAL | CREAD。 //通過掩碼設(shè)置數(shù)據(jù)位為8位 amp。= ~CSIZE。 |= CS8。 //設(shè)置無奇偶校驗 amp。= ~PARENB。 //一位停止位 amp。= ~CSTOPB。 amp。= ~(ICANON | ECHO | ECHOE | ISIG)。 tcflush(fd, TCIFLUSH)。 // 可設(shè)置接收
點擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1