建设一个机械公司网站多少钱1688官网首页

web/2025/10/7 21:57:45/文章来源:
建设一个机械公司网站多少钱,1688官网首页,求个网站带图片素材,如何做网页设计视频播放中断处理是整个运行系统中优先级最高的代码#xff0c;可以抢占任何任务级代码运行。中断机制是多任务环境运行的基础#xff0c;是系统实时性的保证。几乎所有的实时多任务操作系统都需要一个周期性系统时钟中断的支持#xff0c;用以完成时间片调度和延时处理。VxWorks 提…中断处理是整个运行系统中优先级最高的代码可以抢占任何任务级代码运行。中断机制是多任务环境运行的基础是系统实时性的保证。几乎所有的实时多任务操作系统都需要一个周期性系统时钟中断的支持用以完成时间片调度和延时处理。VxWorks 提供tickAnnounce()由系统时钟中断调用周期性地触发内核。 为了快速响应中断VxWorks的中断服务程序ISR运行在特定的空间。不同于一般的任务中断服务程序没有任务上下文不包含任务控制块所有的中断服务程序使用同一中断堆栈它在系统启动时就已根据具体的配置参数进行了分配和初始化。在ISR中能使用的函数类型与在一般任务中能使用的有些不同主要体现在 1ISR中不能调用可能导致blocking的函数例如 (a)不能以semTake获取信号量因如果该信号量不可利用内核会试图让调用者切换到blocking态 (b)malloc和free可能导致blocking因此也不能使用 (c)应避免进行VxWorks I/O系统操作除管道外 (d)应避免在ISR中进行浮点操作。 2在ISR中应以logMsg打印消息避免使用printf 3理想的ISR仅仅调用semGive等函数其它的事情交给semTake这个信号量的任务去做。一个ISR通常作为通信或同步的发起者它采用发送信号量或向消息队列发送一个消息的方式触发相关任务至就绪态。ISR几乎不能作为信息的接收者它不可以等待接收消息或信号量。 11.中断服务程序 VxWorks中与中断相关的重要API函数或宏有 1intConnect()中断连接将中断向量与ISR入口函数绑定 SYNOPSIS STATUS intConnect    (     VOIDFUNCPTR * vector,/* interrupt vector to attach to  */     VOIDFUNCPTR  routine, /* routine to be called     */     int    parameter /* parameter to be passed to routine */   ); intConnect只是调用了下文将要介绍的intHandlerCreate()和intVecSet()函数。 2INUM_TO_IVEC(intNum)将中断号转化为中断向量的宏。与INUM_TO_IVEC对应的还有一个IVEC_TO_INUM(intVec)实现相反的过程。INUM_TO_IVEC和IVEC_TO_INUM的具体定义与特定的BSP有关例如 /* macros to convert interrupt vectors - interrupt numbers */ #define IVEC_TO_INUM(intVec)  ((int) (intVec)) #define INUM_TO_IVEC(intNum)  ((VOIDFUNCPTR *) (intNum)) 结合1、2可知一般挂接一个中断服务程序的调用为 intConnect(INUM_TO_IVEC(INTERRUPT_LEVEL),(VOIDFUNCPTR)interruptHandler,i); 例1中断服务程序 /* includes */ #include vxWorks.h #include intLib.h #include taskLib.h #include sysLib.h #include logLib.h    /* function prototypes */ void interruptHandler(int); void interruptCatcher(void);    /* globals */ #define INTERRUPT_NUM 2 #define INTERRUPT_LEVEL 65 #define ITER1 40 #define LONG_TIME 1000000 #define PRIORITY 100 #define ONE_SECOND 100    void interruptGenerator(void) /* task to generate the SIGINT signal */ {  int i, j, taskId, priority;  STATUS taskAlive;     if ((taskId taskSpawn(interruptCatcher, PRIORITY, 0x100, 20000, (FUNCPTR)      interruptCatcher, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)) ERROR)      logMsg(taskSpawn interruptCatcher failedn, 0, 0, 0, 0, 0, 0);     for (i 0; i ITER1; i)     {      taskDelay(ONE_SECOND); /* suspend interruptGenerator for one second */      /* check to see if interruptCatcher task is alive! */      if ((taskAlive taskIdVerify(taskId)) OK)      {       logMsg(Interrupt generatedn, 0, 0, 0, 0, 0,        0);       /* generate hardware interrupt 2 */       if ((sysBusIntGen(INTERRUPT_NUM, INTERRUPT_LEVEL)) ERROR)        logMsg(Interrupt not generatedn, 0, 0, 0, 0, 0, 0);      }      else       /* interruptCatcher is dead */       break;     }     logMsg(n***************interruptGenerator Exited***************nnnn, 0,      0, 0, 0, 0, 0);    }    void interruptCatcher(void) /* task to handle the interrupt */    {     int i, j;     STATUS connected;     /* connect the interrupt vector, INTERRUPT_LEVEL, to a specific interrupt     handler routine ,interruptHandler, and pass an argument, i */     if ((connected intConnect(INUM_TO_IVEC(INTERRUPT_LEVEL), (VOIDFUNCPTR)      interruptHandler, i)) ERROR)      logMsg(intConnect failedn, 0, 0, 0, 0, 0, 0);     for (i 0; i ITER1; i)     {      for (j 0; j LONG_TIME; j)       ;      logMsg(Normal processing in interruptCatchern, 0, 0, 0, 0, 0, 0);     }     logMsg(ninterruptCatcher Exitedn, 0, 0, 0,      0, 0, 0);    }    void interruptHandler(int arg) /* signal handler code */    {     int i;     logMsg(-------------------------------interrupt caughtn, 0, 0, 0, 0, 0, 0);     for (i 0; i 5; i)      logMsg(interrupt processingn, 0, 0, 0, 0, 0, 0);    } 程序中的sysBusIntGen()调用将产生一个bus中断这个函数与特定的BSP密切相关其原型为 STATUS sysBusIntGen      (      int intLevel, /* bus interrupt level to generate */      int vector /* interrupt vector to generate (0-255) */      ); 为了在同一中断源的几种中断服务程序中进行切换我们应使用如下方式 vector INUM_TO_IVEC(some_int_vec_num); oldfunc intVecGet (vector); newfunc intHandlerCreate (routine, parameter); intVecSet (vector, newfunc); ... intVecSet (vector, oldfunc); /* use original routine */ ... intVecSet (vector, newfunc); /* reconnect new routine */ 其中intHandlerCreate函数的原型为 FUNCPTR intHandlerCreate ( FUNCPTR routine, /* routine to be called */ int parameter /* parameter to be passed to routine */ ); 它被用于创建一个中断服务程序在此之后通过intVecSet()函数我们就可以将intHandlerCreate()创建的结果与中断向量绑定intVecSet()函数的原型为 void intVecSet ( FUNCPTR * vector, /* vector offset */ FUNCPTR function /* address to place in vector */ ); 12.中断控制12.1中断执行过程 硬件中断发生时代码运行的上下文会发生切换在进入中断处理前需要保存当前运行的上下文。对于一些无RTOS的单片机系统这些工作由硬件和编译器共同完成向量表在编译完成后就填充完成再写入存储器中系统运行时不能修改向量表来重新绑定中断入口函数。在VxWorks系统中除了需要保存通常的寄存器环境外还需要完成栈切换等另外还要求中断入口运行时绑定、平台移植性、中断嵌套等所以VxWorks本身也参与中断封装的管理。VxWorks进行中断封装的伪代码如下 * 00 e8 kk kk kk kk call _intEnt * 通知内核 * 05 50  pushl %eax * 保存寄存器 * 06 52  pushl %edx * 07 51  pushl %ecx * 08 68 pp pp pp pp pushl $_parameterBoi * push BOI param * 13 e8 rr rr rr rr call _routineBoi * call BOI routine * 18 68 pp pp pp pp pushl $_parameter * 传中断入口参数 * 23 e8 rr rr rr rr call _routine  * 调用中断处理C函数 * 28 68 pp pp pp pp pushl $_parameterEoi * push EOI param * 33 e8 rr rr rr rr call _routineEoi * call EOI routine * 38 83 c4 0c addl ?, %esp  * pop param * 41 59  popl %ecx * 恢复寄存器 * 42 5a  popl %edx * 43 58  popl %eax * 44 e9 kk kk kk kk jmp _intExit * 通过内核退出 12.2中断使能/禁止 VxWorks提供两个重要API 1intLock()使中断禁止 2intUnlock()开中断 可以用intLock/intUnlock提供最高级别的互斥机制以保护临界区域不被打断例如 oldlevel intLock(); /* 写XXX寄存器 */ XXX_REG_WRITE(pChan, XXX_UBRDIV, XXX_CNT0_115200 | XXX_CNT1_VAL);  intUnlock(oldlevel); 用intLock()禁止中断后当前执行的任务将一直继续中断处理和任务调度得不到执行直到该任务主动调用intUnLock解锁中断为止。对于intLock和unLock的使用我们要注意如下几点 1不要在中断禁止期间调用vxWorks系统函数否则有可能意外使能中断违反临界代码的设计意图。另外intLock也不能屏蔽调度如果在中断禁止代码区使用系统调用就可能出现任务调度其他任务的运行可能会解锁中断 2中断禁止对系统的实时性有很大的影响在解决执行代码和中断处理互斥问题才可使用并且应使中断禁止时间尽可能的短。对于任务间的互斥问题可以使用taskLock()和taskUnLock()来解决 3有些CPU中断是分级我们可以用intLockLevelSet()和intLockLevelGet()来操作中断闭锁的级别。缺省情况下taskLock禁止所有等级的中断。 至此我们可以对“互斥”问题进行一个系统的总结主要有如下几种方法 1intLock禁止中断解决任务和ISR之间的互斥问题 int lock intLock();  //. . critical region that cannot be interrupted  intUnlock(lock); 2taskLock禁止优先级抢占调度当当前任务正在运行时除了中断服务程序外高优先级的任务也不允许抢占CPU taskLock();  //. . critical region that cannot be interrupted .  taskUnlock(); 3二进制信号量或互斥信号量。 semTake (semMutex, WAIT_FOREVER);  //. . critical region, only accessible by a single task at a time . semGive (semMutex); 总的来说在实时系统中采取“禁止中断”的方法会影响系统对外部中断及时响应和处理的能力而“禁止优先级抢占调度”方法阻止了高优先级的任务抢先运行在实时系统中也是不适合的。因此信号量无疑是解决互斥问题的最好方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/88714.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

