首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

调用子程序有哪些坑

补充知识: 西门子200沿应用 今天给工厂编辑一个小控制程序时,在编辑过程中疏忽了一个问题,图示: 请大家看看我红色框图中外部“位”及“沿”使用,开始编辑本意是当状态转换到自动操作时...当I0.0(自动_手动状态转换)= 1时,调用自动子程序上升沿并没有起作用。...于是,将自动子程序网络1段I0.0改为其它“位”地址I0.3后,程序能够正常运行,图示: 那么,上升沿无效原因就在这个调用子程序条件I0.0应用上是肯定。...这个过程中我曾经转换过I0.0状态转换开关,也就是说这个I0.0状态肯定是有0和1转换过程。...打开软件“F1”帮助,有这么一段提示的话,图示: 这里“首次扫描”,应该是指调用子程序第一次扫描周期中,这样,在同一个周期内作为同一个“位”地址,调用子程序及上升沿触发条件就无法满足,子程序初始化中上升沿无效也在

2.4K30
您找到你想要的搜索结果了吗?
是的
没有找到

程序中断和调用子程序有何区别

1)调用子程序发生时间是已知和固定,即在主程序调用指令(CALL)执行时发生主程序调用子程序过程,调用指令所在位置是已知和固定;而中断过程发生时间一般是随机,CPU在执行某一主程序时受到中断源提出中断申请...也可以说,调用子程序是程序设计者事先安排好,而执行中断服务程序是由系统工作环境随机决定。 2)子程序完全为主程序服务,两者属于主从关系。...主程序需要子程序时就去调用子程序,并把调用结果带回主程序继续执行。而中断服务程序与主程序二者一般是无关,两者是平行关系。...3)主程序调用子程序过程完全属于软件处理过程,不需要专门硬件电路,而中断处理系统是一个软、硬件结合系统,需要专门硬件电路才能完成中断处理过程。...4)子程序嵌套可以实现若干级,嵌套最多级数受计算机内存开辟堆栈大小限制;而中断嵌套级数主要由中断优先级来决定,一般优先级不会很大。

2.3K20

西门子808D系统如何调用子程序

西门子808D有两种操作编程模式,一种是西门子模式,一种是ISO模式(即广数,法拉克编程模式) 如何在西门子模式下调用子程序呢?...调用格式为 程序名+P,如该程序中为L2P2,即是调用了程序名为L2子程序2次 以下为程序运行结果,X轴从0走了两个100mm 2.如何在ISO模式下调用子程序呢?...首先将机床切换到ISO模式 建立如下两个程序,2为主程序,123为子程序 运行结果如下: 在命名子程序时需要注意一点是,系统内部参数20734对命名规则会产生影响, 如20734位6设置为...1时,子程序名不足4位时前面不能用0来填补,如我把子程序命名为0123 调用M98P0123L2 就会出现如下报警: 解决方法,一种是改变程序名,即直接命名子程序为123,或者需要通过修改系统内部参数...总之,如果在调用子程序过程中出现报警,尤其要注意子程序命名! 想了解更多西门子数控,可以关注一下公众号,随时欢迎您来电咨询!

2K80

S3C2440④ | ARM-THUMB子程序调用规则ATPCS

在GPIO实验中,我们首先编写汇编程序操作寄存器点亮LED,奈何汇编语言可读性和可移植性太差,所以编写启动代码,设置栈顶指针SP,然后调用C语言中main函数,转入C语言世界,由C语言访问控制寄存器...其实,对于ARM处理器,在ARM指令集汇编程序和THUMB指令集汇编程序中制定了子程序调用规则 —— ATPCS规则,这个规则包括: 寄存器使用规则 数据栈使用规则 参数传递规则 1.寄存器使用规则...) R13 sp 数据栈指针(指向栈顶) R12 ip 子程序内部调用scratch寄存器 R11 v8 ARM状态局部变量寄存器8 R10 v7 ARM状态局部变量寄存器7 R9 v6 ARM状态局部变量寄存器...R0-R3传递参数和返回结果; 子程序中通过寄存器R4-R11保存局部变量; 寄存器R12用作子程序间scratch寄存器; 寄存器R13用作数据栈指针,指向栈顶; 寄存器R14用作链接寄存器,保存子程序返回地址...5.实验总结 通过本实验掌握了ATPCS规则在实际开发中使用,在调用main函数时使用R0寄存器传递参数,总结如下: ARM处理器中子程序调用规则由ATPCS制定,包括寄存器使用规则,数据栈使用规则,

