标题: 好些天没有搞明事情,麻烦各位给看看。 [打印本页]
作者: zhudongpo 时间: 2006-8-25 11:30 标题: 好些天没有搞明事情,麻烦各位给看看。
#include <hidef.h> /* common defines and macros */
#include <mc9s12dp256.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dp256b"
char autoset_rssi_rx_rf(){
unsigned char tt[2];
char rssi=-91;
float rssi_14_t1;
float rssi_14_t2;
float rssi_14_t;
float rssi_f1_t1;
float rssi_f2_t1;
float rssi_f_t1;
float rssi_f1_t2;
float rssi_f2_t2;
float rssi_f_t2;
float rssi_f_t;
tt[0]=2;
tt[1]=190;
//eeprom_trx_rd(tt,1024+360, 2);//14875MHz,-45dBm,D,t1=25
rssi_14_t1=256*tt[0]+tt[1]; //702
//eeprom_trx_rd(tt,1024+503, 2);//14875MHz,-45dBm,D,t2=55
rssi_14_t2=256*tt[0]+tt[1]+2; //704
rssi_14_t=rssi_14_t1+(rssi_14_t2-rssi_14_t1)*0.77; // 703
///////////////////////////////////////////////////////////////////////
//eeprom_trx_rd(tt,800+81, 2);//15300MHz,-45dBm,t1=25
rssi_f1_t1=256*tt[0]+tt[1]; //702
//eeprom_trx_rd(tt,800+83, 2);//15350MHz,-45dBm,t1=25
rssi_f2_t1=256*tt[0]+tt[1]+6; //708
rssi_f_t1= (rssi_f2_t1+rssi_f1_t1)/2; //705
//////////////////////////////////////////////////////////////////
//eeprom_trx_rd(tt,800+104, 2);//15300MHz,-45dBm,t2=55
rssi_f1_t2=256*tt[0]+tt[1]; //702
//eeprom_trx_rd(tt,800+106, 2);//15350MHz,-45dBm,t2=55
rssi_f2_t2=256*tt[0]+tt[1]+8; //710
rssi_f_t2=(rssi_f1_t2+rssi_f2_t2)/2; //706
///////////////////////////////////////////////////////////// rssi_f_t=rssi_f_t1+(rssi_f_t2-rssi_f_t1)*0.77; //705
//////////////////////////////////////////////////////////////
rssi=(char)(rssi_14_t-rssi_f_t); //703-705= -2
return rssi;
}
void main(void) {
/* put your own code here */
char test;
test= autoset_rssi_rx_rf();
for(;;) {} /* wait forev
软件仿真时设置断点查看,发现
rssi <not allocated> float
rssi_14_t1 <not allocated> float
rssi_14_t2 <not allocated> float
rssi_14_t <not allocated> float
rssi_f1_t1 <not allocated> float
rssi_f2_t1 <not allocated> float
rssi_f_t1 <not allocated> float
rssi_f1_t2 <not allocated> float
rssi_f2_t2 <not allocated> float
rssi_f_t2 <not allocated> float
rssi_f_t <not allocated> float
如果将函数autoset_rssi_rx_rf()的代码全部放到main()中,则一切正常
请问是什么原因,谢谢了。
[此贴子已经被作者于2006-8-25 11:30:47编辑过]
作者: strongchen 时间: 2006-8-25 13:37
局部变量不会分配固定的地址,只会放入堆栈中,而且要等其所在程序运行时才会分配。所以,只有程序进入autoset_rssi_rx_rf()函数后,你才能看到这些变量的地址和数据。
作者: zhudongpo 时间: 2006-8-25 15:07
我是在autoset_rssi_rx_rf()函数
rssi=(char)(rssi_14_t-rssi_f_t); //703-705= -2
处设置的断点呀。 而且我可以看到TT【0】,和TT【1】中已经是我写入的值
我原打算把相关信息的抓图发上来的可是上传图片老是提示
ADODB.Stream 错误 '800a0bbc'
写入文件失败。
/uploadTwo.inc,行175
[此贴子已经被作者于2006-8-25 15:07:41编辑过]
作者: seuafu2005 时间: 2006-8-25 15:59
恩,最近网站上传有点问题
也可能是这些变量大都执行中间过程的操作,所以编译器优化了操作,没有分配固定的空间
作者: strongchen 时间: 2006-8-25 16:15
堆栈溢出了?
作者: zhudongpo 时间: 2006-8-28 10:20
堆栈溢出了?
应该不会,我的 STACKSIZE 0x2000
如果将函数autoset_rssi_rx_rf()的代码全部放到main()中,则一切正常
如下
#include /* common defines and macros */
#include /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dp256b"
void main(void) {
/* put your own code here */
unsigned char tt[2];
char rssi=-91;
float rssi_14_t1;
float rssi_14_t2;
float rssi_14_t;
float rssi_f1_t1;
float rssi_f2_t1;
float rssi_f_t1;
float rssi_f1_t2;
float rssi_f2_t2;
float rssi_f_t2;
float rssi_f_t;
tt[0]=2;
tt[1]=190;
//eeprom_trx_rd(tt,1024+360, 2);//14875MHz,-45dBm,D,t1=25
rssi_14_t1=256*tt[0]+tt[1]; //702
//eeprom_trx_rd(tt,1024+503, 2);//14875MHz,-45dBm,D,t2=55
rssi_14_t2=256*tt[0]+tt[1]+2; //704
rssi_14_t=rssi_14_t1+(rssi_14_t2-rssi_14_t1)*0.77; // 703
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//eeprom_trx_rd(tt,800+81, 2);//15300MHz,-45dBm,t1=25
rssi_f1_t1=256*tt[0]+tt[1]; //702
//eeprom_trx_rd(tt,800+83, 2);//15350MHz,-45dBm,t1=25
rssi_f2_t1=256*tt[0]+tt[1]+6; //708
rssi_f_t1= (rssi_f2_t1+rssi_f1_t1)/2; //705
//////////////////////////////////////////////////////////////////////////////////////////////////
//eeprom_trx_rd(tt,800+104, 2);//15300MHz,-45dBm,t2=55
rssi_f1_t2=256*tt[0]+tt[1]; //702
//eeprom_trx_rd(tt,800+106, 2);//15350MHz,-45dBm,t2=55
rssi_f2_t2=256*tt[0]+tt[1]+8; //710
rssi_f_t2=(rssi_f1_t2+rssi_f2_t2)/2; //706
//////////////////////////////////////////////////////////////////////////////////////////////////
rssi_f_t=rssi_f_t1+(rssi_f_t2-rssi_f_t1)*0.77; //705
//////////////////////////////////////////////////////////////////////////////////////////////////
rssi=(char)(rssi_14_t-rssi_f_t); //703-705= -2
EnableInterrupts;
for(;;) {} /* wait forever */
}
作者: zhudongpo 时间: 2006-8-28 12:06
strongchen 麻烦再给看看吧。
作者: strongchen 时间: 2006-8-28 17:29
把整个project打包贴上来看看吧。或者发到strongchen_free@yahoo.com.cn。
作者: zhudongpo 时间: 2006-8-29 10:13
不能上传,已经发送到你的信箱。请查收一下。
作者: strongchen 时间: 2006-8-29 11:28
这可能是因为编译时优化产生的问题。你可以在变量声明前加static说明来解决,像这样:
static char rssi=-91;
static float rssi_14_t1;
static float rssi_14_t2;
static float rssi_14_t;
static float rssi_f1_t1;
static float rssi_f2_t1;
static float rssi_f_t1;
static float rssi_f1_t2;
static float rssi_f2_t2;
static float rssi_f_t2;
static float rssi_f_t;
调试时你就可以看到变量的地址和数值了。
作者: zhudongpo 时间: 2006-8-29 14:48
谢谢了,原来是这个原因呀。搞的我这几天头都大了。
作者: zhudongpo 时间: 2006-8-30 09:47
变量声明前加static说明来解决
我想再请教一下,如果不加的话,调测时看不到变量值,这样对最后的运算结果有影响吗?如果只是因为优化的原因不能在调测时看到变量值,而最终结果正确的话,我是不是可以在需要看变量值的地方加static,其他定义的变量可以不加?
作者: strongchen 时间: 2006-8-30 10:05
对,如果局部变量声明前加static,就会分配一个固定的地址,会占用很多的资源。如非必需,尽量不要加。正常情况下,应该不会影响结果。当可能影响结果时,编译器会有警告。此时关闭相应的优化选项即可。
作者: JerryBJ 时间: 2006-9-13 15:59
Hi Strongchen, saying hello to you!
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) |
Powered by Discuz! 7.0.0 |