Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Своими руками

Своими руками Завершенные и текущие проекты, хард & софт

Ответ
 
Опции темы Опции просмотра
Старый 29.04.2016, 17:04   #1
Zloj_ya
Senior Member
 
Регистрация: 29.03.2007
Сообщений: 146
Вес репутации: 100/38
Zloj_ya will become famous soon enoughZloj_ya will become famous soon enough
По умолчанию Делюсь программой преобразования float в массив для вывода, например, на LCD

Часто возникает необходимость преобразовать float число в строку для вывода на LCD и т.п. Не претендуя на универсальность, предлагаю код для решения подобных задач.
Прога - в помощь скорее начинающим.
Гуру от оптимизации и классиков красивого написания программ прошу не беспокоиться в критике. Хотите - используйте, хотите - нет.
"Весит" она все равно меньше, чем всевозможные sprintf - ы.
Могу сказать одно - в комментах я не скупился, дабы людям было максимально понятно.
Да, подпрограмма "itoa3" - не моя, я ее где-то на форумах срисовал и подправил применительно к своему коду.

Код:
        
              //   ПРОГРАММА ДЛЯ ОТЛАДКИ ПРЕОБРАЗОВАНИЯ float-числа 
              //  В МАССИВ ASCII-символов  ДЛЯ ВЫВОДА, НАПРИМЕР НА LCD
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

             //           ДЛЯ  PIC18F452-го 

//    --------------------------------
#include<htc.h>
#include<pic18.h>
#include<math.h>
#include<float.h>

//---------ОПИСАНИЕ ГЛОБАЛЬНЫХ ПЕРЕМЕННЫХ--------------------------
  unsigned char asc[6];
  unsigned char  mass_rez[11];
  unsigned char kwo_bajt; 
  
//----------ОПИСАНИЕ  ПРОТОТИПОВ ПОДПРОГРАММ------------------------------------  
    void flo_to_asci (double) ; // 
     void itoa3(unsigned long int); //Подпрограмма "itoa3" преобразования unsigned long int- числа
                                                          //в набор десятичных цифр
  
  //----------КОНЕЦ ОПИСАНИЯ   ПРОТОТИПОВ ПОДПРОГРАММ-----------------------
  
 
//   В настройках компилятора должен быть установлен 32-битный double (не меньше!)

void  main()
 
     {   
        double test; //   переменная для проверки работы
                 
               //test = 0.7;
               // test = -0.7;
               //test = 1.0;
                //test = -1.0;
                //test = 10.6;
                //test = -10.6;
                 //test = 123.5;
               test = -123.5;
                //test = 9999.3;
                //test = -9999.3;
                //test = 99997.8;
                //test = -99997.8;
               // test = 999999.3454567;
                //test = -999999.3454567;
          //test = 999999.99;  //   А это - для проверки переполнения (в положит. сторону )
             // test = -999999.99;   //это - для проверки переполнения (в отрицат. сторону )
     
         
                   flo_to_asci (test) ; //  Вызываем подпрограмму преобрразования. 
                                               // Результаты - в "mass_rez[]"  и глоб. перем. "kwo_bajt"
                              
               while (1) ;
   
     }

       //  КОНЕЦ ОСНОВНОЙ ПРОГРАММЫ

 
 //---------------------------------------------------------------------------------------------------------------
