基于armcortex-a8内核的嵌入式智能家毕业论文(编辑修改稿)内容摘要:
(TRUE) { pTxData[0] = KeyScan()。 // 键 值扫描 if(pTxData[0]!= 0) { basicRfSendPacket(LIGHT_ADDR,pTxData,APP_PAYLOAD_LENGTH)。 halIntOff(); halIntOn()。 } } 这段程序可以说,是发送模块的精华,或者说是核心。 Appswich()函数进来之后,首先是一个错误返回机制,如果两个 Zigbee 连接不成功,会返回 fail。 连接成功后, Zigbee 会打开发送函数,做好发送准备。 同时关闭接收 功能,基于 ARMcortexA8 内核的嵌入式智能家居系统的设计与开发 9 保证模块的运行速度和稳定性。 接下来程序会进入 while()循环,只要 Zigbee保持连接,发送模块就会一直处准备在发送模式或者正在发送模式。 由于使用的是四个开关量传感器,这里作为四个按键,不停地对连接了四个传感器的 IO 关键进行按键扫描,获取相应的键值,并赋值给 Pxdata[]数组,并使用系统调用函数 basicRfSendPacket()将信息发送出去。 basicRfSendPacket 这个函数也是整段程序的核心,只有调用这个函数才能将 IO 口接收到的数据有序的发送出去,完成信息的远程传输 [9]。 下面再来 看一下接收模块的核心代码。 = LIGHT_ADDR。 if(basicRfInit(amp。 basicRfConfig)==FAILED) { HAL_ASSERT(FALSE)。 } basicRfReceiveOn()。 UartInitial()。 while (TRUE) { while(!basicRfPacketIsReady())。 if(basicRfReceive(pRxData, APP_PAYLOAD_LENGTH, NULL)0) { { Delayms1(500)。 halLedToggle(1)。 UartSend_String(Lcddata,5)。 UartSend_String(pRxData,1)。 UartSend_String(Reddata,2)。 } } } 这段程序和发送程序的主体架构是一样的,不过是使用了调用函数basicRfReceive,来接受发送函数发送过来的数据,同时初始化了 Zigbee 模块的UART1,将来自发送模块的数据打包处理后通过串口发送出去,并可以通过超基于 ARMcortexA8 内核的嵌入式智能家居系统的设计与开发 10 级终端看到所接收到的数据,通过接受到的具体数据查看到底是触发了什么节点,触动警报。 下图 31 为超级终端接受传感器信号的数据 [10]。 图 31 超级终端截图 同时 Zigbee 也可以接受来自超级终端的数据(在这里超级终端作为开发板的一个替代品),如图 32 在超级终端发送 ledon 命令, Zigbee 的一个 IO 管教被拉高, led 灯亮发送 ledoff, led 灯灭如图 32。 图 32 Zigbee 控制效果图 基于 ARMcortexA8 内核的嵌入式智能家居系统的设计与开发 11 Zigbee 的接收终端数据程序其实也非常简单,是使用串口中断来做的,即只要串口检测收有数 据接收,就会产生中断,注册标志位,然后拉高相应管脚,实现对 led 灯的控制。 代码如下: pragma vector = URX0_VECTOR __interrupt void UART0_ISR(void) { URX0IF = 0。 if(U0DBUF 0) { P1_4=~P1_4。 temp = U0DBUF。 } } 整个 Zigbee 模块的程序架构,如图 33。 图 33 Zigbee 代码工程结构图 基于 ARMcortexA8 内核的嵌入式智能家居系统的设计与开发 12 linux 嵌入式系统搭建 首先需要说明的是本次嵌入系统,是基于前人原有的开源代码消化吸收后,然后添加的驱动代码最终实现的,这里也是充分的发挥了 linux 嵌入式的开源性。 本嵌入式系统结构主要分为了三大块,分 别是: emilib : 抽象数据通信。 Hmanager:基于 QT的 PC 端图形控制程序。 Bdehmanager:基于 QT 的开发板图形控制程序。 emilib 数据通信模块介绍 Emilib 工作原理 消息接受者首先需要完成注册,所谓注册即通过 socket 连接本地 emi_core进程,将本进程进程号以及要注册的消息发送给 emi_core。 Emi_core 收到消息后,需要在内部表记录了(消息号,进程号)之间的关系。 每一个注册消息的进程只要成功注册了,就会在表里新增一个项,记录该进程注册的消息号和进程号。 然后当发送端给 emi_core 发消息时, emi_core 会把消息好在表里进行匹配,如果是正常情况,那么其会找到注册进程的进程号,此时 emi_core 会给该进程发送一个 USER2 信号,同时附加数据放到共享的内存 中。 而接受进程接收到这个信号之后,就会触发信号处理函数,其实这个原理个人认为其实完全可以理解为一个中断向量表的工作原理,不过它可以同时处理多个进程。 最后在信号处理函数内部从 emi_core 提供的共享内存中读取发送端发来的信息。 如此就完成了一次数据通信。 Emilib 的使用方法 首先来介绍下,刚才提到的 emi_core。 emi_core 相当于一个中介或者说就是一个电话接线员,主要完成了两部分的工作。 首先是接注册类的消息,并把消息和一个函数绑定。 然后是接收发送类型消息,查找到已经被绑定的消息函数对,匹配出相 同的消息,最后运行对应的函数。 Emilib 中包含 了 库。 主要工作就是提供进程需要的函数,来实现具体功能,接收进程调用库中的函数进行消息好和函数的绑定注册,而发送进程基于 ARMcortexA8 内核的嵌入式智能家居系统的设计与开发 13 调用库中的函数进行消息发送。 下面列出的是 中常用的函数 ( 1)初始化函数 Int emi_ini(void)。 这绝对是最常用也是最重要的函数,因为它必须在注册消息之前运行,但是每个进程只需要运行一次。 ( 2)消息注册函数 Int emi_msg_register_exclusice(eu32msg,emi_func func)。 返回值为 0 时代表成功,负数代表失败,两个参数分别代表要注册的消息号,和一个指向结构体的结构体指针,当然要求其提前被写好。 ( 3)发送消息函数 Int emi_msg_send_highlevel_blockreturn(char * ipaddr, int msgnum, int send_size, void *send_data, int ret_size,void *ret_data,eu32 cmd) 返回值为 0 代表发送成功,负数代表失败。 参数 ipaddr 表示接受平 台的 ip。 参数 msgnum表示要发送的消息号。 参数 send_size 以及 send_data 分别代表附加数据的长度和附加数据的首地址,如果没有那么就应该设置为 0 和 NULL。 参数 ret_size 和 ret_data 表示返回数据的大小和首地址。 参数 cmd,表示发送者要发送给接受者的命令。 Emilib 的测试 首先需要进入 emitest 目录 ,先建两个 emi 测试源文件分别用于发送和接受,来模拟通信过程。 cd emitest vim vim 以下是在实验中 对于 emilib 所做测试的一部分核心代码。 添加到 源文件的核心代码。 char hello[20]=hello。 char buf[5]={0}。 基于 ARMcortexA8 内核的嵌入式智能家居系统的设计与开发 14 emi_msg_send_highlevel_blockreturn(,12345678,6,hello,4,buf,5)。 printf(%s\n,buf)。 添加到 源文件的核心代码: int test_func(struct emi_msg *msg){ printf(msgcmd %d, msgdata %s\n,msgcmd, msgdata)。 return emi_msg_prepare_return_data(msg,hel,4)。 } Main 函数代码如下: emi_init()。 emi_msg_register_exclusive(12345678,test_func)。 while(1){ sleep(1)。 } 然后编译 以及 : gcc o receiver L../bs/pclib/lib lemi I../libs/pclib/include gcc o sender L../libs/pclib/lib lemi I../libs/pclib/include 编译完成之后生成了可执行文件接着运行测试,首先启动 PC 机的 emi_core程序, 然后分别在两个终端启动 sender 和 receiver。 sudo ../libs/pclib/bin/emi_core d (一个终端 ) ./reciever (另一终端 ) ./sender 最后的运行结果为运行结果。 在发送终端会显示: hello 在接收终端会显示: msgcmd 5, msgdata hello 证明收发消息成功。 环境部署以及 eh_server 基于 ARMcortexA8 内核的嵌入式智能家居系统的设计与开发 15 下面来大体介绍下 eh_server, eh_serve 主要实现。基于armcortex-a8内核的嵌入式智能家毕业论文(编辑修改稿)
相关推荐
代码一样,是在相同的 32 位寄存器上进行操作。 Thumb 代码仅为 ARM 代码规模的 65%,但其性能却是连接到 16 位存储器系统的相同 ARM 处理器性能的 160%。 取指 译码 执行 取指 译码 执行 江西理工大学 20xx 届本科生毕业设计 ( 论文 ) 9 第三章 外围电路设计 电源电路设计 电源是整 个系统 的能源提供者,电源性能的好坏直接关系到整个系统的成败。
化及开放性的要求。 从设计思想和技术角度分析 ,国内厂家主要有二个方向 :一是基于 PC 平台的家庭安防系统 ,以联想集团的家居安防系统为代表。 二是基于嵌入式平台的家居安防系统 ,嵌入式系统以其成熟的技术优势、低廉的价格成为近年研究的热点。 嵌入式技术在信息家电中的应用 ,已成为最大的研究领域 ,冰箱、空调等的网络化、智能化将引领人们的生活步入一个崭新的空间。 在国内从事生产智能化家居的企业中
门开始计数,直到积分器恢复 到零电平时,计数停止。 则计数器所计出的数字即正比于输入电压 Vi 在 T0 时间内 的平均值,于是完成了一次 A/D 转换。 由于双积分型 A/D 转换是测量输入电压 Vi 在 T0 时间内的平均值,所以对常态干扰 (串摸干扰 )有很强的抑制作用,尤其对正负波形对称的干扰信号,抑制效果更好。 双积分型的 A/D 转换器电路简单,抗干扰能力强,精度高,这是突出的优点。
京: 清华大学出版社, 2004.[ 4] 刘六彬. 嵌入式视频监控系统中Linux 应用的研究[ J] . 科技广场, 2005, 2( 2) : 4 7.LIU Liubin . The research of uClinux application in embeddedvideosystem[ J] . Science Mosaic, 2005, 2( 2) : 4 7.[5]
序)和应用软件(包括 web 服务器、 CGI程序、视频采集等)。 本次设计有三个部分组成,前端是用于视频采集的 CMOS 摄像头,中间部分是移植了嵌入式 Linux 操作系统的 ARM9 开发板,它的作用是对采集来的图像进行处理,并内建嵌入式 web 服务器和视频流媒体服务器,从而将视频传递给远端用户。 第三个部分是监控端,由带有浏览器的 PC 机组成,用来浏览远端的视频
像属性,设置图像参数,捕捉图像数据,都是通过 Video4Linux 借口标准调用驱动的相关函数完成的。 Servfox 流程图 2 视频流及摄像头相关技术基础 8 8 图 22 Servfox流程图 Servfox 运行过程:。 TCP 套接字服务端 ,为图像数据发送线程做好准备。 Servfox 采集数据端 Servfox,修改 Makefile 文件为 : CC= armlinuxgcc