竞价网站服务器做网站界面一般用什么来做

1. Spring单例Bean是不是线程安全的? Spring单例Bean默认并不是线程安全的。由于多个线程可能访问同一份Bean实例,当Bean的内部包含了可变状态(mutable state)即有可修改的成员变量时,就可能出现线程安全问题。Spring容器不会自动…

电子商务网站建设与管理课程的意义湖南平台网站建设制作

01 传统企业数字化转型面临诸多挑战 即将过去的2023年,chatGPT大模型、数据资产入表等事件的发生,标志着数字经济正在加速发展。数字经济是人类社会继农业经济、工业经济之后的第三种经济形态,将推动生产方式、生活方式和治理方式深刻变革&a…

网站建设方案功能寻找南京帮助做网站的单位

目录 1 概述 2 数学模型 2.1 问题表述 2.2 DG的最佳位置和容量(解析法) 2.3 使用 GA 进行最佳功率因数确定和 DG 分配 3 仿真结果与讨论 3.1 33 节点测试配电系统的仿真 3.2 69 节点测试配电系统仿真 4 结论 1 概述 为了使系统网损达到最低值&a…

免费模板简历在哪下太原网站优化步骤

目录 背景介绍及应用 学习目标 原理 Sobel算子和Scharr算子 Laplacian 算子 代码示例 重要提醒 背景介绍及应用 图像的梯度是指图像中每个像素点的强度变化情况。计算图像的梯度可以帮助我们了解图像中物体的边界和纹理等信息。梯度在计算机视觉和图像处理领域有着广泛…