//Подпрограмма "flo_to_asci" преобразования float- числа
//в набор десятичных цифр, знака "минус" и точки.
//  Результат в кодах ASCII размещается в 
// глобальном массиве "mass_rez[]".
//  Выдает также индекс длины записи в массиве (глоб. перем. "kwo_bajt")
// Без подпрограммы "itoa3" - НЕ РАБОТАЕТ!
//---------------------------------------------------------------------------------------------------------------- 
  void flo_to_asci (double vhd)
      {
           double VH_Zn;  //  Обязательно, т.к. float самовольно округляет !!!
           double  modul_VH_Zn;
           unsigned long int C_ch_fl; // Целая часть от исх. float-числа
           unsigned char  DR_ch_fl  ;  // unsigned char из дробной части исх. float-числа
            unsigned char j   ;  //  Признак отрицательности вх. числа ( 1 означает  минус)
            
            VH_Zn = vhd ;
          
                 j = 0;  // Очищаем признак отрицательности вх. числа        
         { unsigned char i  ; 
               for (i=0;i <10;i++) {mass_rez[i] = '@';}  // Заполняем массив символами @
               // Это для того, чтобы найти потом конец "полезной" информации
               // при переборе готового массива
             }
         
     //=====================Преобразование ======================
     // Результатом работы программы  является глобальный массив "mass_rez[]"  
     // и глоб. переменная "kwo_bajt", в которой содержится индекс последнего
     // значащего байта в массиве "mass_rez[]".
     //  Например, если преобразуется число 125.3, то расположение байтов будет в
     // массиве таким: в mass_rez[0]  - 0x31 
      //                               в mass_rez[1]  - 0x32
      //                               в mass_rez[2]  - 0x35
      //                               в mass_rez[3]  - 0x2C
      //                               в mass_rez[4]  -  0x33  (помним, что в байты ложатся коды ASCII 
     // десятичных чисел) . 
     //      Значение 0x2С - это ASCII код запятой, она устанавливается принудительно
     // и всегда в предпоследнем байте.  Индекс "kwo_bajt" в данном случае равен 4.
     // Индекс начинает считаться с нуля!!!!     
          // Если преобразуемое число отрицательное, например,  -125.3  то массив 
          // будет таким:  в mass_rez[0]  - 0x2D    - это ASCII код знака минус
      //                               в mass_rez[1]  - 0x31 
      //                               в mass_rez[2]  - 0x32
      //                               в mass_rez[3]  - 0x35
      //                               в mass_rez[4]  - 0x2C   - это ASCII код запятой
      //                               в mass_rez[5]  - 0x33  (помним, что в байты ложатся коды ASCII 
     // десятичных чисел) . 
     //           Индекс "kwo_bajt" в данном случае равен 5.
               // Индекс начинает считаться с нуля!!!!
     
     //  Т.е. - самый старший разряд десятичного числа (или знак "-") всегда помещается 
     // в ячейку  mass_rez[0].
     
     //  Диапазон преобразуемых чисел :  от  999999.96  до  -999999.96
     //   Выбор граничного числа 999999.96 обусловлен возможностями компилятора,
 //  связанными  с его "нежеланием" обрабатывать дробную часть в бОльших числах
 
  //  Если входное число выходит за указанный диапазон - в выходном массиве вместо
  // цифр формируется соотв. текстовое сообщение.
 
     // ===================================================================
     
    // --- Проверка входного числа на "отрицательность " --------         
              if (VH_Zn < 0.0) { j = 1;                                          //  число отрицат.
                                        modul_VH_Zn = fabs(VH_Zn);  // берем его модуль
                                        VH_Zn = modul_VH_Zn;            //и переприсваиваем    
                                              } 
    // --- Проверка входного числа на "отрицательность " --------      
    
   // --- Проверка вх. числа на " переполнение в отрицат. сторону " --------                 
             if ( (j == 1)&&(VH_Zn > 999999.96)) { kwo_bajt = 9;
                              const char otr_prp[] = {'О','т','р','.','п','е','р','е','п','.'};
                                        {  unsigned char i ;               
                                  for (i=0; i<10; i++)    {  mass_rez[i] = otr_prp[i]; }              
                                          }
                                  goto Vyhod ;}    
     // --- Проверка вх. числа на " переполнение в отрицат. сторону " --------  
       
     
     // --- Проверка вх. числа на " переполнение в положит. сторону " --------                 
             if ( (j == 0)&&(VH_Zn > 999999.96)) { kwo_bajt = 5;
                              const char otr_prp[] = {'П','е','р','е','п','.'};
                                    {  unsigned char i ;               
                                  for (i=0; i<6; i++)    {  mass_rez[i] = otr_prp[i]; }              
                                     }
                                  goto Vyhod ;}   
       // --- Проверка вх. числа на " переполнение в положит. сторону " --------                  
     
     // --------  Вх. число "в допустимом диапазоне", обрабатываем -----------  
         {
           double aprt = 0.0; //  врEменная переменная
           aprt = (VH_Zn - floor(VH_Zn)) *10; 
          DR_ch_fl = ((unsigned char)(aprt)) | 0x30; //  Получ. десятичн. цифра дробн. части
                                                                                      //  вх. числа в ASCII - кодировке          
                 }  
          C_ch_fl = (unsigned long int)(VH_Zn ) ;// Целая часть от вх. float-числа
          itoa3(C_ch_fl);   // Получ. набора десятичн. цифр целой 
                                        // части вх. числа в ASCII - кодировке
       // --------  Вх. число "в допустимом диапазоне", обрабатываем -----------  
       
       //------------- Формирование результрующего массива ------------
             // Отсчитываем в массиве "asc[]" (начиная слева) количество незначащих нулей,
             //  которых в этой программе НЕ может быть  больше пяти.
             //   Массив "asc[]" - это рез-т работы подпрогр. "itoa3( )"
             
                  { unsigned char i = 0;   
                      unsigned char index, k;
                      while ((i < 5)&&(asc[i]=='0')) { i ++; }// КОЛИЧЕСТВО незн. нулей - в "i"
                    
                    // -- Число положительное---
                    if  (j == 0) {  
                                         for (k=0; k<(6 - i);k++)    {  mass_rez[k] = asc[k+i]; index = k; }
                                         goto tchk; 
                                          }
                      // -- Число положительное---
                      
                      // -- Число отрицательное, вводим  в массив знак минуса ---
                      for (k=0; k<(7 - i);k++)    {  mass_rez[k+1] = asc[k+i]; index = k+1; }
                                mass_rez[0] = '-';                                        
                      // -- Число отрицательное, вводим  в массив знак минуса ---
                      
     //  --- Устанавливаем в требуемое место точку и за ней - цифру десятых -------    
tchk:            i = 0;
                   while (mass_rez[i] !='@') { i ++; }// ищем в массиве "плавающее"
                                                                             // значение окончания полезной записи
                    mass_rez[i] = '.'; //  вставляем сивол "точка"
                     mass_rez[i +1] = DR_ch_fl; //  вставляем цифру десятых долей
     //  --- Устанавливаем в требуемое место точку и за ней - цифру десятых -------    
                  }
                  
   //------------- Формирование результрующего массива ------------ 
   
// ----- Определяем количество байт результата в массиве mass_rez[] -------           
                     kwo_bajt = 0;
       while (mass_rez[kwo_bajt] !='@') { kwo_bajt ++; }// ищем в массиве "плавающее"
                                                                             // значение окончания полезной записи
                  kwo_bajt --; // превращаем количество байт в индекс

Vyhod:   ;    //  Теперь массив "mass_rez[]" можно посылать в LCD 
                     // или куда там еще надо. Зная и длину записи в этом масиве.
      } 
 //---------------------------------------------------------------------------------------------------------------
 //---------------------------------------------------------------------------------------------------------------
