技术论坛

 问多次调用含跳转的子程序

返回主题列表
作者 主题
芳季
至圣

经验值: 66275
发帖数: 14654
精华帖: 100
楼主    2021-11-18 13:10:28
主题:问多次调用含跳转的子程序

一个子程序里面含有几个跳转,然后这个子程序又被多次调用。

问题1,等量的跳转指令和跳转标号,安排象..A..B..A..B..A..B..这种次序。结果会怎样?

问题2,希望每次调用都生成不同的标号,这个原理能达成吗?

不欲勿施
奇侠

经验值: 8063
发帖数: 837
精华帖: 14
1楼    2021-11-18 13:37:35
主题:回复:问多次调用含跳转的子程序

手册388页有云:

可在主程序、子例程或中断例程中使用 JMP(跳转)指令。 JMP 及其对应的 LBL(标号)

指令必须位于与主程序、子例程或中断例程相同的代码段中。

子程序被多次调用没问题

这个标签号想要每个子程序动态用不一样的,得废点脑细胞了,能实现,但没必要。

13478405725
芳季
至圣

经验值: 66275
发帖数: 14654
精华帖: 100
2楼    2021-11-18 13:40:11
主题:回复:问多次调用含跳转的子程序

我说一个子程序里面含有ABABAB这样的跳转和标号。都是在一个子程序里面的。

三处跳向同一个标号,但是又有三个相同的标号。

不欲勿施
奇侠

经验值: 8063
发帖数: 837
精华帖: 14
3楼    2021-11-18 13:44:36
主题:回复:问多次调用含跳转的子程序

你的跳转指令必须在标签程序之前,反之肯定不行,因为程序自上而下扫描

13478405725
YUKJ
至圣

经验值: 17130
发帖数: 2934
精华帖: 6
4楼    2021-11-18 15:21:39
主题:回复:问多次调用含跳转的子程序

 使用3个不相同的标号不就得了。

如果都使用相同的标号,那么任何一个跳转指令发生,都会跳转至最后的那个LBL。这只是想法,实际没有这样用法,猜想会是这样,我只使用过N个不相同标号的跳转指令。

芳季
至圣

经验值: 66275
发帖数: 14654
精华帖: 100
5楼    2021-11-18 16:00:07
主题:回复:问多次调用含跳转的子程序

为什么会要3个相同的标号。这只是个假设。原因是,这个子程序调用了很多子程序,而这些子程序里面可能会发生重复出现标号。这个事情谁都不保证。标准化有没有指定不能使用跳转?(全扫描是不存在跳转的,标准化程序真要全扫描不可吗?)

又或者只要会往后往最近的标号跳的话,可以节省很多标号。

YUKJ
至圣

经验值: 17130
发帖数: 2934
精华帖: 6
6楼    2021-11-18 17:08:40
主题:回复:问多次调用含跳转的子程序

 本想实物试验楼主的想法,编写一个简单的程序,有3个跳转指令,标号相同都是1.   编译通过,但下载时显示发生编译错误,下载不了。

反复折腾多次,结果一样,下载不了。

winter938
至圣

经验值: 10673
发帖数: 1561
精华帖: 33
7楼    2021-11-18 17:24:45
主题:回复:问多次调用含跳转的子程序

跳转标号也是一种资源,不同的子程序中可以使用相同的标号,嵌套的子程序是否可以在上下两级子程序中使用相同的标号不清楚。

工控爱好者
芳季
至圣

经验值: 66275
发帖数: 14654
精华帖: 100
8楼    2021-11-18 17:57:09
主题:回复:问多次调用含跳转的子程序

看谁有条件试试。因为真的使用人家的子程序,这事情说不定的。

YUKJ
至圣

经验值: 17130
发帖数: 2934
精华帖: 6
9楼    2021-11-18 18:03:20
主题:回复:问多次调用含跳转的子程序

 跳转指令标号数量:256.   如果程序需要使用超过256个跳转指令,这个程序的编写者除了特朗普外,白等也做不到。

嵌套的子程序有可能产生标号重叠,但是修改一下标号,使它们不重叠,又不需要花多少时间。

标号重叠的初步试验的现象连下载都搞不定。 即使可以下载,估计结果会与地址重叠类似。

YUKJ
至圣

经验值: 17130
发帖数: 2934
精华帖: 6
10楼    2021-11-18 18:12:38
主题:回复:问多次调用含跳转的子程序

 报告楼主,将上面说的有3个标号相同都是1的程序,修改成标号分别是1、2、3 ,其它一点都没有改变。修改后一次性下载成功,运行正常。