网站推广淘宝联盟怎么做花生棒做网站

目录 一、下载软件安装包 二、运行安装包后 一、下载软件安装包 打开vscode官方网址,找到下载界面 链接如下:Download Visual Studio Code - Mac, Linux, Windows 我是windows电脑,各位小伙伴自己选择合适的版本,点击下载按钮…

哪个网站收录排名好个人做网站做什么样的话

一、概述两个月前,我们发布了搭载独立开发的“深度桌面环境”的 Linux Deepin 12.12 Alpha 版本。现在,Linux Deepin 12.12 Beta 版本来了!Beta 版本集成了 Linux Deepin 两个多月以来的工作成果,带来了许多激动人心的新功能与特性…

建设银行辽宁省分行网站esuwiki wordpress

文章目录 前言一、I2C的结构层次1.1 怎样在两个设备之间传输数据1.2 I2C如何传输数据1.3 硬件框图1.4 软件层次 二、IIC协议2.1 硬件连接2.2 I2C 总线的概念2.3 传输数据类比2.3 I2C信号2.4 I2C数据的含义 总结 前言 I2C(Inter-Integrated Circuit)是一…

徐州网站建设找哪家小程序制作单位

Vite创建Vue项目后遇到的问题 前言问题问题一问题二问题三问题四 补充 前言 Vite 创建 Vue项目还算顺利,但创建后不是万事大吉,遇到了各种的问题。现在就自己遇到的问题做个总结。 问题 问题一 创建后,在未修改任何配置的前提下&#xff0c…

