как поместить символ массива в уравнение? - PullRequest
0 голосов
/ 06 августа 2009

Я пытаюсь вставить 8-байтовый символ в уравнение, вызывающее много ошибок, что я должен сделать, чтобы убедиться, что уравнение может принимать статическое значение и производить вывод в 8 байтов.

#include <math.h>
#include <hidef.h> /* for EnableInterrupts macro */

#include "derivative.h" /* include peripheral declarations */

void voltage_measure(void);

void main(void) {

  voltage_measure();

}

void voltage_measure(void) {
   char Van1[8],VA;
   char Vbn[8],VB;
   char Vcn[8],VC;
   char AC[4],ac;
   char BC[4],bc;
   char AB[4],ab;    
   double Vab1,Vab2,Vbc1,Vbc2,Vac1,Vac2;
   double Vab[8],Vbc[8],Vac[8];

   Van1[0]=0xF0;   
   Van1[1]=0x00;
   Van1[2]=0x00;                                  
   Van1[3]=0x00;

   VA=0x000000F0;

   Vbn[0]=0x78;
   Vbn[1]=0x00;
   Vbn[2]=0x00;
   Vbn[3]=0x00;

   VB=0x78;

   Vcn[0]=0x3C;
   Vcn[1]=0x00;
   Vcn[2]=0x00;
   Vcn[3]=0x00;

   VC=0x3C;

   AB[0]=0xB4;
   AB[1]=0x00;

   ab=0xB4;

   AC[0]=0x2D;
   AC[1]=0x00;

   ac=0x2D;

   BC[0]=0x5A;
   BC[1]=0x00;

   bc=0x5A;
   Vab1=(VB*sin(ab))*(VB*sin(ab))  ;
   Vab2=(VA+(VB*cos(ab)))*(VA+(VB*cos(ab)));
   Vab[4]=sqrt(Vab1+Vab2);

   Vbc1=(VC*sin(bc))*(VC*sin(bc));
   Vbc2=(VB+(VC*cos(bc)))*(VB+(VC*cos(bc))) ;
   Vbc[4]=sqrt(Vbc1+Vbc2);

   Vac1=(VC*sin(ac))*(VC*sin(ac));
   Vac2=(VA+(VC*cos(ac)))*(VA+(VC*cos(ac)));
   Vac[4]=sqrt(Vac1+Vac2);
}

Ответы [ 3 ]

1 голос
/ 06 августа 2009

Это то, что я понял,

  1. вы хотите сделать арифметику с двойной точностью, которая имеет несколько параметров
    • Вы хотели бы сохранить параметры в char переменных (возможно, для экономии места?)
    • Я не знаю, почему вы пытаетесь написать VA=0x000000F0;, когда переменная char (1 байт)
    • static value, о котором вы говорите, вероятно, являются константами VA и т. Д.
    • Может быть полезно, чтобы все это работало в арифметике с double точностью
    • когда вы используете функции sin и sqrt, они будут работать на double в любом случае
    • у вас нет функции main, перечисленной здесь;
    • это будет в вашем текущем файле (который компилирует этот код)
    • Итак, я также предполагаю, что у вас есть такие вещи, как math.h включены
      и математическая библиотека по команде компиляции
    • то есть вы получаете скомпилированный бинарный файл без ошибок

может быть, вы можете подробнее рассказать о проблеме, с которой вы столкнулись?


  1. Обновление от комментария 1.
    Когда вы говорите «символ с 8-байтовым массивом» - вы пытаетесь создать double с массивом 8 char?

    • Обновление от комментария 2. Если ваш ответ в double, вы можете перехватить его в переменной double.
      double - это уже 8 байт (на большинстве платформ).
      Есть ли особая причина, чтобы получить его в массив char или байтовый массив?

    • Обновление от комментария 3.
      Ошибка ссылки означает, что вы включили математическую библиотеку для ссылки.
      Заголовок просто дает прототипы функций для компиляции.
      С gcc это будет -lm в командной строке.

    • Обновление от комментария 4.
      Чтобы преобразовать double в целочисленное значение, проверьте эту страницу,
      Как преобразовать значение с плавающей запятой в целое число в C?

0 голосов
/ 06 августа 2009

Что касается ошибки ссылки, которую вы упомянули в комментариях: в том числе math.h недостаточно, вы должны указать компоновщику также добавить библиотеку. Попробуйте добавить «-lm» в командной строке.

0 голосов
/ 06 августа 2009

Проблема в том, что на вашем компьютере подписано обычное char, поэтому числа, такие как 0xF0, рассматриваются как -16 вместо +240? Знаете ли вы, что на некоторых машинах это происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...