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

正文內容

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

2025-07-16 12:59 本頁面
 

【文章內容簡介】 也可以連接配對,比如含藍牙的數碼相機,藍牙GPS,藍牙串口打印機,等等,特別地,藍牙GPS 為典型例子例:發(fā)送:AT+PIN8888返回:OKsetpin這時藍牙配對密碼改為8888,模塊在出廠時的默認配對密碼是1234。參數可以掉電保存,只需修改一次。無校驗設置指令:( 版后支持)AT+PN(默認就是這個設置)偶校驗設置指令:( 版后支持)AT+PE奇校驗設置指令:( 版后支持)AT+PO獲取AT 指令版本命令:AT+VERSION 則為正品4 系統(tǒng)軟件的設計 相關軟件編程技術 嵌入式C編程 Windows平臺下的普通C語言編程跟Linux平臺下的嵌入式C語言編程幾乎沒什么不同。主要差別只是在于編譯器、API等開發(fā)工具的不同。但是,在嵌入式C編程的世界里,如果要編寫出嵌入式驅動程序,僅僅是熟悉C語言是遠遠不夠的,還得精通嵌入式芯片工作原理(寄存器設定等),操作系統(tǒng)原理(存儲空間分配等),除此之外,還需要了解基本的數模電的電路知識等硬件知識??梢?,嵌入式C編程比普通的C編程難度大多了。 安卓JAVA編程 JAVA語言是典型的面向對象的語言。面向對象的程序設計語言必須有描述對象及其相互之間關系的語言成分。這些程序設計語言可以歸納為以下幾類:系統(tǒng)中一切皆為對象;對象是屬性及其操作的封裝體;對象可按其性質劃分為類,對象成為類的實例;實例關系和繼承關系是對象之間的靜態(tài)關系;消息傳遞是對象之間動態(tài)聯系的唯一形式,也是計算的唯一形式;方法是消息的序列。本次設計我們的android應用程序用的是java語言,因此必須得對面向對象思想有個深刻的認識。 系統(tǒng)底層軟件的設計 本系統(tǒng)的底層軟件指LED燈的驅動程序,測試程序以及UART串口的初始化程序,這些程序的編寫都是在ubuntu環(huán)境下用vi編輯器編寫的。 LED燈驅動程序設計 我們知道,要寫出硬件的驅動程序,除了擁有必要的軟件編程能力之外,必須得熟悉硬件的工作原理。此驅動程序的源文件名為:我們先查看LED燈的電路原理圖,通過查看GEC210開發(fā)板核心版的schematic,可知原理圖如下:圖9 LED燈的電路原理圖由圖可知,核心版上的4個led燈是與處理器的GPJ2_X引腳連接,根據二極管的工作原理,VDD_REG1_IO端為高電平,則只要把GPJ2_X端設置為低電平,led燈就會被點亮。再查此原理圖,可知GPJ2_X引腳與處理器的連接如下:圖10 GPJ2_X引腳與處理器的連接此時則可知道要控制led的亮滅先執(zhí)行兩個步驟,第一:把管理GPJ2_X的控制寄存器GPJ2_CON相應位設置為輸出模式,第二:把數據寄存器GPJ2DAT設置為輸出低電平。此驅動程序的源文件名為:(具體內容請見附錄):驅動模塊加載函數: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)。 //注冊雜項設備 printk(DEVICE_NAME\tinitialized\n)。 return ret。}驅動模塊卸載函數: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)。//卸載雜項設備}定義ioctl函數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: //設置LED1 的開或者關 gpio_set_value(led_gpios[_IOC_NR(cmd)],arg)。 printk(led 1\n)。 break。 case LED2: //設置LED2 的開或者關 gpio_set_value(led_gpios[_IOC_NR(cmd)],arg)。 printk(led2\n)。 break。 case LED3: //設置LED3 的開或者關 gpio_set_value(led_gpios[_IOC_NR(cmd)],arg)。 printk(led3\n)。 break。 case LED4: //設置LED4 的開或者關 gpio_set_value(led_gpios[_IOC_NR(cmd)],arg)。 printk(led4\n)。 break。 default: printk(default\n)。 return EINVAL。 } return 0。}//把自定義的ioctl函數賦值給file_operations static struct file_operations gec210_led_dev_fops = { .owner = THIS_MODULE, .unlocked_ioctl = gec210_leds_ioctl,}Makefile文件內容: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命令修改驅動權限,則已成功加載led燈的驅動程序了。 LED燈測試程序設計 有了上面的驅動程序,自然得寫一個應用程序去操控LED燈,以測試驅動程序是否成功編寫。此處并不用驅動程序那么復雜,只需寫一個簡單的C程序,通過main函數的參數把用戶從鍵盤輸入的數據通過ioctl函數把參數傳遞到底層的驅動程序,以控制LED燈的亮滅。此測試程序的源文件名為:(具體內容請見附錄)核心代碼如下:fd = open(/dev/leds, O_RDWR)。 // 打開設備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)) { //關燈 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燈的驅動可用。 UART串口配置經過查閱GEC210的數據手冊,可對串口進行以下設置:核心代碼如下:define DEV_PATH /dev/s3c2410_serial2 //定義需要配置的串口的路徑static struct timeval timeout。 //定義靜態(tài)超時結構體/* 設置窗口參數:9600速率 */void init_tty(int fd) { //聲明設置串口的結構體 struct termios termios_new。 //先清空該結構體 bzero(amp。termios_new, sizeof(termios_new))。 // cfmakeraw()設置終端屬性,就是設置termios結構中的各個參數。 cfmakeraw(amp。termios_new)。 //設置波特率 //=(B9600)。 cfsetispeed(amp。termios_new, B9600)。 cfsetospeed(amp。termios_new, B9600)。 //CLOCAL和CREAD分別用于本地連接和接受使能,因此,首先要通過位掩碼的方式激活這兩個選項。 |= CLOCAL | CREAD。 //通過掩碼設置數據位為8位 amp。= ~CSIZE。 |= CS8。 //設置無奇偶校驗 amp。= ~PARENB。 //一位停止位 amp。= ~CSTOPB。 amp。= ~(ICANON | ECHO | ECHOE | ISIG)。 tcflush(fd, TCIFLUSH)。 // 可設置接收
點擊復制文檔內容
規(guī)章制度相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1