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 编辑 ]
此帖出自小平头技术问答
一周热门 更多>