初步了解I2C

最近发现嵌入式的面试经常会被问到I2C协议,所以今天好好的学习总结下。目前I2C几乎所有芯片都留有I2C接口,也那怪这么多面试会被问到。下面我们下来了解一波I2C的硬件结构,如下图所示:


I2C的硬件结构包含两根线一根是数据线(SDA)和一根时钟线(SCL)外部上拉,采取一主多从的模式:一台主机与多个从设备相连,那么怎么将数据发送/接收到指定的主机/从机的呢?我们再来看两张图:

start

从机地址/方向

回应

数据1

回应

数据2

回应

……….

P停止位

上图黑色为主机发送,红色为从机发送

首先需要主机发送开始信号(START)I2C规定只有在时钟线为低电平期间允许数据线变化,如果在时钟线为高电平期间数据线产生下降沿信号即为通讯开始标志。接下来主机会发送七位从机地址和一位的读写信号,若对应的从机地址存在,时钟线的控制权交给从机,从机确认可以接收后会发送第九位的ASK回应信号表示已经成功接收,接下来主机会一直发送八位数据然后等待从机回应去人接受,当主机觉得发送内容已完成会主动在时钟线为高电平期间产生一个上升沿信号给数据线表示通讯结束。以上为主机发送从机接收,接下来我们来看看从机发送主机接受的模式。

start

从机地址/方向

回应

数据1

回应

数据2

回应

……….

P停止位

与上面相似也是现有主机发出开始信号,然后发送从机地址和一位读信号,从机回应一位确认信号后,不同的地方开始了,接下来是从机控制时钟线向主机发送数据,然后主机接收到会有一位的回应信号,接下来就这样一直循环读取,直到主机觉得数据接收完成以后发送停止信号停止接收。


对hibernate的初步了解

08-06

rn1.one-to--manyrn 1)建立双方关联,并不是因为业务需求,而是为了提高效率!rn 例:Order Item的关系 rn rn (1)Order cascade="all" inverse="true" 由Item一方维护关系,提高效率 rn 原因: rn 当inverse="false"时,rn sql语句多余降低效率低 save Order save Item update Itemrn 添加n个item多n个sql语句!rn 当inverse=“true”时, sql语句可以见到最少,提高效率!save order save itemrn rn rn (2) 添加addItem方法,防止出现低级错误(item1.setOrder(order)忘写)!rn 如: public void addItem(Item item1) rn items.add(item1);rn item1.setOrder(this);rn rn (3)可以在映射文件内部写query,维护时比较容易,只需要修改映射文件就可以了,不需重新编译!rn 如:rn //防止<,>冲突rn select distinct o from Order o left outer join fetch o.itemsrn rn rn 用法:Query query = session.getNamedQuery("findAllOrder");rn(4)rnrn rn 2.many-to-onern 1) 根据业务要求建立关联关系,一般设为单向rn 例:Dept Employeer 的关系(业务需求 查看emp时需要查看其所属dept,查看部门时可以查看到empNum)rn rn (1)Emp单方关联rn rn (2) Emp emp = new Emp();rn emp.setName("goodgoodgood");rn emp.setSalary(new BigDecimal("12345.67"));rnrn Dept dept = new Dept();rn dept.setId(2);rn 给出deptid可以添加emp。但是当deptid=2不存在时,容易出现fk问题!rn cascade=“save-update” 当deptid=2不存在时,可以保存dept!但是存在时,更新dept!rn(3)rn 此处 lazy=“true”只对load有效!对于get而言不存在延迟加载!rn(4)rn Emp emp = empDao.getEmpById(3);rn System.out.println(emp.getDept().getLocation()); rn fetch="join"时,只有一条sql语句!lazy=“false”时,两条sql语句!rn fetch="join"时,只对get、load其作用,对query不起作用,在query内写left outer join fetch emp.deptrn 可以解决此问题!rn 如: Query query = session.createQuery("from Emp emp left outer join fetch emp.dept where emp.name=?");rn rn 3.Message简单映射rn rn (1)MessageDao msgDao = new MessageDao();rn Message msg = new Message();rn msg.setTitle("wwwwwwwwwa");rn 不加dynamic-insert="true"时,有些null值也insert进去了! 降低了效率。rn dynamic-update="true"只insert所要insert的字段值。rn 两sql语句对比rn 不加时rn Hibernate: insert into t_message (msg_title, msg_content, create_date)rn values (?, ?, ?)rn 加后:rn Hibernate: insert into t_message (msg_title) values (?)rn rn rn (2) msgDao.updateMessageTitle(1, "g00!!");不加dynamic-update="true"时,每个字段都要修改,这时没有不要的,rn 降低了效率。dynamic-update="true"只修改所要修改的字段值。rn 两sql语句对比rn 不加时rn Hibernate: update t_message set msg_title=?, msg_content=?, create_date=?rn where id=?rn 加后:rn Hibernate: update t_message set msg_title=? where id=?rn rn rnrn rn rn rn rn rn

