TI DSP5509a串口uart程序,请教!

2019-03-26 16:35发布

ICETEK5509A瑞泰开发板,自带UART串口例程,根据其自带例程修改串口程序。打算上位机发给dsp  V,I两个数,经过算法程序后,dsp返回上位机一个数soc。
目前问题是,屏蔽掉算法函数,可以输出V ,I 两数(即:发什么接什么可以,加入算法就不可以);加入算法函数,却输出不了soc!即执行不了算法函数。
无警告无错误,就是输出不了soc!
ps:当然,新建了个只含算法函数的工程,结果没问题,说明算法函数是没错的 下面贴上代码,望高手相助!
#include "5509.h" #include "util.h" #include "math.h" #include "stdio.h" #include "stdlib.h" #define UART_BASE_ADDR 0x400400 #define RBR *((int *)(UART_BASE_ADDR+0)) #define THR *((int *)(UART_BASE_ADDR+0)) #define IER *((int *)(UART_BASE_ADDR+1)) #define IIR *((int *)(UART_BASE_ADDR+2)) #define FCR *((int *)(UART_BASE_ADDR+2)) #define LCR *((int *)(UART_BASE_ADDR+3)) #define MCR *((int *)(UART_BASE_ADDR+4)) #define LSR *((int *)(UART_BASE_ADDR+5)) #define MSR *((int *)(UART_BASE_ADDR+6)) #define SCR *((int *)(UART_BASE_ADDR+7)) #define DLL *((int *)(UART_BASE_ADDR+0)) #define DLM *((int *)(UART_BASE_ADDR+1)) void ekfilter(double VV,double II,double Uoc,double Ro,double Cb,double Rp,double Cp,double Ck,double soc,double Ub,double Up); void trmul(double a[],double b[],int m,int n,int k,double c[]); void trmul1(double a[],double b,int m,int n,int k,double c[]); void TMCR_reset( void ); void EMIF_init(void); void wait(int nWait); char cString[17]={ "Hello PC!,Over|" },cReceive,cBuffer[17],cAnswer[16]={"Oh,you say"}; char SOCbuffer[17],VBuffer[8],IBuffer[7]; double V,I; int bReceive,nLen; double xk[3][1],p1[3][3]; //子函数中全局变量 /************************************************************************************/ main() { unsigned int uWork; int i,ii,k; double soc0,Up3,Ub3,Uoc3,Cp3,Cb3,Rp3,Ro3,Ck1; bReceive=0; soc0=0.5; Ub3=0; Up3=0; TMCR_reset(); PLL_Init(12); EMIF_init(); LCR = 0x80; DLL = 0x18; DLM = 0x00; LCR = 0x03; FCR = 0x01; MCR = 0x00; MSR = 0x00; IER = 0x00; /****************************************************************/ Uoc3=22.44444444443954*(soc0)*(soc0)*(soc0)*(soc0)*(soc0)*(soc0)-71.26923076921497*(soc0)*(soc0)*(soc0)*(soc0)*(soc0)+87.94316239314253*(soc0)*(soc0)*(soc0)*(soc0)-52.24003496502270*(soc0)*(soc0)*(soc0)+14.67607917637537*(soc0)*(soc0)-1.34452144522091*(soc0)+3.19713333333331; Ro3=-0.01388888888890*(soc0)*(soc0)*(soc0)*(soc0)*(soc0)*(soc0)+0.05096153846157*(soc0)*(soc0)*(soc0)*(soc0)*(soc0)-0.07142094017097*(soc0)*(soc0)*(soc0)*(soc0)+0.04711975524477*(soc0)*(soc0)*(soc0)-0.01323894716395*(soc0)*(soc0)-0.00547174825175*(soc0)+0.03864000000000; Cb3=-40.374671270825*(soc0)*(soc0)*(soc0)*(soc0)*(soc0)*(soc0)+134.403709647570*(soc0)*(soc0)*(soc0)*(soc0)*(soc0)-172.465991029534*(soc0)*(soc0)*(soc0)*(soc0)+106.823248423098*(soc0)*(soc0)*(soc0)-32.805016213062*(soc0)*(soc0)+4.646421951718*(soc0)-0.226964695470; Rp3=0.45138888888890*(soc0)*(soc0)*(soc0)*(soc0)*(soc0)*(soc0)-0.89855769230775*(soc0)*(soc0)*(soc0)*(soc0)*(soc0)+0.50034722222232*(soc0)*(soc0)*(soc0)*(soc0)+0.00649839743582*(soc0)*(soc0)*(soc0)-0.04295245726493*(soc0)*(soc0)-0.02928066433567*(soc0)+0.03462333333333; Cp3=-1.90333055555553*(soc0)*(soc0)*(soc0)*(soc0)*(soc0)*(soc0)+4.56779621794867*(soc0)*(soc0)*(soc0)*(soc0)*(soc0)-3.96201360042734*(soc0)*(soc0)*(soc0)*(soc0)+1.48495611217952*(soc0)*(soc0)*(soc0)-0.22097162814300*(soc0)*(soc0)+0.05096333317250*(soc0)+0.02794094200000; /******************************************************************/ for(;;) { if ( bReceive==0 ) { for ( i=0;i<16;i++ ) { do { uWork=LSR; } while ( uWork&0x040 != 0x040 ); THR=cString; wait(128); } } else { for ( i=0;i<10;i++ ) { do { uWork=LSR; } while ( uWork&0x040 != 0x040 ); THR=cAnswer; wait(128); } do { uWork=LSR; } while ( uWork&0x040 != 0x040 ); THR='"'; /*******************以下为cBuffer[k]**********************************************************************/ /*--------加入算法-------------------*/ for(ii=0;ii<8;ii++) VBuffer[ii]=cBuffer[ii]; for(ii=8;ii<15;ii++) IBuffer[(ii-8)]=cBuffer[ii]; V=atof(VBuffer)/10; //V=strtod(VBuffer,NULL);// I=atof(IBuffer)/10 ;//I=strtod(IBuffer,NULL);// Ck1=134.66666664*(soc0)*(soc0)*(soc0)*(soc0)*(soc0)-356.34615385*(soc0)*(soc0)*(soc0)*(soc0)+351.77264956*(soc0)*(soc0)*(soc0)-156.72010488*(soc0)*(soc0)+29.35215836*(soc0)-1.344521445-I*(-.8333333334e-1*(soc0)*(soc0)*(soc0)*(soc0)*(soc0)+.25480769230*(soc0)*(soc0)*(soc0)*(soc0)-.28568376068*(soc0)*(soc0)*(soc0)+.14135926572*(soc0)*(soc0)-.2647789432e-1*(soc0)-.5471748252e-2); ekfilter(V,I,Uoc3,Ro3,Cb3,Rp3,Cp3,Ck1,soc0,Ub3,Up3); soc0=xk[2][0];//yy(k+1)=xk(3,1); //yy里存13700个数soc Ub3=xk[0][0]; //Ub=xk(1,1); Up3=xk[1][0]; //Up=xk(2,1); sprintf(SOCbuffer, "%lf", soc0); //double变字符数组 /*****************************************************/ for ( i=0;i;//cBuffer; wait(128); } do { uWork=LSR; } while ( uWork&0x040 != 0x040 ); THR='"'; wait(128); for ( i=9;i<16;i++ ) { do { uWork=LSR; } while ( uWork&0x040 != 0x040 ); THR=cString; wait(128); } } k=0; bReceive=0; while ( 1 ) { do { uWork=LSR; } while ( (uWork&1)==0 ); cReceive=RBR; cBuffer[k]=cReceive&0x0ff; if ( cReceive=='&' ) { cBuffer[k+1]=''; nLen=k+1; bReceive=1; break; } k++; k%=16; } } } [ 本帖最后由 jessicadhit 于 2012-5-11 21:26 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。