04 2011 档案
摘要:Viewbin是微软提供的一个命令行工具,在WinCE5.0和WinCE6.0中,可以在"/WINCE600/PUBLIC/COMMON/OAK/BIN/I386"找到他。Viewbin工具可以用来查看NK.bin文件。它可以从NK.bin中获得这个NK image的大小,运行的起始地址等。还能查看到里面所包含的模块,应用程序及相关的信息。Viewbin的使用格式如下:viewbin [parameter] [filename]举几个例子吧:1. viewbin -nk.binViewBin... nk.binImage Start = 0xC02C0000, length
阅读全文
摘要:vs2005 wince dll调试只需要简单的几个设置就可以了:1 在dll project的property设置,deployment中的remote directory设置为目标文件夹,即编译好的dll需要copy to的地方2 在property中设置,Debugging中的remote executable设置为会调用你dll的应用程序(当然是wince的应用)。只要你的dll是用debug版本编译的就可以在dll的solution中调试了转自:http://www.rosoo.net/a/200812/7200.html
阅读全文
摘要:IssueTransfer调用相关在CHub类中的AttachDevice函数中,经常会调用到类CControlPipe的函数IssueTransfer。本文介绍一下函数CControlPipe::IssueTransfer的调用过程,以及具体实现。首先说说对函数CControlPipe::IssueTransfer的调用。首先调用函数CControlPipe::IssueTransfer: status = pControlPipe->IssueTransfer( . . . TransferDoneCallbackSetEvent, // 回调函数 m_hHubStat...
阅读全文
摘要:使用flashfxp有些日子了,也给我提供了不少的帮助。不过,今天还要说一点其不足之处。我使用的是版本3.0.2 build1043。最近需要使用别人制作的一个脚本。别人放到FTP上,我用flashfxp取下来,怎么操作,都无法正常执行。而对方测试的结果是,怎么操作,都OK。后来就把我的执行结果,以及使用的脚本Mail给了对方。对方拿到后,与其本地的脚本进行比较,发现有差别。然后我通过IE,将文件从FTP上copy下来。执行,OK。本着打破砂锅问到底的精神,就对通过IE拿到的文件和通过flashfxp拿到的文件进行了二进制比较。发现原文件中的0A,经过flashfxp处理过后,变成了0D0A。
阅读全文
摘要:转自:http://www.builder.com.cn/2008/0104/696370.shtml“new”是C++的一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘,下面我将把我了解到的与new有关的内容做一个总结。new的过程当我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。当然,如果我们创建的是简单类型的变量,那么第二步会被省略。假如我们定义了如下一个类A:class A{ int i;public: A(int _i) :i(_i*_i) {} void Say() { printf
阅读全文
摘要:堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。-程序结束后有系统释放4、文字常量区—常量字符串就是放在这里的。程序结束后
阅读全文
摘要:Fun(){char SourceBuffer[102400] = {0};}在一函数中如上,申请了100K栈内存,出现的问题是只要一调用该函数,主线程马上终止并退出。一开始就想到了栈空间不足的可能,重启手机,再调试,问题依旧,google了WIN CE内存,找到了答案。栈是Windows CE内存类型中最容易使用的(自行管理)。在Windows CE中的栈像其它操作系统一样,是被引用函数的临时变量存储区。操作系统也用栈来存储函数的返回地址和在异常处理中微处理器寄存器的状态。 在系统中,Windows CE给每个线程一个分离的栈。默认情况下,系统中每个栈大小最大被限制为58KB。在一个进程中.
阅读全文
摘要:USB驱动中,共包含128个address。其中,给设备用的有127(0 - 127)个。第0个address是保留给root hub用的。 这128个address是通过一个包含四个成员的DWORD数组来实现管理的。 DWORD m_dwFreeAddressArray[4]; 一个DWORD包含32个bit,4个DWORD刚好128个bit,每个bit代表一个address。通过判断相应bit的0/1,就可以知道该address是否已经被使用。 每个设备的address必须是唯一的。所以,在为一个设备分配address时,就需要寻找未被使用的address...
阅读全文
摘要:该函数是USB驱动中,监视hub状态改变的线程函数。Root hub的监视线程在OTG_Init函数被调用时创建。External Hub的监视线程在External Hub插入到Root Hub时被创建。在线程刚启动的时候(在线程循环体之外),需要进行一些操作。// before we can process port changes, we need// to power all ports// 函数PowerAllHubPorts在CRootHub类中的实现为空。// 在类CExternalHub中,遍历Hub上的所有Port,// 调用函数SetOrClearFeature设置各个Po
阅读全文
摘要:USB驱动中,设备相关的类及其继承关系如下: CDevice (ADT) / / CFunction CHub (ADT) / / CRootHub CExternalHub父类CDevice中包含一个虚函数成员EnterOperationalState。各个子类中,根据需要,对该函数有不同的实现。各个子类的EnterOperationalState函数被调用的地方也不相同。其中,CRootHub的该函数,在函数CEhcd::DeviceInitializ...
阅读全文
摘要:前面有篇文章说到如何获取U盘描述符,最终我们读取描述符的时候是通过以下语句实现的: lpudd[i] = m_ppCDeviceOnPort[i]->m_deviceInfo.Descriptor; 将驱动中保存的Desctiptor信息,赋值到传入的buffer中。因此,引出来一个问题,驱动中保存的Descriptor信息是什么时候产生的?宏观上来讲,应该是USB Device插入的时候,驱动从USB Device读取相关信息,并最终生成Descriptor。但具体是怎么实现的呢?今天就来分析一下这个过程。 首要的工作当然还是顺藤摸瓜,一步步找到入口。一步步跟踪下来,发现最初的启动点上
阅读全文