自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(21)
  • 资源 (2)
  • 收藏
  • 关注

原创 necko 杂类

1.idl文件xpcom是necko的基础模块。在阅读文档的过程中基本会看到哪个模块调用了什么xpcom接口比如nsIInputStream。我习惯于从低向上的阅读代码,这样不至于带着太多的疑问去学习。所以习惯性的去寻找nsIInputStream接口的实现代码。一般认为对应的头文件为nsIInputStream.h,代码为nsIInputStream.cpp.头文件是找到了,但是实现却没

2013-12-28 17:00:25 419

原创 necko体系结构

Mozilla的网络库提供了一个可扩展的平台无关的API,可以用在从传输层到表示层几层中。其提供的通用可扩展的获取URL的框架支持常用的协议(http, ftp, file等),并提供了一种插入自定义协议的方式。Necko also provides an abstract "file descriptor" interface for low-level data access.Necko特

2013-12-28 14:30:31 563

原创 URIs and URLs

necko的一个主要功能就是负责将数据在不同位置间转移。necko采用URI来标记位置。一般来说,necko中一个URI对应一种协议处理模块,但是反过来,一个协议处理模块却可能对于多个URI类型。协议处理模块提供了特性于不同URI的信息和方法来创建URI.necko被有意的设计成插件模式,以便很容易的扩充协议类型。一般来说,增加一个协议类型,只需要实现nsIProtocolHandler 和

2013-12-25 23:45:35 442

原创 高端内存

现象:原因:解决办法:相关的知识:高端内存,内核管理内存时将内存划分为三个区间,分别为0-16MB的DMA ZONE, 16-896MB的NORMAL ZONE和高于896MB的HIGHMEM ZONE也就是高端内存.DMA ZONE比较好理解,因为有的硬件要求DMA时使用的内存必须处于物理内存的某一个范围。但是将为什么又将剩余的内存划分成了两个

2013-12-25 22:57:57 458

转载 建立 Gecko SDK

待完善

2013-12-18 23:25:58 474

翻译 mozilla源码目录结构说明

该文内容主要来源于mozilla的相关文档,可以参考 https://developer.mozilla.org/en-US/docs/Mozilla_Source_Code_Directory_Structuremozilla的许多项目都共享同一个源码目录,比如火狐浏览器,雷鸟等。这个源码树也包含了构建必须的工具和平台相关的东西。accessible该目录

2013-11-23 22:31:30 938

转载 nc命令

原帖地址  http://hi.baidu.com/flymai/item/7098a7ef36095fd1ea34c9bdNetCat,在网络工具中有“瑞士军刀”美誉,其有Windows和Linux的版本。因为它短小精悍(1.84版本也不过25k,旧版本或缩减版甚至更小)、功能实用,被设计为一个简单、可靠的网络工具,可通过TCP或UDP协议传输读写数据。同时,它还是一个网

2013-06-22 23:00:02 626

翻译 gdb的字符界面前端----CGDB(一)

在使用gdb调试的时候,通过list命令看代码总是感觉不方便.所以决定找一个比较好用的gdb前端.由于我是通过ssh远程登陆到服务器上开发的,所以只能使用字符界面的前端,这就不太好找了,大部分有名的前端都是图形界面的.我首先发现的是gdb内置的tui模式,但它不是很完善,最常见的毛病就是会花屏.后来发现了CGDB这个项目.CGDB概要:     CGDB是一个基于字符界面的gdb前

2013-06-16 12:21:47 4739

翻译 调试的九个黄金准则---UNDERSTAND THE SYSTEM(二)

3.知道什么是合理的       当你环视整个系统 的时候,你必须清楚正常情况下系统是如何工作的.如果你不知道特定处理器的字节序,你就不清楚你程序中的超过一个字节的数据是如何存放的.如果你不知道缓存是做什么的,你就会困惑你的内存写操作为什么没有立马执行.如果你不知道总线的三态(高电平,低电平,高阻抗),你可能会认为信号可能有问题.关于正常工作时的知识可以帮助你注意到不正常的情况.

2013-06-15 18:21:39 457

翻译 调试的九个黄金准则---UNDERSTAND THE SYSTEM(一)

UNDERSTAND THE SYSTEM------理解系统实例:我有一个兼职是做一个基于微处理器的阀门控制系统.其原理框图如下:系统通过磅称来进行采样,然后控制阀门,正像大多数工程师那样,我直接从我兄弟那拷贝了一个设计图.但是人品问题,我的不工作.当一个新的测量结果到来,去中断微处理器时,处理器却忽略了这个信号.由于是个兼职,我没有什么用于调试的工具,所以花

2013-06-15 00:41:29 569

翻译 调试的九个黄金准则----介绍

无意中看到一本书,Debugging—The Nine Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems,感觉对调试很有帮助,在此记录下自己的阅读,来加深印象.多年调试的经验告诉我两件事情: 1. 如果一个程序我们调试了很久却收效甚微,一般是因为我们在调试的过程中

2013-06-14 22:25:41 461

原创 等待队列