Struts开发指南之Taglib的初步了解

12-29

TAGLIBrn  rn  Struts对Taglib进行了扩展, Struts提供了四种基本自定义Taglib以及两种附加Taglib:rn  rn  bean:struts-bean taglib包含在访问bean和bean属性时使用的tag,也包含一些消息显示的tag。rn  rn  html:struts-html taglib包含用来创建struts输入表单的tag,和其它通常用来创建基于HTML用户界面的tag。rn  rn  logic:struts-logic taglib包含的tag用来管理根据条件生成输出文本,和其它一些用来控制的信息。rn  rn  template:struts-template taglib包含的tag用来定义模板机制。rn  rn  tiles:Tiles插件,用于简化jsp开发rn  rn  nested: 而Nested标记库的作用是让以上这些基本标记库能够嵌套使用,发挥更大的作用。rn  rn  使用taglib可以简化jsp页面的开发,使得jsp包含最少的代码。rn  rn  如,在JSP开发过程中,虚拟目录是相对于Domain的。如果http://localhost/context1/test.jsp执行href="/”则会返回到http://localhost/,如何返回到http://localhost/context1/呢? 这样我们就可以用<html:link page="/" >按照相对于虚拟目录的url来定位。rn  rn  I18n支持rn  rn  如果要显示一套支持i18n的界面,首先要定义一个ApplicationResource文件,将信息以key=value的形式放入。在struts-config.xml中指定resouces的地址,即可用<bean:message key="welcome">这样的tag来显示,而不需要将信息固化在JSP文件中。rn  rn  TILES:rn  rn  Tiles中对页面的划分有点象jakarta的另外一个项目Turbine中的TDK。增加了layout的概念。rn  rn  其实就是把一个页面划分为几块。 通常的来说一个页面大概可以划分为如下几块:rn  rn  head页面头部:存放一个运用的公共信息:logo等,如果是网站可能是最上面的一块.rn  rn  menu页面菜单:放置一个运用中需要使用的菜单,或者在每一个页面都使用的连接.rn  rn  footer页面尾部:如版权信息等.rn  rn  body页面主题内容:每个页面相对独立的内容.rn  rn  如果按上面的划分那对每一个页面我们只要写body里面的内容,其他的就可以共享重用.rn  rn  如果大多数页面的布局基本相同我们甚至可以使用一个jsp文件根据不同的参数调用不同的body.rn  rn  Tiles除了替代Template的基本模板功能外,还增加了布局定义、虚拟页面定义和动态页面生成等功能。rn  rn  Tiles强大的模板功能能够使页面获得最大的重用性和灵活性,此外可以结合Tiles配置文件中的页面定义和Action的转发逻辑,即你可以将一个Action转发到一个在Tiles配置文件中定义的虚拟页面,从而减少页面的数量。比如,下表中的Action定义了一个转发路径,它的终点是tile.userMain,而后者是你在Tiles配置文件中定义的一个页面。rn  rn  EXCEPTIONrn  rn  异常处理在Struts1.1中得到了很好的支持rn  rn  可以在配置文件中指定由谁来处理Action类中掷出的某种异常。按照以下步骤来完成该功能:rn  rn  1 实现org.apache.struts.action.ExceptionHandler的子类,覆盖execute方法,在该方法中处理异常并且返回一个ActionForward对象rn  rn  2 在配置文件中配置异常处理对象,你可以配置一个全局的处理类或者单独为每个Action配置处理类rn  rn  下表就定义了一个全局的处理类CustomizedExceptionHandler,它被用来处理所有的异常。rn  rn  <global-exceptions>rn  <exceptionrn  handler="com.yourcorp.CustomizedExceptionHandler"rn  key="global.error.message"rn  path="/error.jsp"rn  scope="request"rn  type="java.lang.Exception"/>rn  </global-exceptions>rnrn文摘:http://java.ccidnet.com/art/3739/20060721/649927_1.html

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试