82720

【阿信子程序学习笔记(2)】什么是ABAQUS子程序

如题,在解释ABAQUS子程序是什么东东之前,需要明确几个问题: 什么是FORTRAN语言? 什么是FORTRAN程序? 什么是FORTRAN子程序? 什么是ABAQUS子程序?...FORTRAN程序一般包含主程序和若干程序模块,这些程序模块可以是子程序也可以是函数等类型。 什么是FORTRAN子程序?...通俗讲,子程序是可以被主程序调用模块,或者说过程,以SUBROURTINE语句开始,END语句结束。 什么是ABAQUS子程序?...ABAQUS子程序可以理解为是被ABAQUS软件定制过子程序,每一种特定子程序都有严格参数规定,不能更改哑元列表,向ABAQUS求解器主程序传递参数是固定,并且需要包含特定语句。...因此可看作是FORTRAN子程序子集。如下图所示。

1.3K20

【阿信ABAQUS子程序(7)】USDFLD

ABAQUS子程序USDFLD接口如下: SUBROUTINE USDFLD(FIELD,STATEV,PNEWDT,DIRECT,T,CELENT, 1 TIME,DTIME,...总的来说实现这个入门级任务子程序并不复杂,读者朋友可以尝试编写更为复杂程序,比如进行相变仿真和材料属性改变等等,限于篇幅,本文不再进行更为深入介绍。...补充说明内容: (1)在USDFLD中用到子程序GETVRM,可以读取积分点所有状态变量,详情请查阅帮助文档。 (2)在结果中显示自定义状态变量SDV名称。...通常而言,我们子程序中会有较多自定义状态变量SDV,在结果中显示为SDV1、SDV2。。。,很不方便,记不清楚。如需显示状态变量名称,则可按照下图所示,按照1,SDV名称,2,SDV名称。。...图4 修改结果文件中自定义状态变量SDV显示名称 【阿信ABAQUS子程序系列文章——未完待续】

3.5K10

DOS子程序汇编样例及详解

P命令:执行循环、重复字符串指令、软件中断或子例程。单步执行命令(step over),p命令,大多数情况与t一样,只有当遇到call调用子程序时候,p命令直接执行完这个程序。...mov ch,0 ;让ch 等于0,保证cx 值为[buf+1]对应字节值 lea di,buf+2 ;获取字符串首地址 call datacate ;调用子程序datacate...call ifyears ;调用子程序ifyears jc a1 ;当cf=1 时,跳转至A1 处执行 lea dx,n ;获取n 地址 mov ah,9 int 21h ;输出n 提示信息...cx ;恢复cx值 pop bx ;恢复bx值 ret ;子程序返回 ifyears endp ;子程序结束 code ends ;代码段结束 end start ;程序结束 (3)结果分析...【心得】 call指令和ret指令:CALL 指令调用一个过程,指挥处理器从新内存地址开始执行。过程使用 RET(从过程返回)指令将处理器转回到该过程被调用程序点上。

59920

中断服务子程序是如何被执行

中断执行示意图 中断响应及处理过程 回顾函数调用过程,子程序由主程序进行调用,从而完成执行。...但是中断服务子程序并没有被主程序进行调用,中断服务子程序执行是通过中断请求完成,也就是说中断服务子程序可以发生在主程序执行随意位置,那现在就面临一个问题了,如果当CPU 正在执行函数调用子程序内容时候产生了一个中断请求...,那么这个时候 CPU 将暂停执行函数调用子程序内容,转而去执行中断服务子程序内容,如果不进行额外处理,那么函数调用子程序相关数据将丢失,因此在执行中断服务子程序之前,CPU 必须要保存发生中断那个地方相关信息...中断响应示意图 通过上述示意图我们也可以看到在返回地址这个地方,中断服务子程序和函数调用子程序返回地址所遵循原理是一样,函数调用子程序返回地址是函数调用指令下一条指令地址,而在上述示意图中...,就是它返回值和形参都为 void ,这也是由原因,因为中断服务函数本来就不是由主程序进行调用,既然中断服务函数不会被其他函数所调用,那么其返回值和形参自然是 void 了,要使得 CPU 能够找到中断服务子程序

1.1K10

中断服务子程序是如何被执行

前言 笔者在 《程序是如何在 CPU 中运行(二)》中从 PC 指针寄存器角度分析了一级函数调用和二级函数调用执行过程,那么中断服务子程序又是如何被执行呢?两者相同点和不同点是什么呢?...中断服务处理完该事件以后,再回到原来被中止地方,继续原来工作,这样过程称之为中断,示意图如下: [中断执行示意图] 中断响应及处理过程 回顾函数调用过程,子程序由主程序进行调用,从而完成执行。...但是中断服务子程序并没有被主程序进行调用,中断服务子程序执行是通过中断请求完成,也就是说中断服务子程序可以发生在主程序执行随意位置,那现在就面临一个问题了,如果当CPU 正在执行函数调用子程序内容时候产生了一个中断请求...,那么这个时候 CPU 将暂停执行函数调用子程序内容,转而去执行中断服务子程序内容,如果不进行额外处理,那么函数调用子程序相关数据将丢失,因此在执行中断服务子程序之前,CPU 必须要保存发生中断那个地方相关信息...,函数调用子程序返回地址是函数调用指令下一条指令地址,而在上述示意图中 N 和 N+1 含义也是类似的,当 CPU 执行到第 N 条指令时候,CPU 接收到了一个中断请求,在执行完第 N 条指令之后

1.5K30

【阿信子程序学习笔记(4)】ABAQUS子程序该用哪个FORTRAN版本,77?90?95?

FORTRAN语言发展至今已经推出了若干版本,那么究竟采用哪个版本来编写ABAQUS子程序呢?...这是困扰很多同学问题,因为我们能买FORTRAN教材基本都是讲解FORTRAN90/95以上版本。但是直接采用90或者95以上版本编写子程序,ABAQUS却又不能识别。...这里需要说明一点,ABAQUS原生支持FORTRAN77语法形式,因此采用77写子程序肯定是没有问题,但是实际上更高级比如90也是能够支持,需要对.env文件进行修改,加入支持90语句即可。...就阿信老师(公众号:ABAQUS二次开发)经验来说,采用77语法即可,因为ABAQUS子程序有其特殊性,并不是一个完整意义上软件开发,只是为了实现理论公式植入或者实现某些算法,比如应力拉回算法等等...因此无需特别高级FORTRAN版本就能够实现子程序编写,换个角度想想,很多计算力学理论早已在有限元软件中实现,那时候有如今高版本FORTRAN语言吗?

1.1K20

汇编语言流程转移与子程序篇--05

和 ret 配合使用 具有子程序源程序框架 call 和 ret 配合使用 例:为call和ret指令设置栈 乘法:mul 指令 回顾:除法div 指令 用 mul 指令做乘法 应用实例 汇编语言模块化程序设计...指令 ---- loop指令 ---- 根据位移进行“相对”转移意义 ---- call指令和ret指令 模块化程序设计 ---- call 指令 将当前IP或CS和IP压栈,是为了子程序调用结束后...---- 返回指令:ret 和 retf 设计用来回到子程序调用结束后,源程序继续运行地址处 ---- call 和 ret 配合使用 具有子程序源程序框架 ---- call 和...ret 配合使用 注意观察在调用call指令和ret指令时,sp栈顶寄存器值变化 call需要使用栈,但是这里程序没有分配栈空间,是默认给出栈空间,因此这是非常危险,鬼知道默认空间,是不是在别的啥子地方被占用了...---- 参数和结果传递问题 ---- 用寄存器来存储参数和结果是最常使用方法 ---- 用内存单元批量传递数据 ---- 用栈传递参数 保存BP寄存器旧值原因,在于子程序中需要使用到

63510
领券