搜索
bottom↓
回复: 22

CodeWarriorV5.1联机调试时,能否把一个变量值强制成固定值?

[复制链接]

出0入0汤圆

发表于 2014-9-7 12:00:56 | 显示全部楼层 |阅读模式
[size=3][size=6]大家好,请大神解答一下,CodeWarriorV5.1联机调试时,能否把一个变量值强制成固定值?比如一个变量我想让他一直等于3或者一直等于200,也可以让他根据程序运算等于其变量值。还有,比如一个端口PA0、PT5等等强制让他拉高或者拉低。或者放开它让他按照程序运行结果来赋值。请大神们指点,谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2014-9-7 13:35:45 | 显示全部楼层
这个不可以的,设置就只是一次的。是一个事件。调试改后,如果程序里又修改了这个变量。还是能修改的。
如果需要这样的功能,可以增加一个调试的变量。当调试的变量为1时,程序就不对这个变更进行修改了。这样做是可以的。

出0入0汤圆

发表于 2014-9-7 14:17:10 | 显示全部楼层
在mdk里可以直接修改寄存器内容,其他的没用过,只能帮顶了

出0入0汤圆

发表于 2014-9-7 14:39:44 | 显示全部楼层
变量是会根据需要变化的量,调试界面里面是可以对其进行修改的,包括变量和寄存器都可以。如果是想要实现LZ所说的情况,建议使用一个联合体,比如下面这样的,然后修改软件应该可以实现
  1. typedef union tunion
  2. {
  3.     const unsigned char cbVar;
  4.     volatile unsigned char vbVar;
  5. }T_UNION;
复制代码

不让修改该变量的地方用cbVar,其他的地方使用vbVar, 不一定能满足需求,只是一个思路。

出0入0汤圆

发表于 2014-9-7 15:30:40 | 显示全部楼层
我的一个方法是eeprom,需要的时候读出来,修改完的可以存进去。这个值及时在子函数修改了,在需要他的时候,在读出来,值是保持不变的。

出0入0汤圆

发表于 2014-9-7 15:30:50 | 显示全部楼层
qwert1213131 发表于 2014-9-7 14:17
在mdk里可以直接修改寄存器内容,其他的没用过,只能帮顶了

你的意思是调试的时候在watch窗口里,改变寄存器或者变量的值?

出0入0汤圆

发表于 2014-9-7 15:32:06 | 显示全部楼层
gujiamao_love 发表于 2014-9-7 15:30
你的意思是调试的时候在watch窗口里,改变寄存器或者变量的值?

嗯,你可以这样试试

出0入0汤圆

发表于 2014-9-7 16:07:49 | 显示全部楼层
qwert1213131 发表于 2014-9-7 15:32
嗯,你可以这样试试

呵呵,以前真的不知道调试工具可以这么做,前一段时间看了同事这么做的,大吃一惊。
哎,太菜了。

出0入0汤圆

 楼主| 发表于 2014-9-7 16:25:06 | 显示全部楼层
gujiamao_love 发表于 2014-9-7 16:07
呵呵,以前真的不知道调试工具可以这么做,前一段时间看了同事这么做的,大吃一惊。
哎,太菜了。 ...

我现在也在用CODESYS,一款plc软件。这个软件就可以向我说的那样,调试起来很方便。但是CW不会搞,有点蛋疼。

出100入101汤圆

发表于 2014-9-8 21:26:27 | 显示全部楼层
没看懂LZ的需求,你不去改变,变量值不就不变了么。

出0入0汤圆

 楼主| 发表于 2014-9-8 22:14:02 | 显示全部楼层
fengyunyu 发表于 2014-9-8 21:26
没看懂LZ的需求,你不去改变,变量值不就不变了么。

这样都看不懂啊,就是在调试窗口可不可以直接控制pa0像让它高就高,想让它低就低。无视程序运行结果。

出500入203汤圆

发表于 2014-9-9 10:24:27 | 显示全部楼层
做一个锁定标志,这个标志置位的时候不允许程序修改变量。然后先在调试中置位这个标志就可以了吧。

出0入0汤圆

 楼主| 发表于 2014-9-11 08:31:56 | 显示全部楼层
momo_li 发表于 2014-9-9 10:24
做一个锁定标志,这个标志置位的时候不允许程序修改变量。然后先在调试中置位这个标志就可以了吧。 ...