模块网站需要多少钱苏州建设银行官方网站

目录 1.拦截器1.1.什么是拦截器?1.2 拦截器的API1.3 拦截器的执行顺序1.5 自定义拦截器1.5 登录拦截器案例 2.文件上传2.1 添加依赖2.2 配置文件上传解析器2.3 编写控制器2.4 编写jsp页面2.5 注意事项 3.全局异常处理器3.1 异常处理思路3.2 创建异常处理器3.3 编写异…

图片渐隐 网站头部flash建设隔热网站

一 Button 按钮 Button是按钮组件,通常用于响应用户的点击操作,可以加子组件 Button(我是button)Button(){Text(我是button)}type 按钮类型 Button有三种可选类型,分别为胶囊类型(Capsule)、圆形按钮(Circle&#xf…

无锡seo报价seo交流博客

网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:document.body.offsetWidth (包括边线和滚动条的宽) 网页可见区域高:document.body.offsetHeight(包括边线的宽) 网页正文全…

餐饮品牌设计网站wordpress 免备案空间

摘 要 随着我国经济的飞速发展,促使各种能源使用入不敷出,尤其是最主要的能源,煤炭石油资源不断消耗与短缺,因此人类寻找其他替代能源的脚步正在加快。而太阳能则具有无污染﹑可再生﹑储量大等优点,且分布范围广&…

查网站服务器ip 被k简单asp网站源码

套餐管理 1 任务2 新增套餐2.1 需求分析和设计页面原型和业务规则接口设计setmeal和setmeal_dish表设计 2.2 代码开发2.2.1 根据分类id查询菜品DishControllerDishServiceDishServiceImplDishMapperDishMapper.xml 2.2.2 新增套餐接口SetmealControllerSetmealServiceSetmealSe…

淮安市广德育建设网站工友洗手粉网站建设中

声明:只是记录,初心是为了让页面更好看,会有错误,我并不是一个会记录的人,所以有点杂乱无章的感觉,我先花点时间把视频迅速过掉,再来整理这些杂乱无章的内容 计划是一天更新一点 待做的东西 完成博客记录把完成后的博客记录拆成单…

酒店网站建设必要性wordpress伪静态作用

一、贪心算法 贪心算法是一种解决优化问题的算法设计方法,其核心思想是在每一步选择当前状态下的最优解,从而希望最终达到全局最优解。下面将介绍贪心算法的原理、实现步骤,并提供C#和Java的实现示例。 1.1 原理: 贪心算法的原…

万峰科技著.asp.net网站开发四酷全书电子工业出版社做网站卖东西送上门

番茄钟番茄工作法是简单易行的时间管理方法。使用番茄工作法,选择一个待完成的任务,将番茄时间设为25分钟,专注工作,中途不允许做任何与该任务无关的事。直到番茄时钟响起,然后进行短暂休息一下(5分钟就行&…

有没有必要给企业做网站顺义哪有做网站厂家

Unable to start embedded Tomcat(已解决) 一、背景介绍二、原因分析2.1 网络上整理2.2 其他原因 三、解决方案 一、背景介绍 spring boot(v2.5.14) maven idea 启动项目 之前项目一直启动的好好的,都能正常运行。重启的时候突然就不能启…

网站建设的多少钱建网站盈利的几种方式

摘要:arduino环境下对esp32蓝牙编程时会遇到BLEUUID does not name a type错误,本文介绍解决方法。 硬件设备是安信可ESP32-S模组。 错误发生在代码最开始的地方,include了一个蓝牙设备头文件,然后定义了UUID,注意看&a…

医院网站可以自己做吗化工网站模板

Problem - B - Codeforces 题目大意:给物品数量 n n n,体积为 v ( 0 ≤ v ≤ 1 e 9 ) v_{(0 \le v \le 1e9)} v(0≤v≤1e9)​,第一行读入 n , v n, v n,v,之后 n n n行,读入 n n n个物品,之后每行依次是体…

2018年网站优化怎么做兰州seo网站排名

前端学习笔记 7:小兔鲜 准备工作 创建项目 创建项目: npm init vuelatest相关选项如下: 在src目录下添加以下目录: 别名路径联想 默认情况下在 VSCode 中输入import xxx from ...时不会启用路径联想功能,要启用需…