智能车制作

标题: 求各位高手指教,感激不尽啊—————— [打印本页]

作者: ywxk    时间: 2009-1-11 22:57
标题: 求各位高手指教,感激不尽啊——————
<>这段代码是要测量脉冲的宽度,用定时器溢出中断来进行中断次数记录,最后用中断次数乘以定时器每一溢出所需时间的脉宽。元件是mc9s12dg128b,飞思卡尔的芯片。检查了N*N次,都有这样一个错误:</P><P>L1822: Symbol _FUFLOAT in file .....(FILE NAME) is undefined.</P><P>求各位高手指教,感激不尽啊——————</P><P>&nbsp;</P><P>#include &lt;hidef.h&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* common defines and macros */<BR>#include &lt;mc9s12dg128.h&gt;&nbsp;&nbsp;&nbsp;&nbsp; /* derivative information */<BR>#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"</P><P><BR>unsigned int tofcnt;<BR>unsigned int pw;</P><P>void MCUInit(void){<BR>&nbsp;&nbsp;&nbsp;&nbsp; asm cli;<BR>&nbsp;&nbsp;&nbsp;&nbsp; DDRB=0XFF;<BR>&nbsp;&nbsp;&nbsp;&nbsp; PORTB=0XFF;<BR>&nbsp;&nbsp;&nbsp;&nbsp; asm sei;<BR>}</P><P>&nbsp;</P><P>void ECTInit(void) {<BR>&nbsp;&nbsp;&nbsp; asm cli;<BR>&nbsp;&nbsp;&nbsp; TIOS=0X00;<BR>&nbsp;&nbsp;&nbsp; TSCR1_TEN=1;//定时器使能<BR>&nbsp;&nbsp;&nbsp; TSCR1_TSWAI=0;<BR>&nbsp;&nbsp;&nbsp; TSCR1_TSFRZ=0;//冻结与等待模式下正常计数<BR>&nbsp;&nbsp;&nbsp; TSCR1_TFFCA=1;//自动清零<BR>&nbsp;&nbsp;&nbsp; TCTL3=0XFF;<BR>&nbsp;&nbsp;&nbsp; TCTL4=0XFF;//同时捕捉上升沿下降沿<BR>&nbsp;&nbsp;&nbsp; TIE=0X00;//各通道不允许中断<BR>&nbsp;&nbsp;&nbsp; TSCR2=0X07;//禁止中断,128分频<BR>&nbsp;&nbsp;&nbsp; TFLG1=0X00;//通道无中断<BR>&nbsp;&nbsp;&nbsp; TFLG2_TOF=0;//定时器溢出中断标志位<BR>&nbsp;&nbsp;&nbsp; TC0=0; //输入捕捉寄存器0置零<BR>&nbsp;&nbsp;&nbsp; //DLYCT=0X00;//延迟计数256总线时钟<BR>&nbsp;&nbsp;&nbsp; asm sei;<BR>}</P><P>&nbsp;</P><P><BR>void main(void) {<BR>&nbsp; unsigned int ini_time=0,end_time=0,time=0,count=0;<BR>&nbsp; float pw=0.0;<BR>&nbsp; MCUInit();<BR>&nbsp; ECTInit();<BR>&nbsp; tofcnt=0;<BR>&nbsp;&nbsp; <BR>&nbsp;EnableInterrupts;</P><P>&nbsp; while(count!=2) {<BR>&nbsp;&nbsp;&nbsp;&nbsp; if(TFLG1=0X01)&nbsp;&nbsp; //脉冲由IC0通道输入捕捉<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TFLG1=0X01;//清零<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; time=TC0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp; while(count==1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ini_time=time;//记录脉冲开始时定时器值<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(TFLG1=0X01)&nbsp; //检测下降沿是否到来<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TFLG1=0X01;//清零<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end_time=TC0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TSCR2 |=0X87;//允许定时器溢出中断&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp; count=0;<BR>&nbsp;&nbsp;&nbsp;&nbsp; TSCR2 &amp;=0X87;//禁止定时器溢出中断<BR>&nbsp;&nbsp;&nbsp;&nbsp; pw=(tofcnt*65536-ini_time+end_time)*128/8000000;<BR>&nbsp;&nbsp;&nbsp;&nbsp; pw=SCI0DRL;;//等待发送&nbsp; <BR>&nbsp; }<BR>&nbsp; /* please make sure that you never leave this function */<BR>}</P><P>&nbsp;</P><P>#pragma CODE_SEG__NEAR_SEG NON_BANKED<BR>void interrupt 16 TofItrpt(void) {<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; asm cli;<BR>&nbsp;&nbsp;&nbsp;&nbsp; TFLG2_TOF=1;//中断标志位清零<BR>&nbsp;&nbsp;&nbsp;&nbsp; tofcnt++;<BR>&nbsp;&nbsp;&nbsp;&nbsp; //SCI0DRL=tofcnt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp; //PORTB=tofcnt;<BR>&nbsp;&nbsp;&nbsp;&nbsp; asm sei;<BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR>}<BR>#pragma CODE_SEG DEFAULT</P><P>&nbsp;</P>
作者: whut_wj    时间: 2009-1-12 21:07
标题: Re:求各位高手指教,感激不尽啊——————
<>没见过,重新建个工程,代码考过去。把.c .h文件组织好。</P><P>这个应该不是语法问题。</P>
作者: ywxk    时间: 2009-1-12 23:28
标题: Re:求各位高手指教,感激不尽啊——————
<>我又试了一次,新建的工程还是一样的错误。把下边这个算脉宽的式子注释掉,程序没有问题。说白了,主函数最后不能出现溢出中断次数(tofcnt)和脉宽(pw)这两个变量,我都快崩了,调了几个下午了.............................................................................................</P><P>&nbsp;&nbsp; pw=(tofcnt*65536-ini_time+end_time)*128/8000000;<BR>&nbsp;&nbsp;&nbsp;&nbsp; pw=SCI0DRL;;//等待发送&nbsp; </P><P><BR>&nbsp;</P>
作者: ywxk    时间: 2009-1-12 23:38
标题: Re:求各位高手指教,感激不尽啊——————
<>补充一下,</P><P>L1822: Symbol _FUFLOAT in file .....(FILE NAME) is undefined.</P><P>指的是main.c.o. 这个文件没有定义,链接时出的错误,编译没问题</P><P>&nbsp;</P><P>&nbsp;</P><P>我无言啊,这个事情,请各位大侠帮帮忙吧</P>
作者: ywxk    时间: 2009-1-13 04:55
标题: Re:求各位高手指教,感激不尽啊——————
对照着其他可链接的程序,基本已经找到答案了。就是,那个算脉冲宽度的式子只能另用一个函数表达,这个函数不能有返回值,否则就链接报错。自然地,脉冲到来时定时器时间和脉冲结束定时器时间需设为全局变量,这时只能在新函数中计算和打印了,具体原因就不知道了,大家可以看看。
作者: whut_wj    时间: 2009-1-14 02:32
标题: Re:求各位高手指教,感激不尽啊——————
<>哦?这样。不过你的程序函数看起来很怪。</P>
作者: chiusir    时间: 2009-1-14 18:35
标题: Re:求各位高手指教,感激不尽啊——————
<>pw=(tofcnt*65536-ini_time+end_time)*128/8000000;</P><P>你这个语句存在很多隐患,你里面用的数据“太大”,tofcnt*65536远大于16位,所以PW,TOFCNT定义为32位更合适,同时,尽量减少大量的乘法和除法运算,采用移位操作,效率会有很大的改善。</P><P>你改变一下编成风格,看起来会舒服点儿,否则别人帮你的时候会“很累”,读别人的代码挺难的。</P><P>加油!!!</P>
作者: ywxk    时间: 2009-1-15 17:51
标题: Re:求各位高手指教,感激不尽啊——————
好,我会的,这个程序我已经换了一个思路去编,比这简单多了,以后我一定把程序写得“通俗”一些!谢谢鼓励!




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2