哥们,能说详细一些吗?我表示看不懂你说的呢。谢谢,请指教一下!

出0入0汤圆

发表于 2014-9-11 08:41:27 | 显示全部楼层
LZ是搞PLC的?PLC是通讯方式修改变量的,单片机的调试跟PLC还是有区别的。

出0入0汤圆

 楼主| 发表于 2014-9-11 09:57:27 | 显示全部楼层
tam2907 发表于 2014-9-11 08:41
LZ是搞PLC的?PLC是通讯方式修改变量的,单片机的调试跟PLC还是有区别的。

通讯方式是什么意思?你也是玩codesys的吗?一起交流一下啊,呵呵。plc也是联机调试的啊。

出0入0汤圆

发表于 2014-9-11 10:19:19 | 显示全部楼层
jiang887786 发表于 2014-9-11 09:57
通讯方式是什么意思?你也是玩codesys的吗?一起交流一下啊,呵呵。plc也是联机调试的啊。 ...

PLC调试是软件接口,单片机调试一般是硬件接口

出0入0汤圆

发表于 2014-9-11 10:45:23 | 显示全部楼层
CodeWarrior里可以随时修改一个变量的值,但不能让它固定,不过你可以用代码实现。

出500入203汤圆

发表于 2014-9-11 10:55:17 | 显示全部楼层
jiang887786 发表于 2014-9-11 09:57
通讯方式是什么意思?你也是玩codesys的吗?一起交流一下啊,呵呵。plc也是联机调试的啊。 ...

UINT16  SET_VAL = 0;                // 需要锁定的变量
UINT8    FLAG_LOCK = 0;                // 锁定标志,在内存中改这个值实现对SET_VAL的锁定

for(;;)
{
        if(FLAG_LOCK == 0)
        {
                SET_VAL ++;
        }
}

这样,当FLAG_LOCK不为0的时候SET_VAL的值就会被锁定。比较凑合的一个办法,作为调试使用吧。如何在线改内存就不用说了吧。

出500入203汤圆

发表于 2014-9-11 10:57:06 | 显示全部楼层
jiang887786 发表于 2014-9-11 08:31
哥们,能说详细一些吗?我表示看不懂你说的呢。谢谢,请指教一下!

// 晕死,回复错了,明明是点击的楼主呢

UINT16  SET_VAL = 0;                                // 需要锁定的变量
UINT8    FLAG_LOCK = 0;                        // 锁定标志,在内存中改这个值实现对SET_VAL的锁定

for(;;)
{
        if(FLAG_LOCK == 0)
        {
                SET_VAL ++;
        }
}

这样,当FLAG_LOCK不为0的时候SET_VAL的值就会被锁定。比较凑合的一个办法,作为调试使用吧。如何在线改内存就不用说了吧。

出0入0汤圆

发表于 2014-9-11 11:03:11 | 显示全部楼层
楼主应该把你遇到的场景,背景描述清楚一下。要锁定一个变量,无非就是别的地方修改他了,你再改回去,或者工具有某个功能帮你做这个   也许你遇到的问题,不是像你开头描述的那样的

出0入0汤圆

 楼主| 发表于 2014-9-12 08:20:42 | 显示全部楼层
momo_li 发表于 2014-9-11 10:55
UINT16  SET_VAL = 0;                // 需要锁定的变量
UINT8    FLAG_LOCK = 0;                // 锁定标志,在内存中改这个值实现 ...

哥们你好,在线修改内存,怎么改?就上说的修改变量值吗。请问怎么改呢?谢谢了!

出500入203汤圆

发表于 2014-9-12 09:22:42 | 显示全部楼层
jiang887786 发表于 2014-9-12 08:20
哥们你好,在线修改内存,怎么改?就上说的修改变量值吗。请问怎么改呢?谢谢了! ...


首先,把变量定义成全局变量或者静态变量,然后在调试窗口中找到变量观察窗口找到要修改的变量,点击要修改的变量值,输入想要改的数,回车。应该是这个顺序,。

出0入0汤圆

 楼主| 发表于 2014-9-13 08:29:51 | 显示全部楼层
momo_li 发表于 2014-9-12 09:22
首先,把变量定义成全局变量或者静态变量,然后在调试窗口中找到变量观察窗口找到要修改的变量,点击要修 ...

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

本版积分规则

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

GMT+8, 2024-6-10 08:21

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

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