不知不觉工作3个多月了,也记录了一些东西,换了一个笔记本子,将老的本子上的东西大概整理一下,它就可以去了。。。嘿嘿!
估计会很乱吧,因为每天都记录的不一样,什么都有。哎,顺序以后再调吧,先一天一天来,将重要的东西记录下来。
#if和#ifdef的用法:
#if要求是一个表达式,为真则执行里面的代码
#ifdef 只要求是否定义,并不关心这个量的值是什么
结尾都是#endif
设备环境类(Device Context)
CDC 基类
能访问整个显示设备,封装了所有图形的输出函数
CPaintDC类
用于模拟相应windows VM_PAINT的设备环境 CPaintDC dc(this)
CWindowDC
用于窗体客户区和非客户区
CClientDC
客户区
CDC作图时可用selectObject选工具,如:CPen类,CreatePen()函数
winCE进程无优先级,但是线程可以有8种不同的优先级,小心使用最高优先级,不可能被抢占,会造成饿死。
了解handle CreateThread()函数 以及线程函数DWORD WINAPI ThreadProc(LPVOID lpArg);
wince 若用Group Box,若要显示其中的控件,可以通过ctrl + D然后按Tab改变各个控件的顺序,将group box 放到最后,这样就可以显示了。
线程同步
用事件, 了解createEvent(),setEvent(),resetEvent(),waitForSingleObject()函数
利用互斥同步 createMutex()
用临界区 InitializeCriticalSection()EnterCriticalSection()LeaveCriticalSection()
信号量同步 CreateSemaphore()ReleaseSehmaphore()
文件函数
CreateFile()readFile()WriteFile()SetFilePointer()Seek()
#pragma pack(n) c编译器按照n字节对齐
#pragma pack() 取消自定义自己对齐方式
如:
struct sample
{
char a;
double b;
};
这是默认8字节对齐,也就是最大的
sizeof(sample) = 16
但是如果在程序前面加上#pragma pack(1)那就是1字节对齐,sizeof(sample) = 9 了。
内存映射文件:为了不同进程之间的通讯,CreateFileForMapping() MapViewofFile()
串口编程:
这里将串口模拟成文件了,handle hcomm = CreateFile(_T("COM1:"), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
配置串口的函数:GetCommState() SetCommState();
读写的话就是文件的读写函数了,上面已经说过了。
windows CE 驱动简介:
分层驱动 DDI <-> mdd-ddsi-pdd <-> 硬件
单层驱动 适合实时性要求高的场合
内置驱动 被GWES.exe加载它
流驱动 任何可以接收数据为主要功能的外围设备<->流驱动
驱动开发步骤
对硬件工作原理、功能特性以及工作方式等更充分认识。
访问外设方式、处理中断方法、处理DMA方法、内存访问法、同步与异步操作
选用合适驱动模型
编写代码
调试
中断处理
IRQ 物理中断请求
SYSINTR 逻辑中断
ISR 中断服务例程
IST 中断服务线程
ISR功能:
在数据丢失或被另一中断覆盖的情况下,ISR能把数据从设备读取到软件的缓冲区
ISR清除设备中的中断条件
ISR向内核返回一个逻辑中断号SYSINTR
内核设置一个中断时间来解决对ISR的响应IST的请求
调度器调度相应的IST完成相应中断处理
总线枚举器(BUSEnum.dll)装载卸载功能,通过读寄存器的接口可以发现新硬件
蓝牙 HCI 传输层
关闭连接 HCI发出HCI_CloseConnection命令
打开连接 初始蓝牙栈调用HCI_SetCallback(是否插入或者拔出)
插入 调用 HCI_openConnection 返回True 调用HCI_ReadHciParameters
注意:当别人给你一个升级或者更新的文件的时候,不要武断地覆盖,要看看自己的和他的有什么区别,否则会出大错。
如果你感觉不可能的事情发生了,那么不要停留在这里,想想是不是其他方面导致的,肯定不会发生不可能的事情,多方面思考啊。
GPSID这个已经写过了文档了
这个时候开始写一个服务程序,前期也是查了很多资料,遇到了很多困难。比如:不知道服务怎么写,注册表,以及dll加载好像要数字签名等问题,这些都通过自己查资料,发帖子问问题,解决了。不过前期也花费了很多时间啊。
服务是底层,然后有一层API,然后是上层的应用层,其实微软的很多驱动程序都是这么写的,主要是为了代码的复用,同时也为了便于维护。
以后有时间把服务分析写一下吧。
blddemo -qbsp快速编译并生成镜像
这次是注册表的值写错了,走了很多弯路啊,注册表的名字竟然没有加引号,并且还没有放到指定的模块中,就是if和endif中间,结果错了很久,一定要注意,每一点的粗心都会造成很大的麻烦,一定要细心啊。
这次进行学习了kitl调试。
sources文件和makefile之间的关系请参看揭开makefile的神秘面纱
服务自启动,用一些配对的函数
createfile和deviceIOcontrol
getservicehandle和serviceIOcontrol
activeservice和registerservice
Eboot和Nboot讲解已经发过博客了
学习一下jTAG烧nboot和eboot
这个时候转正啦,可以拿正常工资啦,嘿嘿
自己提交东西的时候一定要打开看一下,否则没成功,搞得领导还要找你,对自己对别人都不好。
串口打开失败,首先看看注册表active下面有没有你要打开的串口,如果没有,那么就是dll都没加载,那么肯定打不开,如果加载了,那么很有可能你在哪个地方打开过了。这个一定要有解决问题的逻辑,否则很难找到错误在哪里。
XIP: execute In Place --- Nor flash,可以运行,不用加载。不像Nand flash。
wince驱动开发、配置文件、bootloader分析等都已经写过博客了
combox的问题也解决了,就是那个下拉菜单要双击,写函数可以获得当前的选项。
还有就是0x11和0x3完全是两回事啊,这种错误很低级,但是又很高级,这让我受到了批评,不细心啊,但是我又很容易忘,在这里记录一下。
下面是汇编语言的一些笔记啦!
汇编特性:
机器相关
执行的高效率
编写程序复杂
调试复杂
cpu资源和存储器
16位的 32位
4个数据寄存器:ax ,bx, cx, dx eax, ebx, ecx, edx
4个段寄存器 es,cs,ss,ds ....... fs gs
2个变址和指针寄存器 si di esi edi
2个指针寄存器 sp bp esp ebp
1个指针寄存器 ip eip
1个标志寄存器 flags eflags
通用寄存器: ax al ah bx cx cl dx si di bp sp ip eip flag eflag
作用:用于传送和暂存数据,也可以参加逻辑运算并保存运算结果,还有一些特殊的用途
算术逻辑运算符:太多啦
暂时写到这里吧,这本笔记就这么多啦,有些简略过去了,有用到的时候可以查询,记录一下其实也是提高一下自己解决问题的能力,不懂可以,关键要知道如何解决问题。
好啦,睡觉。