搜索
bottom↓
回复: 9

[求教]IAR下载时使用Download and debug和Debug without debug有何不同?

[复制链接]

出0入0汤圆

发表于 2012-4-19 09:57:35 | 显示全部楼层 |阅读模式
本帖最后由 kingkingdf_wdf 于 2012-4-19 10:15 编辑

我是最近因为公司的项目需要才开始用IAR的,所以有些东西不是很清楚。

项目用的是 MSP430F47197 芯片,IAR版本是从官网上下的5.4版本,工具使用的是MSP-FET430U100A(就是目标板+USB编程器)。

昨天使用官网上下的ADC例程,略作修改,再使用干电池和电位器调压做ADC稳定性试验的时候,突然发现一个很奇怪的问题:使用不同的IAR按钮,测得的数据不同,而且差距很大。

问题现象:
输入电压:0.47888 V
电路:
//                 MSP430x471xx
//             -----------------
//         /|\|              XIN|-
//          | |                    | 32kHz
//          --|RST      XOUT|-
//            |                    |
//Vin+ -->|A2.0+           |
// Vin- -->|A2.0-            |
//            |                    |
//            |           VREF |--+
//            |                   |   |
//            |                   |  -+- 100nF
//            |                   |  -+-
//            |                   |   |
//            |           AVss |---+
//            |                   |

代码:
我放到后面,先跟大家说说现象吧。

问题现象:
代码编译、链接OK,使用download and debug按键进行下载和调试,得到的数据(如图1),ADC转换结果(直接从SD16MEM2中读出的),结果基本上在59020左右(这个结果比理论值大,但还算接近)。
但如果停止debug,转而使用Debug without download按键来调试,得到的数据(如图2),结果在59750~60080之间跳动,波动较大。这次的值要比使用download and debug调试整整大了700~1000单位。这个明显是不可容忍的。
图1   图2

需要注意的是:
1、不管使用的是哪个按键来调试,之后点击reset按键再次执行,获得的结果也稳定在59020左右,即与download and debug按键调试结果相同。
2、在开始debug后,download and debug按键会转变为Make_Restart Debugger,debug without download按键会转变为Restart Debugger,这两个新按键的效果也和转变前一样,即用Make_Restart Debugger,结果OK,用Restart Debugger则会有问题。
3、在进行多次试验之后,发现如果设输入电压为Y,ADC结果为X,二者关系为:(Y+0.6) = K * X,则使用Debug without download(下面简称“白键”)的K比使用download and debug(下面简称“绿键”)的K小,即当Y大于0时,使用白键的值要比使用绿键的值大;当Y小于0时,白键测得的值要比绿键小;Y=0时,二者相同

这个问题小弟想了好久都不知道怎么回事 ,所以想向各位前辈请教一下到底是怎么回事。