//Подпрограмма "itoa3" преобразования unsigned long int- числа
//в набор десятичных цифр. Результат в кодах ASCII размещается в 
// глобальном массиве "asc[i]".
//  НЕЗНАЧАЩИЕ ЛЕВЫЕ НУЛИ - ТОЖЕ ПРИСУТСТВУЮТ!!!
//---------------------------------------------------------------------------------------------------------------- 
  void itoa3(unsigned long int binval)
      {
         unsigned long int step[]={100000,10000,1000,100,10,1}; // от кол-ва этих множителей зависит размерность
                                                                       // преобразуемого числа (int,  long int)
           unsigned long int temp,val;
           unsigned char i,atemp;
                 val=binval;
                    for (i=0; i<6; i++)    {    temp=step[i];
                                                             atemp='0';
                                                           while(val >= temp)
                                                                                   {
                                                                                        atemp++;
                                                                                        val-=temp;
                                                                                     }
                                                 asc[i]=atemp;
                                                           }
           }
  //---------------------------------------------------------------------------------------------------------------
Zloj_ya вне форума   Ответить с цитированием
Старый 30.04.2016, 11:20   #2
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,467
Вес репутации: 4590/146
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

Цитата:
Сообщение от Zloj_ya Посмотреть сообщение
"Весит" она все равно меньше, чем всевозможные sprintf - ы.
очень неплохо привести конкретные цифры, типа для sprintf - такой-то компилятор, такой-то размер программы, столько-то рамы и столько-то тактов.
И предлагаемая замена - аналогичные цифры.
Если влом (и это даже лучше) - хотя бы сравнить оба варианта по этим же показателям. тогда станет понятно, что стоит выбирать в каждом конкретном случае.
Greg вне форума   Ответить с цитированием
Старый 30.04.2016, 11:56   #3
Zloj_ya
Senior Member
 
