笔记整理

不知不觉工作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

作用:用于传送和暂存数据,也可以参加逻辑运算并保存运算结果,还有一些特殊的用途

算术逻辑运算符:太多啦

暂时写到这里吧,这本笔记就这么多啦,有些简略过去了,有用到的时候可以查询,记录一下其实也是提高一下自己解决问题的能力,不懂可以,关键要知道如何解决问题。

好啦,睡觉。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值