2011年8月15日
摘要: 智能手机是一种在手机内安装了相应开放式操作系统的手机。通常使用的操作系统有:Android、Symbian、Windows Mobile、iOS、Palm OS和BlackBerry OS还有MTK平台操作系统。他们之间的应用软件互不兼容。因为可以安装第三方软件,所以智能手机有丰富的功能。Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,是为移动终端打造的真正开放和完整的移动软件。 Android拥有众多优点。开放源代码开源让Android有了更多的可能,厂商可以针对用户进行专门的优化,从而避免了功能上的千篇. 阅读全文
posted @ 2011-08-15 22:47 dodo_bear 阅读(240) 评论(0) 推荐(0)
  2011年7月22日
摘要: NAND Flash结构与驱动分析一、NAND flash的物理组成NAND Flash 的数据是以bit的方式保存在memory cell,一般来说,一个cell 中只能存储一个bit。这些cell 以8个或者16个为单位,连成bit line,形成所谓的byte(x8)/word(x16),这就是NAND Device的位宽。这些Line会再组成Page,(NAND Flash 有多种结构,我使用的NAND Flash 是K9F1208,下面内容针对三星的K9F1208U0M),每页528Bytes(512byte(Main Area)+16byte(Spare Area)),每32个pa 阅读全文
posted @ 2011-07-22 09:35 dodo_bear 阅读(581) 评论(0) 推荐(0)
摘要: 编程修养 作者 doomhaha 什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对于速度快,只要编得多也就熟能生巧了。我认为好的程序员应该有以下几方面的素质: 1、有专研精神,勤学善问、举一反三。 2、积极向上的态度,有创造性思维。 3、与人积极交流沟通的能力,有团队精神。 4、谦虚谨慎,戒骄戒燥。 5、写出的代码质量高。包括:代码的稳定、易读、规范、易维护、专业。这些都是程序员的修养,这里我想谈谈"编程修养",也就是上述中的第5点。我觉得,如果我要了解一个作者,我会 阅读全文
posted @ 2011-07-22 09:32 dodo_bear 阅读(321) 评论(0) 推荐(0)
  2011年5月17日
摘要: 在写嵌入式设备驱动时,需要对寄存器端口进行设置,常常有如下的定义方式:#define VHPIC_R*((volatile __u32 *)(0x00 + HPI_R_BASE))当然后面的HPI_R_BASE是通过ioremap_nocache函数映射得到的。 作为一个宏定义语句,define是定义一个变量或常量的伪指令。首先(volatile __u32 *)的意思是将后面的那个地址强制转换成 (volatile __u32 *),__u32是无符号32位整形,volatile 是一个类型限定符,如const一样,当使用volatile限定时,表示这个变量是依赖系统实现的,以为着这个变量会 阅读全文
posted @ 2011-05-17 23:16 dodo_bear 阅读(1900) 评论(0) 推荐(1)
  2011年5月15日
摘要: 所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位,因此这里的原子实际是使用了物理学里的物质微粒的概念。 原子操作需要硬件的支持,因此是架构相关的,其API和原子类型的定义都定义在内核源码树的include/asm/atomic.h文件中,它们都使用汇编语言实现,因为C语言并不能实现这样的操作。 原子操作主要用于实现资源计数,很多引用计数(refcnt)就是通过原子操作实现的。原子类型定义如下:typedef struct{volatile int counter;}atomic_t; volatile修饰字段告诉gcc. 阅读全文
posted @ 2011-05-15 18:04 dodo_bear 阅读(3065) 评论(0) 推荐(0)
  2011年5月13日
摘要: 还是要打好基础,尤其是需要系统性地,不然很容易被K掉,这次是教训,相信自己,我可以做得更好。生活的意义不在于索取,而在于奋斗---顾拜旦 阅读全文
posted @ 2011-05-13 21:28 dodo_bear 阅读(147) 评论(0) 推荐(0)
  2011年5月6日
摘要: 无意中登录了下淘宝网,搜索一下《Linux设备驱动程序》换了其他关键字也是一样的,结果发现很多根本不和关键字相关的结果出现,难道淘宝才有了百度一样的策略,竞价排名啊?百度现在以竞价排名而被人诟病,难道淘宝步其后尘?当前利益与长远利益,不知道孰重孰轻... 阅读全文
posted @ 2011-05-06 19:52 dodo_bear 阅读(170) 评论(1) 推荐(0)
  2011年5月5日
摘要: 在我们进行设计当中,经常会使用到各种各样的存贮器来存贮信息。当我们保存的状态很少的时候,使用寄存器或者锁存器就足够了,而当我们需要存贮大量信息,并且这些信息的存取不是很随机的时候(如果完全随机,那就变成一个N*1的存贮器了,实际成了寄存器列),我们就可以考虑使用存贮器了。对于大量的存贮,我们往往可以得到面积、功耗、速度等方面的好处。特别是FPGA当中,因为可用的DFF较少(顺带提一下Xilinx的FPGA每个CLB包含4个Slice,每个Slice才包含2个Logic Cell,每个Logic Cell包括一个4输入查找表,1个DFF,1/4 tri buffer,1/4 SOP Chain. 阅读全文
posted @ 2011-05-05 21:58 dodo_bear 阅读(824) 评论(0) 推荐(0)
  2011年5月4日
摘要: 该函数修改task的状态为TASK_INTERRUPTIBLE,意味着改进程将不会继续运行直到被唤醒,然后被添加到等待队列wq中。 在wait_event_interruptible()中首先判断condition是不是已经满足,如果是则直接返回0,否则调用__wait_event_interruptible(),并用__ret来存放返回值---------------------------------------------------------------#define wait_event_interruptible(wq, condition) \({ \ int __ret = 阅读全文
posted @ 2011-05-04 22:29 dodo_bear 阅读(1321) 评论(0) 推荐(0)
摘要: 注解ioremap_nocacheioremap_nocache 把内存映射到CPU空间void __iomem * ioremap_nocache (unsigned longphys_addr, unsigned longsize);phys_addr要映射的物理地址size要映射资源的大小调用ioremap_nocache()函数之后,返回一个线性地址,此时CPU 可以访问设备的内存(已经将其映射到了线性地址空间中了),此时CPU可以使用访问内存的指令访问设备的内存空间(host bridge 判断访问物理内存还是设备中的内存),此时我们就可以像访问内存一样来访问设备的内存(寄存器)。i 阅读全文
posted @ 2011-05-04 19:58 dodo_bear 阅读(8829) 评论(2) 推荐(0)