最近在用430开发一款产品,在软件调试的时候发现Watch窗口中无法观察局部变量的值,总是显示,下面通过一个简答的例子说明一下现象:
#include "msp430g2553.h"
/* Global variable */
unsigned char ReceiveGlobal;
unsigned char addxy(unsigned char x,unsigned char y)
{
unsigned char z;
z = x+y;
return z;
}
void main()
{
/* Local variable */
unsigned char Receive0;
static unsigned char Receive1;
volatile unsigned char Receive2;
Receive0 = addxy(0,1);
Receive1 = addxy(1,2);
Receive2 = addxy(3,4);
ReceiveGlobal = addxy(5,6);
while(1);
}
在while(1)处设一断点,在Debug模式下通过Watch窗口观察变量:
现在回过头去看IAR中的”Options — c/c++ compiler — Optimization[ˌɔptimaiˈzeiʃən] — Level” 选项:
Level的缺省值为Low,当我把Level选为None之后,即不执行任何优化时,全局变量、静态局部变量、局部变量的值都可以看到,如下图所示。
当我把优化等级选为Midium或者High之后,全局变量、静态局部变量、局部变量的值都不可见了。
结论:要想观察局部变量的值,调试的时候可以把优化等级设为None.
补充几个知识点:
1.堆栈(stack)——由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。
2.静态存储区(static)—— 全局变量和静态变量的存储是放在一块的。初始化的全局变量和静态变量在一块区域;未初始化的全局变量和静态变量在相邻的另一块区域。程序结束后由系统释放。
关键字:IAR Watch窗口 局部变量
引用地址:
如何在IAR中通过Watch窗口观察局部变量的值
推荐阅读最新更新时间:2024-11-10 22:50
KS0108_AVR驱动[0617]
前几天,一直在玩这个, 因为RAM读时序的问题,因为proteus仿真的问题... 本来简单的东西也会被拖很久的。。。 这里仅列出代码,注释什么的有时间再不上吧。 开发平台为IAR EWAVR 5.20(编译/硬件调试) + SlickEdit(编辑) + Proteus(软件仿真),但是为了尽量保证可一直性,并没有使用IAR特有的位操作的形式,只需稍加改动,即可移植到winavr或iccavr上, 另外proteus请不要使用忙位检测,不要使用超过4mhz的时钟,高版本可选内部4mhz的时钟 这些感觉是proteus的问题,就像1602也是不能检测忙位一样,不是我程序的问题! 示例中的main函数实现了隔点画点的功能,仅此而已。
[单片机]
IAR Systems宣布新任CEO
嵌入式设计工具公司IAR Systems的新任CEO塞西莉亚·瓦赫特迈斯特(Cecilia Wachtmeister)将于8月16日正式上任。 IAR CEO 塞西莉亚·瓦赫特迈斯特 “我们非常高兴地欢迎塞西莉亚加入IAR。董事会对这一招聘和迅速的任命非常满意,这使我们能够毫不延迟地推进我们的增长战略,”董事会主席尼古拉斯·哈斯比耶(Nicolas Hassbjer)说。 瓦赫特迈斯特将接替理查德·林德(Richard Lind),后者将在秋季期间以顾问身份继续提供服务。 这一新任命是在3月底做出的,瓦赫特迈斯特原本可能会履行至10月的前任职务,但她提前离任。 她之前曾在Kambi担任业务执行副总裁,然后担任首席商
[嵌入式]
IAR for STM8介绍、 下载、安装与注册
Ⅰ、写在前面 本文讲述的内容是IAR for STM8(EWSTM8)的介绍、下载、安装与注册,其安装、注册过程和IAR for ARM类似,如果需要了解IAR for ARM相关的文章,可以到我博客,或微信公众号查看并下载。 IAR系列教程: http://blog.csdn.net/column/details/13696.html 本文内容已经整理成PDF文件,提供给大家下载: http://pan.baidu.com/s/1geClBrH Ⅱ、IAR介绍 1.关于IAR IAR是一家公司的名称,也是一种集成开发环境的名称,我们平时所说的IAR主要是指集成开发环境。 IAR这家公司的发展也是经历了一系列历史变
[单片机]
IAR FOR 430出现Failed to re-intialize一种可能的解决方案
本人用的是IARfor430的7.12版本,在用MSP-FET430UIF给msp430下载程序的时候遇到这个问题大家可以如果你和我的IAR版本号相同或者更高 并且遇到的问题和我相同或者类似 那么,这篇文章可能会对你解决相关问题有些帮助。 软件提示是驱动问题,那么我们首先该干的事情就是查一下驱动是不是真的有问题。如果你的电脑和我的一样,驱动经常安装不上去,出现各种各样的bug等等,那很有可能就是这个原因了,他的显示是这个样子的 那么可以确定肯定是驱动的问题了,修复方式其实比较简单—更新驱动就好。更新方式:右键- 更新- 本地- IAR430安装目录下面的430-drives然后直接选中文件夹TIUSBFET即可。两个
[单片机]
IAR for STM8 使用固件库
1、新建IAR工程 新建一个IAR工程。 2、复制文件夹 1)、打开解压后的固件库文件夹,打开Libraries文件夹,将STM8S _StdPeriph_Driver 复制到新建的工程文件夹里。 将Project/STM8S_StdPeriph_Template下中main.c、stm8s_conf.h、stm8s_it.c、stm8s_it.h四个文件夹复制到新建文件夹中。如有重复文件请选择替换。如图所示: 3、文件分组 打开工程,右击工程名,在弹出的菜单中进行如下图所示设置: 在弹出的对话框中可以给组命名,仿照STVD以及其他,我们可以给工程命名两个组:USER以及StdPeriph_Dr
[单片机]
IAR for STM8学习笔记(一)建立工程
前言 入门学习推荐思修电子龙顺宇的视频,讲得非常详细,相关视频网站如B站或者优酷上都有。已经有一定单片机基础的朋友建议自己找相关的资料研究。 STM8常用两种IDE,一个是意法公司自己提供的STVD软件,一个则是目前使用最广的IAR软件。两种IDE很相似,但也各有特点,个人学习掌握一种就好了。我这里主要学习IAR软件。 一、IAR for STM8软件工具的安装 这个网上有很多视频或者攻略,作为个人学习笔记,就不再多说了。 二、IAR建立一个工程 最简单的方式是,启动IAR软件,点击“Project”下拉菜单中“Cheat New Project...”,然后弹出一个窗口,用鼠标选择“C”(即C语言的工程,ASM为汇编),点击“O
[单片机]
Keil调试局部变量显示"not in scope"的问题解决
今天在调试程序的时候,发现函数返回值赋值给变量时,变量值总是显示 not in scope ,无法看到变量被赋的值。 出现这种情况的原因是这个局部变量没被分配到内存,或者变量被编译器优化了。 编译器优化级别高的时候,编译器为了优化,可能并没有按照我们想要执行的代码汇编。 解决方法:降低Keil的编译优化选项,如下图所示,优化等级改为0(默认为3)。
[单片机]
IAR for STM8 学习笔记(1)--数据类型
数据类型(编译器支持 ISO/ANSI C 基本数据类型和一些附加数据类型) 1.1. 整型数据 bool 数据类型在C++语言里是默认支持的。如果你在C代码的头文件里包含stdbool.h, bool数据类型也可以使用在C语言里。也可以使用布尔值 false和 true。 1.2.浮点数据类型: 1.3.指针类型:指针有数据指针和函数指针。 1、数据指针: 数据指针的大小为8位,16位,24位。定义为:在整型数据类型后加”*”符号。 例如:char * p; 整型数据没有24位,具体定义指针见后面扩展关键字章节。 2、函数指针:函数指针的大小为16位,24位。 指针定义:在函数类型后加”*”符号
[单片机]