串口--=中断机制分析
来源:互联网 发布:主流社交软件 编辑:程序博客网 时间:2024/06/16 00:49
一般的中断处理机制是:从物理中断号,申请系统中断号,然后把系统终端号和一个事件绑定,然后在线程中等待中断发生,
串口也是同样的:
以下3个步骤都在CreateSerialObject函数或该函数调用的函数中实现的
1:得到系统中断号
// //在 CPdd2440Uart::Init()中有如下代码GetIsrInfo(&ddi);//直接从注册表查询系统中断号,
m_dwSysIntr = ddi.dwSysintr;
//,该函数在CreateSerialObject中被调用
//:pSerialPDD->Init(),pSerialPDD是一个指向CPdd2440Serial0实例的指针,CPdd2440Serial0的init函数是虚函数,
//他会调用父类的init函数return CPdd2440Uart::Init();
2:绑定中断和事件
//在 CPdd2440Uart::Init()中有如下代码:
m_hISTEvent= CreateEvent(0,FALSE,FALSE,NULL);//创建事件,
InterruptInitialize(m_dwSysIntr,m_hISTEvent,0,0);//绑定事件和系统中断号,
3:线程中等待事件发生
//启动线程过程如下:
在com_init函数中会调用SerInit,该函数又会调用CreateSerialObject会new CPdd2440Serial1(lpActivePath,pMdd, pHwObj);然后返回一个CSerialPDD类指针(实际上是CSerialPDD的子类),
在这个过程中构造函数会创建一个线程然后运行他:ThreadRun()/
//串口类CPdd2440Uart实现了CMiniThread线程类的虚函数ThreadRun()//当构造CMiniThread类的时候 ,CMiniThread就会创建一个线程,线程运行下面这个函数,
//这个函数不断的检测中断事件,然后处理中断事件
DWORD CPdd2440Uart::ThreadRun()
{
while ( m_hISTEvent!=NULL && !IsTerminated()) {
if (WaitForSingleObject( m_hISTEvent,m_dwISTTimeout)==WAIT_OBJECT_0) {
类继承关系:
class CSerialPDD : public CRegistryEdit
class CPdd2440Uart: public CSerialPDD, public CMiniThread {
class CPdd2440Serial0 : public CPdd2440Uart
函数调用关系:
COM_init() ->SerInit()-> CreateSerialObject() ->pSerialPDD=new CPdd2440Serial0() 和pSerialPDD->Init(),
- 串口--=中断机制分析
- ECOS中断机制分析
- linux中断机制分析
- Linux中断机制分析
- linux中断机制简单分析
- ARM Linux中断机制分析
- 详细分析Java中断机制
- 详细分析Java中断机制
- 详细分析Java中断机制
- 详细分析Java中断机制
- 详细分析Java中断机制
- 详细分析Java中断机制
- ARM Linux中断机制分析
- 详细分析Java中断机制
- 详细分析java中断机制
- 详细分析Java中断机制
- Linux 软中断机制分析
- 详细分析Java中断机制
- net-snmp常见错误
- struts2.0 标签+ftl标签
- sqlldr详解
- spring aop切面编程aspject切入
- C#正则表达式判断字符串是否为数值
- 串口--=中断机制分析
- centos 开启snmp服务
- DLL导出变量/对象/类
- 两张网卡分别连接不同的网络 保证各自的应用正常使用
- XSLT轻松入门第四章:XPath的语法
- Add Custom Info on Invoice Pdf for Magento
- 建立directshow的filter工程的过程
- 聚焦虚拟化安全之“无代理防毒”(视频)
- Content Provider使用