2012-03-31 2 views
0
다음

는 오류가 표시 내가 카일이를 사용하려면 내가 keil uvision 4에서 복잡한 헤더 파일을 사용하는 방법?

#include <stdio.h> 
#include<complex.h> 
#include<math.h> 

int main() 
{ 
unsigned char i,j,p,q; 
complex arr[3][2]={{60 ,0},{80 ,-120},{100, -240}}; 
complex fabcr[3][1]={60+0i,-40-69.2820i,-50+86.6025i}; 
complex fa012[3][1], D[3][1],B[3][1],Vbal[3][1]; 
complex Vpol[3][2]; 
complex sum,l; 
complex A[3][3]={{1 , 1 , 1}, {1 ,-0.5+0.866i ,-0.5-0.866i}, {1 ,-0.5-0.866i, -0.5+0.866i}}; 
complex invA[3][3]= {{0.3333 - 0.0000i , 0.3333 + 0.0000i, 0.3333},   
        {0.3333 ,-0.1667 - 0.2887i, -0.1667 + 0.2887i}, 
        { 0.3333 + 0.0000i , -0.1667 + 0.2887i , -0.1667 - 0.2887i}}; 
complex a=-0.5+0.866i; 
//a^2 =-0.5-0.866i 
printf("%f +i %f \n %f %f",creal(a),cimag(a),cabs(a),(180/M_PI)*carg(a)); 
printf("\n line voltage fabcr \n\n"); 
for(i=0;i<3;i++) 
{    
     for(j=0;j<1;j++) 
      { 
      printf("%f +i %f ",creal(fabcr[i][j]),cimag(fabcr[i][j])); 
      } 
     printf("\n"); 
} 
printf("\n A matrix \n\n"); 

for(i=0;i<3;i++) 
{    
     for(j=0;j<3;j++) 
      { 
      printf("%f +i %f ",creal(A[i][j]),cimag(A[i][j])); 
      } 
     printf("\n"); 
} 
printf("\ninvA matrix\n\n"); 
for(i=0;i<3;i++) 
{    
     for(j=0;j<3;j++) 
      { 
      printf("%f +i %f ",creal(invA[i][j]),cimag(invA[i][j])); 
      } 
     printf("\n \n"); 
} 

//matrix multiplication 
for(p=0;p<3;p++) 
    { 
     sum=0;  
     for(q=0;q<3;q++) 
     { 
      l=fabcr[q][0]*A[p][q]; 
      sum=sum+l; 

       }  
      printf("%f i %f \n", creal(sum),cimag(sum)); 
      //fa012[p][1]=(1/3)*creal(sum)+i*(1/3)*cimag(sum); 
      fa012[p][0]=sum*0.33; 

    } 
    printf("\n symmetrical componenet fa012\n \n"); 
    for(p=0;p<3;p++) 
    { 
     printf("%f i %f \n", creal(fa012[p][0]),cimag(fa012[p][0])); 
    } 

D[0][0]=-fa012[0][0]; 
D[1][0]=0; 
D[2][0]=-fa012[2][0]; 
printf("\n matrix D \n \n"); 
for(p=0;p<3;p++) 
    { 
     printf("%f i %f \n", creal(D[p][0]),cimag(D[p][0])); 
    } 
printf("\n\nzero and negative sequence component in line voltage terms\n\n"); 
for(p=0;p<3;p++) 
    { 
     sum=0;  
     for(q=0;q<3;q++) 
     { 
      l=D[q][0]*invA[p][q]; 
      sum=sum+l; 

       }  
      printf("%f i %f \n", creal(sum),cimag(sum)); 
      //fa012[p][1]=(1/3)*creal(sum)+i*(1/3)*cimag(sum); 
      B[p][0]=sum*3; 

    } 
printf("\n\nfinal balanced voltage \n\n") ; 
for(p=0;p<3;p++) 
    { 
    Vbal[p][0]=fabcr[p][0]+B[p][0]; 
    printf("\n %f i %f \n %f %f \n", creal(Vbal[p][0]),cimag(Vbal[p][0]),cabs(Vbal[p][0]),(180/M_PI)*carg(Vbal[p][0])); 
     } 

    printf("\n\n conversion to polar cordinates \n\n") ; 
for(i=0;i<3;i++) 
{    
    Vpol[i][0]= cabs(Vbal[i][0]); 
    Vpol[i][1]= (180/M_PI)*carg(Vbal[i][1]); 
    printf("%f %f \n",Vpol[i][0],Vpol[i][1] );  

}  

getch(); 
} 

를 쓴 프로그램입니다. 복잡한 조작 방법을 제안하십시오. 또한 complex.h와 _mingw.h를 devcpp include 폴더에서 keil/c51/inc 폴더로 복사했습니다.

답변

0

당신은 카일의 uVision를 사용하여 프로그램 컴파일을 할 네 가지 작업을 수행해야합니다

  1. 컴파일러 인수에 스위치 --c99를 추가합니다.

    --c90 Switch to C mode (default for .c files)

  2. 변경 complex의 모든 발행 수있는 이유는 다음과 같습니다 : 에 인수없이 터미널을 armcc를 호출 할 때 볼 수 있듯이 armcc는 4 * .c 인 파일에 대한 C90 모드를 사용 카일의 uVision과 을 제공한다는 것입니다 코드가 float complex 또는 double complex 인 경우 C99의 복합 데이터 유형 이름입니다. 예를 들어, here도보십시오.

  3. -0.5+0.866i과 같은 복소수의 정의가 작동하지 않습니다. 을 -0.5+0.866*I으로 변경하십시오. 이 armcc와 을 제공됩니다 <math.h>에 정의되지 않는

  4. PI의 자신의 정의를 확인하십시오. 예를 들면 다음과 같습니다. 코드가 적어도 컴파일이 단계 후