Регистрация: 29.03.2007
Сообщений: 146
Вес репутации: 100/38
Zloj_ya will become famous soon enoughZloj_ya will become famous soon enough
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

Цитата:
Сообщение от Greg Посмотреть сообщение
очень неплохо привести конкретные цифры, типа для sprintf - такой-то компилятор, такой-то размер программы, столько-то рамы и столько-то тактов.
И предлагаемая замена - аналогичные цифры.
Если влом (и это даже лучше) - хотя бы сравнить оба варианта по этим же показателям. тогда станет понятно, что стоит выбирать в каждом конкретном случае.
Ув. Greg!

Честно? - Не ставил перед собой такой задачи. То, что могу выложить - так это следующее: компилер PICC-18 PRO V9.61, судя по его сообщениям -
Program space used AAAh ( 2730) of 8000h bytes ( 8.3%)
Data space used 54h ( 84) of 600h bytes ( 5.5%)
EEPROM space used 0h ( 0) of 100h bytes ( 0.0%)
ID Location space used 0h ( 0) of 8h nibbles ( 0.0%)
Configuration bits used 0h ( 0) of 7h words ( 0.0%)
Сколько тактов - не знаю ( ) - просто не умею подсчитать.

Я делал прогу, чтобы получить не самый худший и понятный всем результат (в т.ч. и себе самому), а не для того, чтобы сравнивать с другими (не сомневаюсь - возможно более достойными) разработками.
Получилось - поделился. Вот, собственно и всё.

А уже дело пользователей - оценить и принимать ее для своих проектов или не принимать.
Zloj_ya вне форума   Ответить с цитированием
Старый 30.04.2016, 12:22   #4
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,467
Вес репутации: 4590/146
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

Цитата:
Сообщение от Zloj_ya Посмотреть сообщение
Сколько тактов - не знаю ( ) - просто не умею подсчитать.
это не сложно - надо прогнать тестовый пример в симуляторе с включенным инструментом stopwatch.
вообще "такты" (или скорость выполнения) - обычно самый интересный параметр.
Greg вне форума   Ответить с цитированием
Старый 30.04.2016, 14:45   #5
Zloj_ya
Senior Member
 
Регистрация: 29.03.2007
Сообщений: 146
Вес репутации: 100/38
Zloj_ya will become famous soon enoughZloj_ya will become famous soon enough
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

Цитата:
Сообщение от Greg Посмотреть сообщение
это не сложно - надо прогнать тестовый пример в симуляторе с включенным инструментом stopwatch.
вообще "такты" (или скорость выполнения) - обычно самый интересный параметр.
Вот я тупой! Я ж это знал! Щас прогоню. Тактовую в симуляторе выставлю 20 МГц.
О, получилось следующее: Instruction Cycles - 3421, Time - 684,2 mkSecs.
Zloj_ya вне форума   Ответить с цитированием
Старый 04.05.2016, 21:49   #6
al.kl
Senior Member
 
Регистрация: 11.10.2011
Возраст: 21
Сообщений: 232
Вес репутации: 658/28
al.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to behold
Отправить сообщение для al.kl с помощью ICQ
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

Сдаётся мне, ftoa будет жрать поменьше ресурсов.
al.kl вне форума   Ответить с цитированием
Старый 05.05.2016, 08:50   #7
Zloj_ya
Senior Member
 
Регистрация: 29.03.2007
Сообщений: 146
Вес репутации: 100/38
Zloj_ya will become famous soon enoughZloj_ya will become famous soon enough
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

