This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
/*
* main.c
*/
#include <msp430g2553.h>
#include "array_max.h"
/*
*
*/
unsigned int max(unsigned int *str)
{
unsigned int max = *str; //数组中的最大值
while(*str++){
if((*str)>max)
{
max = *str;
}
}
return (max);
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
unsigned int value = 0;
unsigned int buffer[10] = {1,2,3,4,5,5,6,7,8};
value = max(buffer);
while(1);
}
如果定义了一个变量,只是赋个值给他,之后再也不使用它了,编译器往往就会认为它没有使用过。这应该是编译器对空间的优化,且对变量C不分配存储空间(你可以软件仿真下,右键“Add to Watch ”,可以看到C的值是unavailable(难以获得 ))因为只是赋个值给他,这样变量确实是没什么用的。
又做了个实验,代码如下,无论程序执行到什么地方。value unknown Error: identifier not found: value
不能跟踪value这个变量的值
/*
* main.c
*/
#include <msp430g2553.h>
#include "array_max.h"
/*
*
*/
unsigned int max(unsigned int *str)
{
unsigned int max = *str; //数组中的最大值
while(*str++){
if((*str)>max)
{
max = *str;
}
}
return (max);
}
void main(void)
{
unsigned int value = 0;
unsigned int buffer[10] = {1,2,3,4,5,5,6,7,8};
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
value = max(buffer);
if(value){
buffer[4] = 0;
}
while(1);
}
你的value是局部变量,只有执行到变量处再用watch来看,是可以看到的。你的程序我试过,没有问题。
每次编译后,注意打开查看----Debug目录中的***.map文件,这个文件就是你耗用MCU Flash资源的情况,实践中发现几个规律:
1)你如果开始定义了一个变量,但你在整个程序中从来没使用它,那么编译器就根本不会将该变量编译,具体表现就是-----不管你定不定义该变量,最后编译出来的***.map文件的大小都是一模一样的;
2) 对函数也是如此,即你编写了一段函数,但如果你在整个程序中从来没使用它,那么编译器也根本不会将该函数编译
3)最后,系统编译后给出的“Warning“是没有实质性关系的,它只是一种提醒,提醒你程序中有不合理或者无用功,它并不是判程序有故障无法运行。
if里的value是个判断值,如果value'是个局部变量执行到这步是看不到的。你设成全部变量就行。