#define M_PI 3.1415926535897932384626433832795

. 그러나, 몇 가지 더 문제가 있습니다 :

  1. 당신은 라인 Vpol[i][0]으로

    printf("%f %f \n",Vpol[i][0],Vpol[i][1] );

    의 float 대신 출력에 복잡한 값을 %f을 사용하고있는이되는 복잡한의 크기 숫자가 Vpol[i][1]이고 그 숫자가 인 경우 cabs(Vpol[i][0])creal(Vpol[i][1])을 출력 할 수 있습니다.

    물론이 배열에 실제 값을 저장하기 때문에 정의를 float Vpol[3][2]; 으로 변경하는 것이 좋습니다.

  2. 기능 getch()은 당신이 가능하게 연결하기 전에 자신의 구현을 제공 에있는 <stdio.h>의 일부, 즉하지 않을 수 있습니다.

  3. (실제로 "문제"는 아님). 변수 arr은 절대로 사용되지 않습니다.

희망 하시겠습니까?

#include <stdio.h> 
#include <complex.h> 
#include <math.h> 

#define M_PI 3.1415926535897932384626433832795 

int main() 
{ 
    unsigned char i,j,p,q; 
    float complex fabcr[3][1] = {60+0*I,-40-69.2820*I,-50+86.6025*I}; 
    float complex fa012[3][1], D[3][1],B[3][1],Vbal[3][1]; 
    float Vpol[3][2]; 
    float complex sum,l; 
    float complex A[3][3] = {{1, 1,   1}, 
          {1, -0.5+0.866*I, -0.5-0.866*I}, 
          {1, -0.5-0.866*I, -0.5+0.866*I}}; 
    float complex invA[3][3] 
     = {{0.3333 - 0.0000*I, 0.3333 + 0.0000*I, 0.3333},   
      {0.3333,   -0.1667 - 0.2887*I, -0.1667 + 0.2887*I}, 
      {0.3333 + 0.0000*I, -0.1667 + 0.2887*I, -0.1667 - 0.2887*I}}; 
    float complex a = -0.5+0.866*I; 
    //a^2 =-0.5-0.866i 
    printf("%f +i %f \n %f %f", creal(a), cimag(a), 
           cabs(a), (180/M_PI) * carg(a)); 
    printf("\n line voltage fabcr \n\n"); 
    for(i=0; i<3; i++) 
    {    
     for(j=0; j<1; j++) 
     { 
      printf("%f +i %f ",creal(fabcr[i][j]),cimag(fabcr[i][j])); 
     } 
     printf("\n"); 
    } 
    printf("\n A matrix \n\n"); 

    for(i=0; i<3; i++) 
    {    
     for(j=0;j<3;j++) 
     { 
      printf("%f +i %f ",creal(A[i][j]),cimag(A[i][j])); 
     } 
     printf("\n"); 
    } 
    printf("\ninvA matrix\n\n"); 
    for(i=0; i<3; i++) 
    {    
     for(j=0;j<3;j++) 
     { 
      printf("%f +i %f ",creal(invA[i][j]),cimag(invA[i][j])); 
     } 
     printf("\n \n"); 
    } 

    // matrix multiplication 
    for(p=0; p<3; p++) 
    { 
     sum=0;  
     for(q=0; q<3; q++) 
     { 
      l=fabcr[q][0]*A[p][q]; 
      sum=sum+l; 
     }  
     printf("%f i %f \n", creal(sum),cimag(sum)); 
     // fa012[p][1]=(1/3)*creal(sum)+i*(1/3)*cimag(sum); 
     fa012[p][0]=sum*0.33; 
    } 
    printf("\n symmetrical component fa012\n \n"); 
    for(p=0; p<3; p++) 
    { 
     printf("%f i %f \n", creal(fa012[p][0]),cimag(fa012[p][0])); 
    } 

    D[0][0] = -fa012[0][0]; 
    D[1][0] = 0; 
    D[2][0] = -fa012[2][0]; 
    printf("\n matrix D \n \n"); 
    for(p=0; p<3; p++) 
    { 
     printf("%f i %f \n", creal(D[p][0]),cimag(D[p][0])); 
    } 
    printf("\n\nzero and negative sequence component in line voltage terms\n\n"); 
    for(p=0; p<3; p++) 
    { 
     sum=0;  
     for(q=0; q<3; q++) 
     { 
      l=D[q][0]*invA[p][q]; 
      sum=sum+l; 
     }  
     printf("%f i %f \n", creal(sum),cimag(sum)); 
     //fa012[p][1]=(1/3)*creal(sum)+i*(1/3)*cimag(sum); 
     B[p][0]=sum*3; 
    } 
    printf("\n\nfinal balanced voltage \n\n") ; 
    for(p=0; p<3; p++) 
    { 
     Vbal[p][0] = fabcr[p][0]+B[p][0]; 
     printf("\n %f i %f \n %f %f \n", 
       creal(Vbal[p][0]), cimag(Vbal[p][0]), 
       cabs(Vbal[p][0]), (180/M_PI) * carg(Vbal[p][0])); 
    } 

    printf("\n\n conversion to polar cordinates \n\n") ; 
    for(i=0; i<3; i++) 
    {    
     Vpol[i][0] = cabs(Vbal[i][0]); 
     Vpol[i][1] = (180/M_PI) * carg(Vbal[i][1]); 
     printf("%f %f \n", Vpol[i][0], Vpol[i][1]);  
    }  
} 
관련 문제