芳季
至圣

经验值: 66275
发帖数: 14654
精华帖: 100
11楼    2021-11-18 18:22:27
主题:回复:问多次调用含跳转的子程序

加密了怎么改?

winter938
至圣

经验值: 10673
发帖数: 1561
精华帖: 33
12楼    2021-11-18 18:52:59
主题:回复:问多次调用含跳转的子程序

子程序嵌套其标号是否象L区一样不同的级有不同的区域存储,虽然标号是同一个,上级的标号3和下级的标号3系统是能正确识别的?


工控爱好者
winter938
至圣

经验值: 10673
发帖数: 1561
精华帖: 33
13楼    2021-11-18 19:03:29
主题:回复:问多次调用含跳转的子程序

刚刚在编程软件上试了一下嵌套的两级子程序使用相同的编号,编译未报错,没有机器测试不知实际能不能运行

工控爱好者
YUKJ
至圣

经验值: 17130
发帖数: 2934
精华帖: 6
14楼    2021-11-18 19:35:22
主题:回复:问多次调用含跳转的子程序

难道你嵌套的子程序是别人家的? 这意味着这些子程序是一般没办法打开。你只担心标号重叠行不行,难道不担心地址重叠,或者其它冲突? 这样的子程序能使用吗?我是不敢使用的。

不欲勿施
奇侠

经验值: 8063
发帖数: 837
精华帖: 14
15楼    2021-11-18 20:15:08
主题:回复:问多次调用含跳转的子程序

楼主,我替你测试过了,哪里被调用的子程序里有相同的标签也不会去被调用的子程序里面去执行程序,所以被调用的子程序会被跳转掉。也就是说当前子程序的跳转,仅在当前子程序内有效。也就是说,在我的标准化程序里,不可以在跳转和标签之前有子程序,有了跳转和标签就不是无条件调用子程序了

13478405725
YUKJ
至圣

经验值: 17130
发帖数: 2934
精华帖: 6
16楼    2021-11-18 20:42:48
主题:回复:问多次调用含跳转的子程序

 楼上,楼主的说的是A..B..A..B..A..B..这种次序排列。你说的好像AABB....这样的排列,这样的排列当然可以,也就是一旦第一个A发生了,中间的AB就被跳转了,逻辑上没有冲突。但你这样的排列跟楼主的的排列不同,当然有不同的结果。

yanxiao
至圣

经验值: 26047
发帖数: 11948
精华帖: 43
17楼    2021-11-19 00:58:19
精华帖  主题:回复:问多次调用含跳转的子程序

题目是没看懂。不过后面的讨论大致看懂了。


每个主程序和子程序可以放置256个LBL,LBL的编号不能重复,0-255。

LBL不管用不用,都可以随便放置。


LBL 和 JMP可以放置在程序的任何地方,但是JMP的范围,只限在主程序,或各子程序内。

JMP后的编号,必须有对应的LBL 编号,没有其它限制。

当然,多个JMP跳到 同一个LBL,完全没限制。


主程序,各子程序内的JMP、LBL,不会相互影响,数量也不会相互影响。


YUKJ
至圣

经验值: 17130
发帖数: 2934
精华帖: 6
19楼    2021-11-19 07:49:25
主题:回复:问多次调用含跳转的子程序

 跳转指令标号数量:256,标号0-255.  这是系统手册上说的。这个是资源限制。这意味着一个程序里面可以使用多达256个跳转指令。

9楼说过,只有特朗普的程序会使用超过256个跳转指令,当然是指政治程序。其它任何人编写的SMART程序,不可能使用多达256个跳转指令。

yanxiao
至圣

经验值: 26047
发帖数: 11948
精华帖: 43
20楼    2021-11-19 08:08:58
精华帖  主题:回复:问多次调用含跳转的子程序

我特意试了一下,在主程序、子程序、中断程序中,各放置256JMP、256个LBL,整个程序共计768个JMP、768个LBL,下载无报错,运行不报错。


程序大小约6170字节,一对JMP/LBL占8个字节。


PLC才多大的程序空间?你不用担心JMP/LBL会上千的。

YUKJ
至圣

经验值: 17130
发帖数: 2934
精华帖: 6
23楼    2021-11-19 09:09:51
主题:回复:问多次调用含跳转的子程序

 最后可以下载的试验程序,运行效果上面已说过,不知道能否能解开楼主的一点点疑惑?

主程序

 

SBR_0

 

SBR_1

 

 

您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。