楼主: yanbin560

[其他] [求助]变量自己变化,推测是栈溢出,但不是很懂,求解

[复制链接]

该用户从未签到

8

主题

60

帖子

0

注册会员

Rank: 2

积分
165
最后登录
1970-1-1
 楼主| 发表于 2013-10-11 14:02:17 | 显示全部楼层

回复:[求助]变量自己变化,推测是栈溢出,但不是很懂,求解

回复第 10 楼 于2013-10-11 09:29:06发表:
很可能是因为定义格式的问题。你看一下word定义是unsigned int吗?最好能把工程发上来。我好帮你测试一下。
安版,您好!
      该程序稍微做些改动,比如我在AD采样程序内增加一个静态指针,用来监测Values的值,或者删除另外一些语句,该异常都不会再出现,但这个修改就像瞎猫碰到死耗子,我一直想找到根本原因,稍后我将工程发上来
 

20131009第一版.rar

558.67 KB, 下载次数: 2

回复 支持 反对

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-10-11 15:47:14 | 显示全部楼层

    回复:[求助]变量自己变化,推测是栈溢出,但不是很懂,求解

    下面程序是我修改了一下,我这没有板子只能模拟仿真,仿真结果没有问题。你仿真的时候进入ADSamp_GetValue16以后,重新添加一下变量看看结果。你可以把ADSamp_OutV定义为全局变量试试。

    20131009第一版1.rar

    511.69 KB, 下载次数: 1

    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    60

    帖子

    0

    注册会员

    Rank: 2

    积分
    165
    最后登录
    1970-1-1
     楼主| 发表于 2013-10-12 13:01:52 | 显示全部楼层

    回复:[求助]变量自己变化,推测是栈溢出,但不是很懂,求解

    回复第 12 楼 于2013-10-11 15:47:14发表:
    下面程序是我修改了一下,我这没有板子只能模拟仿真,仿真结果没有问题。你仿真的时候进入ADSamp_GetValue16以后,重新添加一下变量看看结果。你可以把ADSamp_OutV定义为全局变量试试。
     
    感谢安版的指导,我只要在ADSamp_GetValue16内加一条无关紧要的语句,这个现象就不再发生了,我主要是想找到问题发生的根源,让自己有所提高,再次感谢安版
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-10-12 14:34:53 | 显示全部楼层

    RE:[求助]变量自己变化,推测是栈溢出,但不是很懂,求解

    应该是当时指针指示的不对。可以加串口输出来判断实际程序中的数据是否正确。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    60

    帖子

    0

    注册会员

    Rank: 2

    积分
    165
    最后登录
    1970-1-1
     楼主| 发表于 2013-10-14 09:36:09 | 显示全部楼层

    回复:[求助]变量自己变化,推测是栈溢出,但不是很懂,求解

    回复第 14 楼 于2013-10-12 14:34:53发表:
    应该是当时指针指示的不对。可以加串口输出来判断实际程序中的数据是否正确。
    安版,您好!
           您的意思是将SlfLrnValue使用串口输出,看是不是变化,有可能在调试观察时,变量显示时的地址是不对的?
            但我在程序中使用加了一条检测语句
            if(SlfLrnValue!=0&&!ColdStartFlag1.Bits.bPwrOff) {     //  SlfLrnValue应该是在关闭电源开关后起作用的
          while(1);
        } 
          结果死循环是执行的,也就是说SlfLrnValue!=0的条件成立了,变量的值实实在在改变了
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-10-14 10:20:14 | 显示全部楼层

    RE:[求助]变量自己变化,推测是栈溢出,但不是很懂,求解

    应该是有数据越界操作了。你先只留AD采集部分,把其他的数据先屏蔽掉。用排除的方法,一点一点的查,应该可以查的出来。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-10-14 10:20:46 | 显示全部楼层

    RE:[求助]变量自己变化,推测是栈溢出,但不是很懂,求解

    你可以特别注意一下这个变量前后的数组。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    1

    主题

    29

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    217
    最后登录
    1970-1-1
    发表于 2013-10-14 18:11:17 | 显示全部楼层

    RE:[求助]变量自己变化,推测是栈溢出,但不是很懂,求解

    没具体往细了看,但感觉像是多处访问全局变量的互斥问题,用户中断ADSamp_Interrupt去采样,和系统时钟中断SysTimer_Interrupt中调用ADSamp_Measure里都有对AD的很多全局变量的操作,包括ADSamp_OutV和SumChan,不太容易管理互斥,如果发生中断嵌套,不知道这些变量的取值会如何
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    60

    帖子

    0

    注册会员

    Rank: 2

    积分
    165
    最后登录
    1970-1-1
     楼主| 发表于 2013-10-15 08:54:52 | 显示全部楼层

    回复:[求助]变量自己变化,推测是栈溢出,但不是很懂,求解

    回复第 18 楼 于2013-10-14 18:11:17发表:
    没具体往细了看,但感觉像是多处访问全局变量的互斥问题,用户中断ADSamp_Interrupt去采样,和系统时钟中断SysTimer_Interrupt中调用ADSamp_Measure里都有对AD的很多全局变量的操作,包括ADSamp_OutV和SumChan,不太容易管理互斥,如果发生中断嵌套,不知道这些变量的取值会如何
    感谢老师的回复。
    AD采样这段程序是由PE自动生成的,刚我回顾了下这个程序,个人感觉是这样的,AD采样的状态是由状态标志ModeFlg来决定的,16次的采样结束前,ModeFlg是不等于STOP的,系统时钟中断SysTimer_Interrupt内是执行如下语句
                     if (ModeFlg != STOP) {              
                             return ERR_BUSY;               
                      }
     
    当采样完毕,将ADSamp_OutV的值传递给ADVal后,ADSamp_Interrupt中会将ModeFlg = STOP,才会执行时钟中断中的ADSamp_HWEnDi(),准备下一次的采样,不知道我的理解是否有误,请老师继续指导,谢谢!
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-10-15 09:24:42 | 显示全部楼层

    RE:[求助]变量自己变化,推测是栈溢出,但不是很懂,求解

    这里加处理是等待数据接收完毕,然后才能处理。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-2 21:40 , Processed in 0.102968 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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