头文件在linux/wait.h实现在kernel/wait.c队列的结构:typedef struct __wait_queue wait_queue_t;struct __wait_queue {unsigned int flags;#define WQ_FLAG_EXCLUSIVE 0x01void *private;wait_queue_func

2012-12-30 16:31:24 156

原创 信号量

所有的同步操作的区别表现在锁争用时的处理状态,自旋锁在锁争用时进行忙等待.而信号量是将请求放入请求队列,然后挂起,睡觉.从上面可以看出,信号量的如下特点:1.等待信号量的进程在锁重新变为可用前会进入睡眠,所以信号量适用于锁被长时间持有的情况2.相反,短时间持有使用信号量不合适,因为维护等待队列,唤醒,睡眠的时间可能远大于持有锁的时间3.由于争用信号量时会睡眠,所以只能在进程上下文上

2012-12-30 11:24:21 135

自旋锁

自旋锁只能被一个执行线程占有,如果另一个线程去获取一个已经占有的自旋锁,则该线程会进行忙等待,可以理解为C中的while(1){检查锁是否可用}自旋锁的接口头文件为linux/spinlock.h  其实现在asm/spinlock.h注意:Linux下实现的自旋锁是不可递归的.如果你获取一个自己占用的自旋锁,则会造成死锁.自旋锁可以使用在中断中,中断中不可以使

2012-12-27 22:27:31 266

原创 Linux同步

如果我们能清楚的认识到哪些资源需要保护,那么去保护他们就很容易实现.难点在于我们很难认识到所有需要保护的资源.所以我们必须先清楚什么操作会造成并发,才能在写程序时考虑周全,用户空间:用户空间需要同步是因为用户程序会被调度程序抢占和重新调度,其情况如下:1. 1个高优先级的进程抢占一个低优先级的2.一个进程堵塞,调用程序选择了另一个进程执行3.信号处理程序是异步的,可能打断当前正

2012-12-27 21:14:10 128

原创 深入理解linux网络技术

对于一个给定的网络功能,你必须考虑如下几个方面:1.如果是你,你会如何设计相关的数据结构和锁机制2.是否需要在用户空间提供一个配置工具,如果需要则配置工具通过什么方式和内核交互,系统调用,ioctl命令还是其他的方式3.是否需要一个新的通知链或则是否需要注册到一个已经存在的链。linux中用链表管理一批数据,有时需要将自己的数据结构注册到链表上。4.他们和防火墙的关系如何5.是

2012-12-22 09:37:57 517

原创 高质量的子程序--代码大全阅读笔记

创建子程序的理由:1.管理复杂度      软件工程的首要任务是管理复杂度,没有谁的脑子里可以装下整个系统。管理复杂度的两个方法就是抽象和隐藏。子程序提供了这些功能,一旦你写完子程序,就不用再关        注里面的细节。2.引入中间易懂的抽象这个好理解,单独给你一段代码,你不一定立马可以知道他是干什么的。当将他方式一个函数中,再给函数起个好名字,只需扫一眼,看名字就知道它是想干

2012-12-21 00:47:16 427

原创 goahead源码分析---块内存分配--balloc.c文件

到目前为止,个人发现的goahead的一个特点:1、函数执行过程中需要的缓冲区都不是由外部提供的,而是什么时候需要什么时候申请,用完后释放,如果申请的内存存放了调用者需要的信息,则将这块内存的地址通过参          数 传出去,同时由调用者负责释放。2、在HTTP请求等地方频繁的进行了内存的申请和分配。也许系统的malloc函数有种种缺点,goahead提供了自己的块内存

2012-12-17 23:54:30 1883

原创 重构,一小步一小步来

爸爸:”你要好好学习”爸爸:”你不要早恋”爸爸:”你要****,不要*****”终于有一天,我忍不住问“当年我爷爷这样说过你吗?”爸爸:”嗯,说过”“你听他的话了吗?”“没有”爸爸回答. 有些路,走过之后,才知道那是弯路,哪怕以前别人告诉过你很多遍. 重构我以前在书上看到过,有些原则要遵循.以为记住了,但是实践的时候却抛之不顾,现在,重构要遵循多少我不知

2012-07-18 22:33:52 384

原创 统一的访问接口

在嵌入式开发中,难免要和硬件打交道,方式就是读写相应的寄存器。为了便于维护,肯定是要模块开发,分层开发。很多东西都知道,关键是执行。工作压力大,赶进度等等就降低了对代码质量的要求。这里记录下自己的感受,免得以后再犯。针对寄存器的操作肯定是是要封装到函数内部的,提供一个接口,如read_reg(),write_reg();。有时,我们会对这些基本接口进一步封装,变为ReadReg()

2012-07-02 21:45:13 748

原创 数据类型的一点认识

内存不过是一个存储空间,基本存储单位是一位,但是习惯上八位一组称一字节。每一位只能是0或1。系统从来不知道这一堆01的意义,由我们告诉它如何进行解释。比如如下两字节内容地址         数据0x8000   0x310x8001   0x00        假如我们用一个char型指针指向 0x8000单元,char类型占一字节,所以系统只会对0x8000单元的数据进行解释

2012-06-07 21:22:01 239

编程珠玑 第二版

编程珠玑 一本很好进阶阅读 适合细读 反复读

2012-07-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除