100分求助wince驱动问题 求助

wmdsummer   2008-8-26 23:59 楼主
在串口驱动中有这样一段程序:
         EnterCriticalSection(&(pHWHead->RegCritSec));
        try {
                CLEARREG(pHWHead, rUMCON, SER2410_RTS);
        }
        except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
                EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
                // Just exit
        }
        LeaveCriticalSection(&(pHWHead->RegCritSec));


其中CLEARREG的定义是:#define CLEARREG(pInfo, reg, value) (pInfo->s2410SerReg->reg &= ~value)
请问:
1、这段程序为什么要放在临界区中,它有什么特别之处吗
2、try 和 except的含义是什么
3、GetExceptionCode 这个API是怎么定义的?
谢谢各位!

回复评论 (9)

1、单看代码
应该是为了保护s2410SerReg->reg或者s2410SerReg这个公共资源。

2、try等是异常管理机制的东西,请仔细找文档看一下,这个是要弄明白的。
3、同2.
点赞  2008-8-27 08:54
mark学习问题1
点赞  2008-8-27 09:02
1)你的驱动/bsp 有多处要对pHWHead->s2410SerReg->rUMCON进行读写操作,所以你这里要加临界保护
2)_try{
        guarded section(A)
       }
   _except(val){
         exception handler(B)
     }
如果A的运行当中出现了某些异常,那么判断val的值来处理这个异常。
一般这个val为EXCEPTION_EXECUTE_HANDLER,即跳到当前的异常处理B来运行。
val的其他值,你看看msdn上的解释吧。
3)GetExceptionCode 只是返回异常类型,EXCEPTION_ACCESS_VIOLATION是其中一个

点赞  2008-8-27 10:41
感谢各位:
那就是说我的这段程序中

guaaded section(a)
部分出现异常后(请问什么算是异常,什么情况下可能会出现异常,会用到try

在except那判断异常类型后
   就Just exit 了事?
是这样吗?
点赞  2008-8-27 11:45
学习
点赞  2008-8-27 13:06
再顶一下
点赞  2008-8-27 14:24
引用: 引用 4 楼 wangxin_801115 的回复:
感谢各位:
那就是说我的这段程序中

guaaded section(a)
部分出现异常后(请问什么算是异常,什么情况下可能会出现异常,会用到try)

在except那判断异常类型后
  就Just exit 了事?
是这样吗?



------------------------------------你真是打破砂锅问到底啊。哈哈。俺们要再回去补习C语言啊。哈哈。
这两天终于把一些启动代码看了个大概,慢慢来哦。
点赞  2008-8-27 14:48
异常和处理器有关的, 一般有数据存取异常:访问到不存在的地址,预取指令异常:取到错误的指令,除0异常等等
一旦异常发生相当于系统发生了一个中断,自动跳到异常处理程序运行.
操作系统也会自定义一些异常. try expect 相当于插入了一个自己的异常处理程序,当发生某些异常的时候不由操作系统的默认处理程序来处理,而由自己来处理
至于lz的代码,可以认为是代码的作者的一种风格,希望自己的程序更健壮.不一定是必要的,所以异常处理是空的.
点赞  2008-8-27 15:12
非常感谢各位!!!
点赞  2008-8-27 15:22
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复