摘要: 这两日,在写一个RTC时钟的驱动程序,芯片是周立功公司生产的PCF8563,总线是IIC的,在严格按照技术手册上的IIC时序写完之后。在测试程序里不能正确的读取日期中的分钟和秒数据,上网查了好久,也没有查到这方面的资料。最后,解决的办法很诡异在每次读取日历数据前,要先进行一次写数据,不论写什么,只要是合法数据就可以。 while(1){ Write(0x00,0x00); sec=Read(0x02); //读取秒数据 min=Read(0x03);//读取分钟 hour=Read(0x04);//读取小时 hour &= 0x3f;//取出小时的有效位 day=Read(0x0... 阅读全文
posted @ 2013-03-30 16:01 醉剑客 阅读(672) 评论(0) 推荐(0) 编辑
摘要: 今天在看c陷阱与缺陷这本书时,无意中发现了这条语句,a+++++b,我最初的理解是a++ + +++b,但是在VS2010和IAR WorkBench上跑都是编译错误,于是我便查了资料:int a=1,b=1; int c=a+++++b; printf("c=%d/n",c); 这段代码是无法通过编译的。 解释如下: 1、首先介绍一些基本的概念 1)、大嘴法,又称贪心法: 如果(编译器的)输入流截止至某个字符之前都已经被分解为一个个符号,那么下一个符号将包括从该字符起之后可能组成一个 符号的最长字符串。也就是说,每一个符号应该包含尽可能多的字符。换句话说,编译器将程序分解 阅读全文
posted @ 2013-03-30 15:53 醉剑客 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 批量Load/Store指令操作过程中的地址变化方式这其中内存操作分为4种类型:(1)后增IA:每次数据传送后地址加4(2)先增IB:每次数据传送前地址加4(3)后减DA:每次传送数据后地址减4(4)先减DB:每次数据传送前地址减4而对于堆栈操作也对应有4种类型:(1)满递增堆栈FA:堆栈指针指向最后压入的数据,且由低地址像高地址生成(2)满递减堆栈FD:堆栈指针指向最后压入的数据,且由高地址像低地址生成(3)空递增堆栈EA:堆栈指针指向下一个将要放入数据的空位置,由低地址向高地址生成(4)空递减堆栈ED:堆栈指针指向下一个将要放入数据的位置,且由高地址向低地址生成对应关系如下: IA——EA 阅读全文
posted @ 2012-10-06 23:41 醉剑客 阅读(1171) 评论(0) 推荐(0) 编辑
摘要: ARM-Thumb 过程调用标准(转载)寄存器 ATPCS 指定用于特殊用途的寄存器 - 使用寄存器 r0-r3 将参数值传送到函数,并将结果值传出。可以用 a1-a4 来引用 r0-r3,以使此用法透明。请参阅第 3-9 页的参数传递。在子程序调用之间,可以将 r0-r3 用于任何用途。被调用函数在返回之前不必恢复 r0-r3。 如果调用函数需要再次使用 r0-r3 的内容,则它必须保留这些内容。 - 使用寄存器 r4-r11 存放函数的局部变量。可以用 v1-v8 来引用这些寄存器,以使此用法透明。在 Thumb 状态下,在大多数指令中只有寄存器 r4-r7 可以用于局部变量。 如果被调用 阅读全文
posted @ 2012-09-29 21:26 醉剑客 阅读(302) 评论(1) 推荐(0) 编辑