另外,小弟有想过ADC启动后不稳的问题,所以在正式采样之前,加了一段类似采样的代码(即下面代码中,带有//try注释的代码段,下面已经把该代码段注释掉了),希望能通过延迟来稳定改正这个问题,但是问题没解决,反而出现另一个问题:使用白键调试,正式采样的(如图3,大概在600100左右200范围内跳)比新加的代码的获得值(如图4,大概和没新代码前的采样值一样)大,但是使用绿键和reset就没有这个问题
图3      图4

下面贴上小弟的代码:
#include  <msp430x471x7.h>

//
#include "clk_fr.h"

#define Y_IN 478880     //adc in
#define TEST_NUM 100
#define TEST_try 1000

unsigned int result;
unsigned int result_ar[TEST_NUM] = {0};
//unsigned int result_ary[TEST_try] = {0};      //try

float y_ar[TEST_NUM] = {0};

float K[TEST_NUM] = {0};

void main(void)
{
  volatile unsigned int i;                  // Use volatile to prevent removal
                                            // by compiler optimization
  unsigned int j = 0;

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  FLL_CTL2 |= XCAP10PF;                     // Configure load caps
  for (i = 0; i < 10000; i++);              // Delay for 32 kHz crystal to
                                            // stabilize

  SD16CTL = SD16REFON+SD16SSEL0;            // 1.2V ref, SMCLK
  SD16CCTL2 |= SD16SNGL+SD16IE ;            // Single conv, enable interrupt
  SD16INCTL2 |= SD16INCH_0;
  for (i = 0; i < 0x3600; i++);             // Delay for 1.2V ref startup

  /*                    //try
  j=0;
  for (i = 0; i < TEST_try; i++)
  {
     SD16CCTL2 |= SD16SC;                    // Set bit to start conversion                                      
    __bis_SR_register(LPM0_bits + GIE);     // Enter LPM0 w/ interrupts
    _NOP();
    result_ary[j]=result;
    j++;
  }
  j=0;  
  */

  
  while (j < TEST_NUM)
  {
    _NOP();                                 // SET BREAKPOINT HERE   
    SD16CCTL2 |= SD16SC;                    // Set bit to start conversion                                      
    __bis_SR_register(LPM0_bits + GIE);     // Enter LPM0 w/ interrupts
   
    _NOP();                                 //Delay for waiting interrupt
    //for (i = 0; i < 100; i++);

    result_ar[j] = result;
    K[j] = Y_IN / (result - 32768);         //计算线性
    y_ar[j] = (float)(result + 0) * 12 / 65536;
    j++;
   
    _NOP();                                 // SET BREAKPOINT HERE

  }
  
  _NOP();                                   // SET BREAKPOINT HERE
  
}

#pragma vector=SD16A_VECTOR
__interrupt void SD16AISR(void)
{
  switch (SD16IV)
  {
  case 2:                                   // SD16MEM Overflow
    break;
  case 4:                                   // SD16MEM0 IFG
    break;
  case 6:                                   // SD16MEM1 IFG     
    break;
  case 8:                                   // SD16MEM2 IFG
    result = SD16MEM2;                      // Save CH2 results (clears IFG)
    break;
  }

  __bic_SR_register_on_exit(LPM0_bits);        // Exit LPM0
}


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-4-19 10:14:42 | 显示全部楼层
[求教]IAR下载时使用Download and debug和Debug without Download有何不同?

经验看是下载到mcu再调试 和 pc连接mcu仿真调试

两者完全不同嘎,前者是mcu自己跑,后者是pc说跑mcu再跑,说停就停了。

MDK也有的功能呀。

LZ熟悉熟悉编译器吧。

出0入0汤圆

发表于 2012-4-19 10:16:49 | 显示全部楼层
Download and debug 将程序烧录,然后仿真

Debug without debug 直接仿真!没有更新程序,会出现MCU程序和编译器的程序不同的问题

出0入0汤圆

 楼主| 发表于 2012-4-19 11:19:41 | 显示全部楼层
lcptw 发表于 2012-4-19 10:14
[求教]IAR下载时使用Download and debug和Debug without Download有何不同?

经验看是下载到mcu再调试 和 p ...


这样啊,我可不可以将出现的问题理解为下面这样?

绿键(download and debug)在调试的时候是需要与目标板实时联动通讯的,获得的值是ADC实测的结果。硬件稳定所需时间短。

白键(debug without download)在调试时没有与目标板实时联动通讯,而是用软件模拟MCU运行,再把结果反馈给目标板外围电路获得的结果是通过软件根据ADC特性曲线计算得出的。由于软件模拟出的稳定所需的时间较长,所以短时间内测定的数据波动很大(同时也造成后来新加代码是前后两侧取样数值不同)。同时,由于实际芯片ADC的线性部分斜率与软件录入的ADC线性部分斜率不同而造成采样结果的巨大差异。


可以这么理解吗?

那么我提到的 : 不管使用的是哪个按键来调试,之后点击reset按键再次执行,获得的结果也稳定在59020左右,即与download and debug按键调试结果相同。

是不是reset键也是跟绿键一样,是对MCU操作的啊?其他的几个调试按键,比如单步、步入、步出、跳过等也是对MCU操作吗?


PS:新手一小时一帖的发帖限制怎么把回复也算上了

出0入0汤圆

发表于 2012-4-19 12:40:43 | 显示全部楼层
Download and debug 烧写新程序并调试
Debug without Download 直接调试,不烧写程序

出0入0汤圆

发表于 2012-5-28 17:23:03 | 显示全部楼层
有没有单纯的载下啊?

出0入0汤圆

发表于 2012-5-29 22:39:55 | 显示全部楼层
如果程序改变了一般要重新DOWNLOAD然后DEBUG.
如果程序没有改变,可以不要重新DOWNLOAD,但这时可能有两种情况:1是调试工具不打断当前MCU的运行,直接在MCU当前运行点上中断和通讯,2是打断MCU运行,复位从头开始运行.(第一种要MCU和工具都支持才行)

出0入0汤圆

发表于 2012-5-30 07:15:58 | 显示全部楼层
单纯的下载?你可以下载了后直接把调试关闭不就是了吗?

出0入0汤圆

发表于 2012-12-30 15:06:55 | 显示全部楼层
想知道 在simulator 模式下, Download and Debug 和 Debug without Downloading 有什么区别??? 我的一个程序 down 就正常  不down 就不能软仿真!!

出0入0汤圆

发表于 2013-5-20 17:28:33 | 显示全部楼层
ppdd 发表于 2012-12-30 15:06
想知道 在simulator 模式下, Download and Debug 和 Debug without Downloading 有什么区别??? 我的一 ...

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

本版积分规则

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

GMT+8, 2024-7-28 09:56

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

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