搜索
bottom↓
回复: 24

我的程序跑飞了,总是调用不相关的程序,为何?

[复制链接]

出0入0汤圆

发表于 2010-3-15 15:42:44 | 显示全部楼层 |阅读模式
现在有个问题就是我有一个子程序,假如是LOOP35,我有两个地方调用它,但是程序实际运行时不止两个地方调用,所以造成其它地方有多余显示,我把它搬到内存其它位置也是出现同样情况,郁闷啊,我在程序中搜索也只有两个地方找到啊,
如果我将调用的CALL LOOP35,0语句不用,但它会调用其它显示子程序,显示另一段代码,可是我这个程序中没调用它,查了四天,无结果,哎。。。。。
loop35:   ;这是我要调用的子程序,因是临时加入的子程序,所以此处先将主程序要调用的先完成再进行下面处理
CALL JMP2800,0
MOVLB 0

ZHU:   这是调用LOOP35的主程序
MOVWF 0xe4,BANKED
CALL loop35,0;CALL JMP2800,0   此处为插入位置
MOVLB 0

请大侠指点下到底 是哪方面的原因,谢谢

出0入0汤圆

发表于 2010-3-16 10:54:08 | 显示全部楼层
用mplab ide的软件仿真(SIM)一下,看问题出在哪里-很方便啊

CALL loop35,0不应该用,0 吧

现在有个问题就是我有一个子程序,假如是LOOP35,我有两个地方调用它,但是程序实际运行时不止两个地方调用,所以造成其它地方有多余显示,???? 不止两个地方调用(调用了肯定要执行的)

出0入0汤圆

发表于 2010-3-16 11:40:56 | 显示全部楼层
堆栈溢出 而 复位?

出0入0汤圆

 楼主| 发表于 2010-3-16 12:52:15 | 显示全部楼层
CALL loop35,0为0是不压入其它STATUS等值,
我的这个子程序是在特定位置显示一行英文字,现在出现问题是,除了在规定位置显示了此文字,而且程序往下运行,在另一个页面的同一个位置也显示了此文字,

没有产生复位

出0入0汤圆

发表于 2010-3-16 18:09:23 | 显示全部楼层
既然是汇编,你看看是不是程序哪里当年有人偷懒,不是CALL 一个标号,而是直接CALL一个地址之类的。总之看看有没有类似的事情。或者是CALL了前面一个子程序,那个子程序没有RETURN,于是LOOP35这里也被CALL了。

出0入0汤圆

 楼主| 发表于 2010-3-17 10:41:23 | 显示全部楼层
谢谢大侠回复,我查过全部程序,所有CALL LOOPXX,0语法都正常,RETURN,0也正常,而且我将子程序搬到另外一个位置也是此情况,

而且需说明的是,程序写进去后,第一次是显示正常的,没有这个现象,但第二次运行时,却显示就不正常了,每一次第一次都正常,第二次就不正常了,为何,郁闷

出0入0汤圆

发表于 2010-3-17 10:51:02 | 显示全部楼层
PIC单片机我没用过,但以前用51时出现过类似情况,后来发现是堆栈设置小了。修改堆栈大小后就好了

出0入0汤圆

 楼主| 发表于 2010-3-17 10:59:03 | 显示全部楼层
PIC好像不能设置堆栈大小吧, MPLAB IDE怎么设置?

出0入0汤圆

发表于 2010-3-17 11:08:25 | 显示全部楼层
那你可以在程序上想办法,减少堆栈的使用

出0入0汤圆

 楼主| 发表于 2010-3-17 11:59:49 | 显示全部楼层
我在配置里已经设定了如果堆栈满或下溢会导致程序复位,但实际运行时程序没有复位,所以堆栈应该没有问题啊

出0入0汤圆

发表于 2010-3-17 13:15:20 | 显示全部楼层
【5楼】 xyzasdad : 每一次第一次都正常,第二次就不正常了
------------------------------------------------------------

没看明白,  “第二次”-------> 是指烧好程序后, 断电--通电-- 显示第一次, 断电--通电--显示第二次

                            还是指 断电--- 通电--- 显示第一次 ---- 转到其他程序 ---- 显示第二次

出0入0汤圆

 楼主| 发表于 2010-3-17 13:33:27 | 显示全部楼层
