реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> itoa
Евгений Германов...
сообщение Nov 11 2008, 13:15
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654



в хайтеке пик18 попробовал вызвать itoa в полном соответствии с примером в качестве ответа получил
Error [499] C:\Program Files\HI-TECH Software\PICC-18\STD\9.51\lib\pic86l-c.lib(ramfail.obj); 0. undefined symbol:
_itoa(test38.obj)
Я не поленился и попробовал поискать упоминание о функции в папке пика18 ничего нет.
У меня вопрос что эта функция отсутствует в моей библиотеке или я в чем то заблуждаюсь
версия HT picc18 std9.51
упоминание о itoa я нашел только в пике std9.60 который без 18

#include <htc.h>
#include <pic18.h>
#include <float.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <ctype.h>




main()
{
char zz[10];


itoa(zz,1234,16);

}
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 11 2008, 16:07
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Ну тогда может sprintf() в библиотеке есть?:

Код
sprintf(zz, "%x", 1234);
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Nov 11 2008, 16:30
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654



Цитата(sergeeff @ Nov 11 2008, 19:07) *
Ну тогда может sprintf() в библиотеке есть?:

Код
sprintf(zz, "%x", 1234);

Нету sad.gif .Я бы желал знать чего ещё там нет и на (в смысле зачем )писать в описи что есть
Go to the top of the page
 
+Quote Post
xemul
сообщение Nov 11 2008, 16:45
Сообщение #4



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Включите в проект <path_to_picc18>/sources/itoa.c
Реализация Xtoa() в сорцах - тупо в лоб и очень неэффективно применительно к контроллерам без аппаратного деления (поэтому функции и не оформлены библиотечно).
Т.к. на практике редко требуется Xtoa в радиксе, отличном от 10 и 16, то имеет смысл нарисовать свои функции. С Xtoa(,,16) все просто и понятно. По Xtoa(,,10) поищите по конфе.

sprintf.c там же по той же причине.

Сейчас поползал по библиотекам - в libc как универсальное средство живет ftoa(). Прикольно.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 11 2008, 18:51
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Код
#define NUMBER_OF_DIGITS 32

void _ultoa(unsigned long value, char* string, unsigned char radix)
{
unsigned char index;
char buffer[NUMBER_OF_DIGITS];  /* space for NUMBER_OF_DIGITS + '\0' */

  index = NUMBER_OF_DIGITS;

  do {
    buffer[--index] = '0' + (value % radix);
    if ( buffer[index] > '9') buffer[index] += 'A' - '9' - 1;
    value /= radix;
  } while (value != 0);

  do {
    *string++ = buffer[index++];
  } while ( index < NUMBER_OF_DIGITS );

  *string = 0;  /* string terminator */
}

void _ltoa(long value, char* string, unsigned char radix)
{
  if (value < 0 && radix == 10) {
    *string++ = '-';
    _ultoa(-value, string, radix);
  }
  else {
    _ultoa(value, string, radix);
  }
}
Go to the top of the page
 
+Quote Post
xemul
сообщение Nov 11 2008, 21:43
Сообщение #6



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(sergeeff @ Nov 11 2008, 21:51) *
Код
...

Это из серии "найдите хх различий"?smile.gif
Код
// ./sources/utoa.c из picc18
#include    <stdlib.h>
    
char *
ltoa(char * buf, long val, int base)
{
    char *    cp = buf;

    if(val < 0) {
        *buf++ = '-';
        val = -val;
    }
    ultoa(buf, val, base);
    return cp;
}
char *
ultoa(char * buf, unsigned long val, int base)
{
    unsigned    long    v;
    char        c;

    v = val;
    do {
        v /= base;
        buf++;
    } while(v != 0);
    *buf-- = 0;
    do {
        c = val % base;
        val /= base;
        if(c >= 10)
            c += 'A'-'0'-10;
        c += '0';
        *buf-- = c;
    } while(val != 0);
    return buf;
}

Вы не обращали внимания на код, получающийся из
Код
   c = val % base;
   val /= base;
?
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 12 2008, 06:53
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Каков вопрос - таков ответ. Человек говорит, что в его библиотеке нет функции itoa() - вот текст, добавь и пользуйся. Если ему необходимa другая функция для кокретного "оптимального на данной архитектуре" решения, так и надо с самого начала задачу формулировать. А так, в общем случае, мы понятия не имеем, когда и для каких целей он эту функцию собирается использовать. Один раз при инициализации устройства или каждые 10 ms.
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Nov 12 2008, 13:47
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654



Функции действительно не было я её нашел в не18 хайтеке smile.gif .перетащил и все заработало.
Побочным продуктом стало отыскание sprintf в описи нет а в жизни нашлась.Показалось,что sprintf быстрее.спасибо за ответы.Однако желательно бы узнать почему при отладке симулятором периодически отсылают к содержимому папки sources если не наврал?Ежли просто транслировать то полная тишина.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 12 2008, 16:03
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Функция sprintf(), как более универсальная, соответственно и более "громоздкая". Поэтому насчет ее скорости работы, скорее всего, "показалось".

