IAR variable "l" was set but never used 错误分析

variable "l" was set but never used

 

Warning[Pe550]: variable "xxxx" was set but never used

如:

void fx (void)

{

UINT8 i;

i = p;

........................

}

定义局部变量,就会报“变量定义了,但是没有使用”的警告!,并且变量也没有被赋值。很容易迷惑人。不仔细看警告的朋友可能半天调试不好。

UINT8 i;

void fx (void)

{

i = p;

........................

}

把变量改为全局变量后,就不会有警告了。

或者在定义的前面加上 volatile 后,编译就通过了。这个和编译器的库有关。

UINT8 i;

void fx (void)

{

volatile UINT8 i;

i = p;

........................

}

我就是因为在中断里对串口接收进行处理,结果没法接收。

具体原因是不是因为这个变量引起的还在查找。

不知道为什么会这样。

IAR公司提供的开发调试环境Embedded Workbench支持MSP430单片机的C语言或汇编语言程序调试,并且能够进行软硬件仿真,是开发MSP430单片机应用的有力武器,但是在使用中也发现一些问题。

IAR Embedded Workbench中函数或宏调用中的变量,需要把它定义为全局变量,例如下面程序中调用宏S(r)float area浮点变量,要定义为全局变量程序才能正常运行。

#include "io430.h"

//带参数的宏定义

#define PI 3.14

#define S(r) PI*(r)*(r)

float area; //全局变量

void main()

{

int r;

r=3;

area = S(r);//调用宏

}

如果把该变量如下面程序中那样定义为局部变量,则会出现如下的提示:

Warning[Pe550]: variable "area" was set but never used F:\MSP430程序\test\main.c 10

同时程序也不能正常运行。

#include "io430.h"

//带参数的宏定义

#define PI 3.14

#define S(r) PI*(r)*(r)

void main()

{

int r;

float area; //局部变量

r=3;

area = S(r); //调用宏

}

同样的在把函数作为表达式调用时,所用的变量也要定义为全局变量,如下面程序中的变量k调用函数int GetMax(int x,int y),如果把它定义为局部变量也会出现上面所说的提示,且程序不能正常运行。

//函数作为表达式调用

int GetMax(int x,int y);

int k;

int main( void )

{

// Stop watchdog timer to prevent time out reset

WDTCTL = WDTPW + WDTHOLD;

int m,n;

m=9;

n=10;

k = GetMax(m,n); //调用函数

}

int GetMax(int x,int y)

{

if(x>=y) return x;

else return y;

}

我试验了IAR Embedded WorkbenchV7.4V7.1两种版本,结果都是这样。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值