第一次是指写好程序后上电测试正常,第二次是人手工复位重新运行,不断电

出0入0汤圆

 楼主| 发表于 2010-3-17 13:54:15 | 显示全部楼层
我试过几次,有时写好程序后断电再上电显示正常,但有时写好程序断电再上电又不正常,但人工复位运行却不正常,真不知哪出问题,堆栈有32级应该不会超过

出0入0汤圆

发表于 2010-3-17 20:00:06 | 显示全部楼层
来学习的

出0入0汤圆

 楼主| 发表于 2010-3-21 03:47:47 | 显示全部楼层
一直没解决,睡不着啊

出0入0汤圆

发表于 2010-3-21 11:00:26 | 显示全部楼层
【3楼】 xyzasdad
CALL loop35,0为0是不压入其它STATUS等值
======================================

不加那么多的“0”,是什么样的效果,楼主试比一下。
没有完整的程序,我想谁都没有说话的依据。
用 MPLIB IDE 或 Proteus 仿真一下,会很快得出结论。

出0入0汤圆

 楼主| 发表于 2010-3-21 12:50:16 | 显示全部楼层
谢谢,
CALL 后面可以不加0吗?或者是改为1?,
有个问题请教一下,PIC的RAM是在上电后都自动初始为0不?

出0入0汤圆

发表于 2010-3-21 18:38:27 | 显示全部楼层
To 【16楼】 xyzasdad
CALL 后面可以不加0吗?或者是改为1?
====================================================

为什么非要加“0”、加“1”?我的 call 没有那些东东。
例如:

  btfss  RBtemp,1    ; 检测RB1的状态,结果为0,表明RB1键被按下。
  call   rb1
  btfss  RBtemp,2    ; 检测RB2的状态
  call   rb2
  btfss  RBtemp,3    ; 检测RB3的状态
  goto   rb3         ; 注意用goto,而不是call。

  btfsc  PORTC,2     ; 检测是否有制动
  goto   remedy
  btfsc  PORTC,1     ; 确无制动,才转去检测RB0口开关状态。
  goto   remedy

  movfw  RBtemp      ; 读取RB口当前输入状态,检测RB0的状态变化。
  xorwf  iSTATE,0    ; 与前一次输入状态比较
  andlw  0x01        ; 取得RB0位的变化
  skpnz
  goto   remedy
  call   newio       ; 在无制动情况下,RB0位有变化,则更新输入、输出口状态显示。
  ......
  ......

出0入0汤圆

 楼主| 发表于 2010-3-21 22:40:25 | 显示全部楼层
谢谢,我明天试一下

出0入0汤圆

 楼主| 发表于 2010-4-1 10:56:18 | 显示全部楼层
因前段时间没有时间试,今天按17楼方法全改后,还是一样啊,还是出现同样情况,郁闷啊。。。。。

出0入0汤圆

发表于 2010-4-1 15:57:36 | 显示全部楼层
有可能是你的显示操作不对,没有消隐

出0入0汤圆

发表于 2010-4-1 17:45:29 | 显示全部楼层
楼主的程序量大吗?

先仿真一下,看有没什么规律可循;

亦可先屏蔽掉一些程序段,如先只用一处地方调用它看怎样;

你用PIC的哪款片子?

是不是PAGE分页 bank 没有处理好程序飞了?

出0入0汤圆

 楼主| 发表于 2010-4-2 10:25:58 | 显示全部楼层
我的程序是用的PIC18F452,程序差不多写满了,我的这个显示程序总共有三次调用,在第一次调用时显示正常,第二次前我要显示一行字A,然后再清屏,显示另一行字,然后再清屏,再调用这个显示程序,这时问题就来了,在显示界面多出了第一次调用显示的那行字A,第三次调用也是同样情况,奇怪啊

出0入0汤圆

 楼主| 发表于 2010-4-2 11:22:23 | 显示全部楼层
我的寻址操作都是有的MOVFF指令,这样可以忽略BSR,应该不存在跑出的问题啊

出0入0汤圆

 楼主| 发表于 2010-4-2 11:39:42 | 显示全部楼层
而且我将这段显示的字A搬到程序其它位置,在程序竟然一样还是调用了它
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-10 00:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表