А в HITEC библиотекаре, что нет ключа для вывода имен модулей и функций, расположенных в библиотеке?
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Nov 13 2008, 12:30
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654



Цитата(sergeeff @ Nov 12 2008, 19:03) *
А в HITEC библиотекаре, что нет ключа для вывода имен модулей и функций, расположенных в библиотеке?

Откеле мне знать,я не нашел.
Go to the top of the page
 
+Quote Post
xemul
сообщение Nov 13 2008, 12:56
Сообщение #11



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(Евгений Германович @ Nov 13 2008, 15:30) *
Откеле мне знать,я не нашел.

manual.pdf, раздел Linker and utilities -> Librarian
Н-р, потроха pic40a-c.lib из писс стд 9.60:
Код
C:\picc\std\9.60\lib>..\bin\libr s pic40a-c.lib *
sqrt.obj                        U ?_ldexp
                                U ?a_sqrt
                                U ?_frexp
                                U awdiv
                                D _sqrt
                                U ftadd
                                U ftcmp
                                U ftdiv
                                D __end_of_sqrt
                                U ?_sqrt
                                U _ldexp
                                U _frexp
                                U _errno
                                U used_btemp0
                                U used_btemp1
                                U used_btemp2
                                U used_btemp3
                                U used_btemp4
                                U used_btemp5
strtok.obj                      U ?_strtok
                                U ?_strspn
                                U ?a_strtok
                                U ?_strcspn
                                D _strtok
                                U _strspn
                                U _strcspn
                                D __end_of_strtok
                                U used_btemp0
picrt65x.obj                    U __Bdata
                                U __Hdata
                                U __Ldata
                                U _main
                                D _exit
                                D start
                                U powerup
                                U __Hbss
                                U __Lbss
picrt66x.obj                    U _main
                                D _exit
                                D start
                                U powerup
                                D intlevel0
                                D intlevel1
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Nov 13 2008, 15:52
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654



А поподробнее pic40a-c.lib из писс стд 9.60: это что и почему 40 там и 42 есть?
Чтож так сложно то?
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Nov 13 2008, 16:02
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Это называется "А на фига я буду тратить время на поиск и чтение документации, мне и так все объяснят".
Go to the top of the page
 
+Quote Post
Евгений Германов...
сообщение Nov 15 2008, 14:04
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 079
Регистрация: 24-06-07
Из: г.Екатеринбург
Пользователь №: 28 654



Цитата(xemul @ Nov 13 2008, 15:56) *
manual.pdf, раздел Linker and utilities -> Librarian
Н-р, потроха pic40a-c.lib из писс стд 9.60:
Код
C:\picc\std\9.60\lib>..\bin\libr s pic40a-c.lib *
sqrt.obj                        U ?_ldexp
                                U ?a_sqrt
                            U powerup
                                D intlevel0
                                D intlevel1


А в моем файле с такими же буковками я вижу только квадраты.
Чего я не включил?
Если проще то я не могу открыть библиотечные файлы,дабы ознакомится с их содержимым.
Go to the top of the page
 
+Quote Post
xemul
сообщение Nov 15 2008, 15:45
Сообщение #15



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(Евгений Германович @ Nov 15 2008, 17:04) *
А в моем файле с такими же буковками я вижу только квадраты.

Вероятно Вы по ошибке получили полное собрание Малевича.
Цитата
Чего я не включил?

Свет, горячую и холодную воду, другие блага цивилизации.
Цитата
Если проще то я не могу открыть библиотечные файлы,дабы ознакомится с их содержимым.

Евгений Германович, на
Код
c:\picc\std\9.60\lib>..\bin\libr s pic40a-c.lib *

Вы тоже не обратили никакого внимания.
Это командная строка, с помощью которой посредством утилиты libr, находящейся (в моем случае) в каталоге c:\picc\std\9.60\bin, было получено содержимое библиотеки pic40a-c.lib, находящейся (в моем случае) в каталоге C:\picc\std\9.60\lib.
О значении буквы s между частями заклинания ..\bin\libr и pic40a-c.lib можно узнать (в моем случае) в файле c:\picc\std\9.60\docs\manual.pdf, раздел Linker and utilities, подраздел Librarian. В этом же файле раскрыта и тайна букв 40a-c после букв pic.
Заклинание было вызвано в консольном окне (Пуск -> Выполнить -> cmd -> OK) из каталога c:\picc\std\9.60\lib

ЗЫЖ у нас в конторе бухгалтер всего за три месяца (с легкими рецидивами впоследствии) запомнила, что не стОит все подряд открывать в Нотепаде и Ворде.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 4th July 2025 - 02:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01568 секунд с 7
ELECTRONIX ©2004-2016