EGL--延时函数实现文件 DELAY.INC

博客给出了延时系统相关代码,包含初始化延时系统的InitTimer函数、创建延时请求的CreateTimer函数、判断延时是否到来的CheckTimeOut函数等,还涉及延时代码、释放资源及结束延时等功能函数,确保系统精确延时和资源合理利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
  DELAY.INC
*/

void InitTimer() /* 初始化整个延时系统,结束必须要调用EndTimer */
{
  int i;
  if( IsInit ) return;
  disable();
  old_int8=getvect(0x8);
  setvect(0x8,new_int8); /* 安装时钟中断,以保证精确的延时 */
  enable();
  for( i=0;i<MAXTIMERS;TICKS[i].id=-1,TICKS[i].timeout=0,TICKS[i].ticks=0,i++ );
  IsInit=1;
}

int CreateTimer(UINT dida,UINT id) /* 创建一个要求延时请求的例子 */
{ /* did滴达数;id这个例子的ID,ID 必须为一个整数,用来识别不同的例子 */
  int i;
  for( i=0;i<MAXTIMERS;i++ )
   if( TICKS[i].id==-1 && IsInit ){
     TICKS[i].id=id; TICKS[i].delayticks=dida; TICKS[i].timeout=0; return(OK);}
  return(ERROR); /* 未创建成功,原因为例子已满 */
}

int CheckTimeOut(UINT id) /* 在主程序中调用,用来判断id的例子延时到来否 */
{
  int i;
  for( i=0;i<MAXTIMERS;i++)
    if( TICKS[i].id==id )
      if( TICKS[i].timeout ){ TICKS[i].timeout=0;  return(OK); }
  return(ERROR);
}

void Delay(UINT dida) /* 一段用来代替delay函数的代码,延时以dida为单位 */
{
  TICKS[MAXTIMERS-1].id=1;
  TICKS[MAXTIMERS-1].delayticks=dida;
  TICKS[MAXTIMERS-1].ticks=0;
  TICKS[MAXTIMERS-1].timeout=0;
  while( !TICKS[MAXTIMERS-1].timeout );
  TICKS[MAXTIMERS-1].id=-1;
  TICKS[MAXTIMERS-1].timeout=0;
}

void ReleaseTimer(UINT id) /* 当要求的例子不用时,应释放,以节省资源 */
{
  int i;
  for( i=0;i<MAXTIMERS;i++ )
    if( TICKS[i].id==id ){ TICKS[i].id=-1; break; }
}

void EndTimer()  /* 当完成延时后应调用,否则在程序退出后,系统死机 */
{
  if( !IsInit ) return;
  disable();
  setvect(0x8,old_int8);
  enable();
  IsInit=0;
}

void interrupt new_int8()       /* 时钟中断,中断级别0 */
{ int i;
  (*old_int8)();
  for(i=0;i<MAXTIMERS;i++){
    if( TICKS[i].id>=0 )  TICKS[i].ticks++;
    if( TICKS[i].ticks>=TICKS[i].delayticks ){
      TICKS[i].timeout=1;
      TICKS[i].ticks=0;
      }
    }
}

### 如何编译并安装 egl-probe 对于 `egl-probe` 的安装问题,直接通过 `pip install` 或者 `pip build` 可能会出现一些错误,比如无法找到 `egl-probe.glad` 包以及 CMake 指令报错等问题[^1]。因此,推荐的方式是从 GitHub 下载源码并手动编译安装。 以下是具体的解决方案: #### 获取源码 访问 `egl-probe` 的官方仓库地址(假设其托管于 GitHub 上)。可以通过以下命令克隆项目到本地环境: ```bash git clone https://github.com/<username>/egl-probe.git cd egl-probe ``` #### 安装依赖项 在编译之前,确保已经安装了必要的开发工具和库文件。这些可能包括但不限于: - **CMake**: 编译过程中需要用到的构建工具。 - **Python 开发包**: 如果该工具涉及 Python 脚本,则需要对应的 Python 版本及其头文件。 可以运行以下命令来安装基础依赖项(具体名称可能会因操作系统而异): ```bash sudo apt-get update && sudo apt-get install cmake python3-dev libglvnd-dev ``` #### 配置与编译 进入项目的根目录后执行以下操作完成配置和编译过程: ```bash mkdir build && cd build cmake .. make ``` 如果一切正常,在此阶段应该不会遇到任何错误提示;如果有其他缺失组件,请按照错误信息补充相应软件包后再重试。 #### 安装至系统路径 当成功编译完成后,可将其正式安装到系统的标准位置以便全局可用: ```bash sudo make install ``` 至此,整个流程结束,您现在可以在终端中测试是否能够正常使用 `egl-probe` 命令。 --- ### 注意事项 需要注意的是,如果您正在处理图形驱动程序相关的工作,那么像 PyTorch 这样的框架也需要特别关注 GPU 支持情况。例如,PyTorch 应依据个人计算机上的 CUDA 版本来决定合适的安装方式[^2]。另外,某些情况下还涉及到 X Server 中关于设备探测的部分逻辑实现细节[^3],这可能是更深层次的技术背景知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值