原创 IAR Embedded Workbench中函数或宏调用中的变量

2009-9-20 16:25 4938 9 9 分类: MCU/ 嵌入式

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


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


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 


#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 WorkbenchV3.40V4.20两种版本,结果都是这样。不知道对不对,但是在秦龙编著的“MSP430单片机C语言应用程序设计实例精讲”一书中这里的变量设置都是局部变量。

文章评论0条评论)

登录后参与讨论
我要评论
0
9
关闭 站长推荐上一条 /2 下一条