Цитата:
Сообщение от al.kl Посмотреть сообщение
Сдаётся мне, ftoa будет жрать поменьше ресурсов.
Не смею возражать. Я дал программу по принципу "как есть". Хотите - используйте, хотите - нет.
Zloj_ya вне форума   Ответить с цитированием
Старый 05.05.2016, 13:10   #8
Zloj_ya
Senior Member
 
Регистрация: 29.03.2007
Сообщений: 146
Вес репутации: 100/38
Zloj_ya will become famous soon enoughZloj_ya will become famous soon enough
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

А вот теперь - прошу помощи знатоков STM32 и Coocox-а.
Вышеприведенная программа мной тщательно отлажена для PIC-а и picc-18. Сейчас пытаюсь осваивать STM32 . Включил в проект этот же код (естественно, не забывши указать #include<math.h> и #include<float.h>).

Не опознает стандартную функцию "floor" , типа он не знает такую.
Я бы сам со временем разобрался, но нигде не могу найти описание синтаксиса, используемого в Coocox-е и списка функций и в каких инклудах они находятся.
Ну и хотелось бы где-то узнать о преобразованиях типов переменных, применительно к Coocox-у.
Прошу софорумян помочь. Просьба не предлагать перейти на Keil и прочее.
Спасибо.
Zloj_ya вне форума   Ответить с цитированием
Старый 05.05.2016, 17:48   #9
al.kl
Senior Member
 
Регистрация: 11.10.2011
Возраст: 21
Сообщений: 232
Вес репутации: 658/28
al.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to behold
Отправить сообщение для al.kl с помощью ICQ
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

floor() наодится в math.h
al.kl вне форума   Ответить с цитированием
Старый 05.05.2016, 18:04   #10
al.kl
Senior Member
 
Регистрация: 11.10.2011
Возраст: 21
Сообщений: 232
Вес репутации: 658/28
al.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to behold
Отправить сообщение для al.kl с помощью ICQ
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

Цитата:
Сообщение от Zloj_ya Посмотреть сообщение
Вышеприведенная программа мной тщательно отлажена для PIC-а и picc-18.
Не уверен

test = -123.5

Компилятор XC8 (тот же HI-TECH, на сколько мне известно) : результат = "-123"
Компилятор MCC18 : конец строки заполняется какими-то символами.

См. скриншоты.
Миниатюры
CX8.png   MCC18.png  

Последний раз редактировалось al.kl; 05.05.2016 в 18:15.
al.kl вне форума   Ответить с цитированием
Старый 06.05.2016, 07:26   #11
Zloj_ya
Senior Member
 
Регистрация: 29.03.2007
Сообщений: 146
Вес репутации: 100/38
Zloj_ya will become famous soon enoughZloj_ya will become famous soon enough
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

Цитата:
Сообщение от al.kl Посмотреть сообщение
Не уверен

test = -123.5

Компилятор XC8 (тот же HI-TECH, на сколько мне известно) : результат = "-123"
Компилятор MCC18 : конец строки заполняется какими-то символами.

См. скриншоты.
А где я писал, что проверял на чем-то, кроме Хайтека picc-18 ?

А с "разночтениями" в разных компилерах ( типа ХC, MCC и проч.) на одной и той же проге, я так думаю, сталкивались практически все.

И на предмет того, что Хайтек и ХС - "практически" одно и то же, я бы так не утверждал. Похожего много, а результат разный (к сожалению).

Так как насчет помочь с STM32 ?
Zloj_ya вне форума   Ответить с цитированием
Старый 06.05.2016, 08:06   #12
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

Цитата:
Сообщение от Zloj_ya Посмотреть сообщение
Так как насчет помочь с STM32 ?
А вы здесь много кому помогли с 2007-го года? За это время вы создали 27 тем и не для того, чтобы помогать другим, с учетом того, что у вас всего 132 сообщения, то вы по 4 сообщения на тему тратили. А в этой теме хрень какую-то для древнего компилятора выложили, а взамен реальной помощи хотите для актуального...советуйте мне только для CooCox-a...прочее не советуйте.

PS: Если бы вы регулярно читали форум, то CooCox мало кто здесь использует. Пришли в книжный и свежей колбасы докторской, да еще производителя определенного...и запись в книгу жалоб "почему мне не дают колбасы, грубят...". Для CooCox-а нужно спрашивать в другом месте.
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 06.05.2016 в 08:17.
Pridnya вне форума   Ответить с цитированием
Старый 06.05.2016, 09:00   #13
Zloj_ya
Senior Member
 
Регистрация: 29.03.2007
Сообщений: 146
Вес репутации: 100/38
Zloj_ya will become famous soon enoughZloj_ya will become famous soon enough
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

Цитата:
Сообщение от Pridnya Посмотреть сообщение
А вы здесь много кому помогли с 2007-го года? За это время вы создали 27 тем и не для того, чтобы помогать другим, с учетом того, что у вас всего 132 сообщения, то вы по 4 сообщения на тему тратили. А в этой теме хрень какую-то для древнего компилятора выложили, а взамен реальной помощи хотите для актуального...советуйте мне только для CooCox-a...прочее не советуйте.

PS: Если бы вы регулярно читали форум, то CooCox мало кто здесь использует. Пришли в книжный и свежей колбасы докторской, да еще производителя определенного...и запись в книгу жалоб "почему мне не дают колбасы, грубят...". Для CooCox-а нужно спрашивать в другом месте.
Безмерно благодарен Вам, "следящий за постами" Вы наш, за конструктивную критику. Чтобы я делал без Вашей "руководящей и направляющей" длани - видимо блудил бы во тьме бытия.

Как Вы изволили выразиться:"хрень" - выкладывалась не с целью торга в обмен на помощь, и даже не за санкционную колбасу в книжном магазине, а для того, чтобы кому-нибудь пригодилась в работе.
А вопросы по STM32 появились позже, при попытке адаптировать "хрень" к АРМ- проекту.

Так что дергать карту из рукава и кидаться на людей не надо.
Как минимум - неприлично. Хотя... о чем это я...

Надо же - и не лень было перелистать мои посты и темы, "дать оценку" и соорудить очень полезные выводы.
Ах да, понимаю - работа такая.
Zloj_ya вне форума   Ответить с цитированием
Старый 06.05.2016, 09:12   #14
al.kl
Senior Member
 
Регистрация: 11.10.2011
Возраст: 21
Сообщений: 232
Вес репутации: 658/28
al.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to behold
Отправить сообщение для al.kl с помощью ICQ
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

Цитата:
при попытке адаптировать "хрень" к АРМ- проекту.
Вы бы, для начала, НОРМАЛЬНО адаптировали для PIC'ов (включая все известные для них компиляторы), а потом уже на другие платформы переходили.
Это как бабу недо.бать - "А кто сказал, что тебе будет хорошо ? Меня всё устроило...". "Пойду ка я пожирнее бабу найду..."
al.kl вне форума   Ответить с цитированием
Старый 06.05.2016, 09:19   #15
al.kl
Senior Member
 
Регистрация: 11.10.2011
Возраст: 21
Сообщений: 232
Вес репутации: 658/28
al.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to behold
Отправить сообщение для al.kl с помощью ICQ
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

Цитата:
Сообщение от Zloj_ya Посмотреть сообщение
Так как насчет помочь с STM32 ?
Цитата:
Сообщение от al.kl Посмотреть сообщение
floor() наодится в math.h
Мало ?
al.kl вне форума   Ответить с цитированием
Старый 06.05.2016, 09:20   #16
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

Цитата:
Сообщение от Zloj_ya Посмотреть сообщение
Безмерно благодарен Вам
...
А вопросы по STM32 появились позже, при попытке адаптировать "хрень" к АРМ- проекту.
Люди иногда на мусорку выкладывают вещи, откровенную хрень, которые там висят (или стоят...сапоги какие-нибудь...сумку потертую или еще что...), пока мусоровоз не приедет и их окончательно не выбросят. А они думают, что это кому-нить может пригодиться, наивные. Синдром Плюшкина в программировании. А в вашем случае это действительно хрень, т.к. в библиотеках для того же STM32 есть все, в т.ч. и для вывода float на ЖК-дисплей, с разным количеством точек после запятой.
Код:
sprintf(sStr, "%.2f",fValue);
а после незначительной доработки можно добавить и количество знаков до запятой, чтобы красиво было, не так
Цитата:
Ia=1.04А
Ib=125.75А
Ic=12.35A
а так
Цитата:
Ia=001.04А
Ib=125.75А
Ic=012.35A
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 06.05.2016, 09:21   #17
HHIMERA
Senior Member
 
Регистрация: 10.06.2008
Возраст: 55
Сообщений: 2,482
Вес репутации: 3440/90
HHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond repute
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

Цитата:
Сообщение от Zloj_ya Посмотреть сообщение
Так как насчет помочь с STM32 ?
С кокосом... действительно беда... в основном народ юзает ИАР и Кейл...
Да и чем помочь??? Знаете какой функции нет... знаете что она должна делать... так напишите эту функцию...
А лучше... переписать всё заново... на основе имеющегося опыта... ИМХО...
__________________
"Я не даю готовых решений, я заставляю думать!"(С)
HHIMERA вне форума   Ответить с цитированием
Старый 06.05.2016, 09:25   #18
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

Цитата:
Сообщение от HHIMERA Посмотреть сообщение
С кокосом... действительно беда... в основном народ юзает ИАР и Кейл...
Да и чем помочь??? Знаете какой функции нет... знаете что она должна делать... так напишите эту функцию...
А лучше... переписать всё заново... на основе имеющегося опыта... ИМХО...
Переписать стандартные библиотеки для Cortex. Еще можно позвонить производителя и попросить ядро переделать под свой суперговнокод. Еще его можно на первом курсе техникума преподавать, пока народ не понял. Можно стихотворением расказывать. если слушать не захотят, можно размножить на принтере и на деревья клеить вдоль тротуаров с подписью "автор=" А если честно, то лучше землю покопать, чтобы мозги отдохнули.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 06.05.2016, 09:32   #19
Zloj_ya
Senior Member
 
Регистрация: 29.03.2007
Сообщений: 146
Вес репутации: 100/38
Zloj_ya will become famous soon enoughZloj_ya will become famous soon enough
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

Цитата:
Сообщение от al.kl Посмотреть сообщение
Мало ?
Спасибо. Не мало. Но я эту библиотеку подключил (о чем и писал в посте выше). И если бы все было ОК - я бы не задавал здесь этот вопрос.
Zloj_ya вне форума   Ответить с цитированием
Старый 06.05.2016, 09:37   #20
al.kl
Senior Member
 
Регистрация: 11.10.2011
Возраст: 21
Сообщений: 232
Вес репутации: 658/28
al.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to behold
Отправить сообщение для al.kl с помощью ICQ
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

А Вы посмотрите, имеется ли вообще прототип этой функции там.
Если его там нет, то чем Вам можно помочь ? Написать Вам эту функцию ?
al.kl вне форума   Ответить с цитированием
Старый 06.05.2016, 09:41   #21
Zloj_ya
Senior Member
 
Регистрация: 29.03.2007
Сообщений: 146
Вес репутации: 100/38
Zloj_ya will become famous soon enoughZloj_ya will become famous soon enough
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Люди иногда на мусорку выкладывают вещи, откровенную хрень, которые там висят (или стоят...сапоги какие-нибудь...сумку потертую или еще что...), пока мусоровоз не приедет и их окончательно не выбросят. А они думают, что это кому-нить может пригодиться, наивные. Синдром Плюшкина в программировании. А в вашем случае это действительно хрень, т.к. в библиотеках для того же STM32 есть все, в т.ч. и для вывода float на ЖК-дисплей, с разным количеством точек после запятой.
Код:
sprintf(sStr, "%.2f",fValue);
а после незначительной доработки можно добавить и количество знаков до запятой, чтобы красиво было, не так
а так
Ув. Pridnya !

Я Вам благодарен за ответ. Все дело в том, что в проекте на Coocox-е я изначально и пытался использовать sprintf, но по каким-то причинам эта функция выводила значения некорректно, несмотря ну кучу перепробованных мной вариантов указания параметров.

Поэтому я написал "хрень", отладил для ПИКа и попытался ее же адаптировать к STM-ке.

А шарясь по инету - я увидел, что проблема подобного типа есть не только у меня, вот и выложил "сапоги", авось кому-то помогут.

С учетом того, что АРМ-ы я еще только изучаю - пришлось пока засесть за кокос, чтобы наработать практику.

Отсюда - масса вопросов. Но, чтобы не мусорить ими в форуме - я задал только несколько, которые, по идее, могли бы мне самому в остальном разобраться.
Zloj_ya вне форума   Ответить с цитированием
Старый 06.05.2016, 09:47   #22
Zloj_ya
Senior Member
 
Регистрация: 29.03.2007
Сообщений: 146
Вес репутации: 100/38
Zloj_ya will become famous soon enoughZloj_ya will become famous soon enough
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

Цитата:
Сообщение от al.kl Посмотреть сообщение
А Вы посмотрите, имеется ли вообще прототип этой функции там.
Если его там нет, то чем Вам можно помочь ? Написать Вам эту функцию ?
Нет, спасибо, писать за меня не надо. Просто, может быть кто-то с подобным сталкивался, и мог бы меня ткнуть носом в направлении - куда копать. Вот и все, чего я просил в общем-то.
Zloj_ya вне форума   Ответить с цитированием
Старый 06.05.2016, 09:51   #23
al.kl
Senior Member
 
Регистрация: 11.10.2011
Возраст: 21
Сообщений: 232
Вес репутации: 658/28
al.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to beholdal.kl is a splendid one to behold
Отправить сообщение для al.kl с помощью ICQ
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

Вообще, floor - это обычное округление. Неужели Вы сами его не можете написать ?
al.kl вне форума   Ответить с цитированием
Старый 06.05.2016, 09:52   #24
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Orel
Возраст: 37
Сообщений: 4,007
Вес репутации: 3958/109
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

Цитата:
Сообщение от Zloj_ya Посмотреть сообщение
Ув. Pridnya !

Я Вам благодарен за ответ. Все дело в том, что в проекте на Coocox-е я изначально и пытался использовать sprintf, но по каким-то причинам эта функция выводила значения некорректно, несмотря ну кучу перепробованных мной вариантов указания параметров.

Поэтому я написал "хрень", отладил для ПИКа и попытался ее же адаптировать к STM-ке.
Она работает, вот в NetBeans (компилятор MinGW, он тоже GNU, как и CooCox)
Код:
char sStr[]="******************";
float fValue = 3.14159F;

sprintf(sStr, "fValue = %.2f",fValue);
printf("%s", sStr);

fValue = 3.14 (это результат)
Если не работает код для ARM, то нужно спрашивать по ARM, а не выкладывать плохой пример для PIC18 с просьбой адаптировать его для ARM.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 06.05.2016, 09:56   #25
Zloj_ya
Senior Member
 
Регистрация: 29.03.2007
Сообщений: 146
Вес репутации: 100/38
Zloj_ya will become famous soon enoughZloj_ya will become famous soon enough
По умолчанию Re: Делюсь программой преобразования float в массив для вывода, например, на LCD

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Она работает, вот в NetBeans (компилятор MinGW)
Код:
char sStr[]="******************";
float fValue = 3.14159F;

sprintf(sStr, "fValue = %.2f",fValue);
printf("%s", sStr);

fValue = 3.14 (это результат)
Если не работает код для ARM, то нужно спрашивать по ARM, а не выкладывать плохой пример для PIC18 с просьбой адаптировать его для ARM.
Спасибо. Я попробую Ваш код. Немного попозже. К сожалению, сейчас возможности нет. О результатах отпишусь.
Zloj_ya вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Присоветуйте тип и способ управления MOSFETом "верхнего" плеча dr_Sash Источники питания и силовая электроника 37 08.09.2012 18:50
подключение магнитолы Sergey1 Общетехнические вопросы 10 27.12.2007 22:39
Помогите, пожалуйста, найти ошибку в коде Катя Микроконтроллеры других производителей 26 08.12.2007 14:58
проблемка с PIC16F628A bereg_ok Продукция MICROCHIP 72 07.09.2007 11:00
LCD BC2004C посоветуйте что нибудь для начала на ассемблере Leonid_O Общетехнические вопросы 3 29.05.2007 10:15


Часовой пояс GMT +3, время: 01:11.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot