mr.smart 0 31 января, 2011 Опубликовано 31 января, 2011 · Жалоба Си. Есть integer, нужно перевести в char[5]. Вроде детская задачка... В "нормальных" компиляторах решал ее с помощью функции itoa которая из библиотеки stdlib.h, но почему-то WinARM напрочь отказывается эту функцию воспринимать. Попробовал sprintf, выводит кучу ошибок не понятно чего: c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib/thumb/interwork\libc.a(freer.o): In function `_malloc_trim_r': mallocr.c:(.text+0x2c): undefined reference to `_sbrk_r' mallocr.c:(.text+0x3c): undefined reference to `_sbrk_r' mallocr.c:(.text+0x48): undefined reference to `_sbrk_r' c:/winarm/bin/../lib/gcc/arm-elf/4.1.1/../../../../arm-elf/lib/thumb/interwork\libc.a(makebuf.o): Infunction `__smakebuf': makebuf.c:(.text+0x1c): undefined reference to `_fstat_r' makebuf.c:(.text+0xb2): undefined reference to `isatty' Как решить данную задачу? P.S. К Программистам себя не отношу, поэтому палками прошу не бить. Самому стыдно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kurtis 0 1 февраля, 2011 Опубликовано 1 февраля, 2011 · Жалоба Покажите код Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 1 февраля, 2011 Опубликовано 1 февраля, 2011 · Жалоба Как решить данную задачу? Один из вечных вопросов. Может, данная дискуссия поможет http://electronix.ru/forum/index.php?showtopic=77779 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 1 февраля, 2011 Опубликовано 1 февраля, 2011 · Жалоба Дело не в коде... Похоже, что не прилинкована какя-то библиотека. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 1 февраля, 2011 Опубликовано 1 февраля, 2011 · Жалоба Судя по ругани ваш sprintf попытался использовать динамическую память. Что не очень хорошо на embedded в любом случае :( У вас newlib стоит? Или он пытается использовать libc от Linux? ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 1 февраля, 2011 Опубликовано 1 февраля, 2011 · Жалоба А взять исходник функции itoa() и прямо подцепить к проекту религия не позволяет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mr.smart 0 4 февраля, 2011 Опубликовано 4 февраля, 2011 · Жалоба Похоже, что не прилинкована какя-то библиотека. Тут я просто несколько не шарю. Есть файлик stdlib.h. Скачал, положил куда надо и указываю в начале программы через #include. Но вот где должен находится файлик stdlib.с и где его вообще найти я, честно скажу, нивкурил. В интернетах ничего не нашел по этому поводу, предположил что это всё где-то во внутренностях компилятора... Если объясните как тут всё это работает с этими библиотеками, буду признателен. А взять исходник функции itoa() и прямо подцепить к проекту религия не позволяет? Когда посмотрел как делает народ, все-таки решил написать такую функцию самостоятельно. Поначалу думал что проще будет со стандартной библиотекой. Один из вечных вопросов. Может, данная дискуссия поможет Да, помогла) Понял, что мой вопрос был не таким уж и тупым, и многие с этим вопросом сношаются. Код господина aaarrr заинтересовал, но я там ниче не понял) Буду еще разбираться конкретно с ним. Сама функция перевода в string мне понадобилась кратковременно, чтобы в гипертерминал выводить содержимое флеш-памяти (как раз учусь щас с ней работать), а функция вывода требует исключительно тип char[]. Поэтому к максимальной производительности не стремился, написал функцию на скорую руку. Работает. Беременным детям и женщинам не смотреть! val = 0xFE; //это надо перевести в buf, который представляет из себя char[2]... length = 2; // 1 байт в слове do { c = val % 0x10 + '0'; val /= 0x10; buf[len] = c; //6 последующих строк меня ПРАВДА вынудил писать компилятор!) Ибо программа никак не хотела нормально работать при: //if (buf[len] < 0x3A) { // buf[len] = c; //} else { // buf[len] = c+0x7; //} // К тому же переменная [b]с[/b] в данном месте почему-то всегда определялась как 0х0. Хотя при выводе buf после цикла все было норм... if (buf[len] == ':') buf[len] = 'A'; if (buf[len] == ';') buf[len] = 'B'; if (buf[len] == '<') buf[len] = 'C'; if (buf[len] == '=') buf[len] = 'D'; if (buf[len] == '>') buf[len] = 'E'; if (buf[len] == '?') buf[len] = 'F'; len++; } while (len < length); Короче говоря пока учусь работать с flash, мне этого достаточно. Когда придет время писать программу уже непосредственно для вывода чего-то, то буду разбираться уже серьезно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 6 февраля, 2011 Опубликовано 6 февраля, 2011 · Жалоба Есть файлик stdlib.h. Скачал, положил куда надо и указываю в начале программы через #include. Но вот где должен находится файлик stdlib.с Нигде:-) обычно идёт в составе скомпилированной библиотеки в libc. (для avr это avr-libc например). Тут ещё такое дело, некоторые функции могут отсутствовать т.к. они не являются стандартными. Чтобы понять какие, надо ознакомиться со стандартом... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 6 февраля, 2011 Опубликовано 6 февраля, 2011 · Жалоба Может быть, Вам поможет этот файлик... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 6 февраля, 2011 Опубликовано 6 февраля, 2011 · Жалоба Когда посмотрел как делает народ, все-таки решил написать такую функцию самостоятельно. Поначалу думал что проще будет со стандартной библиотекой. Увадаемый мистер smart! Не обижайтесь, но если вы больше недели и дальше будете тратить на стандартные вещи типа itoa(), то далеко не уедете. Даже если вы только учитесь. Вы должны: 1. Четко понять, что такое исходные файлы .c/.cpp, что лежит в .h и зачем они вообще нужны. 2. Разобраться с чем работает компилятор и линкер(где что лежит и как этим управлять). 3. Научиться самому делать библиотеки и понять, как узнать, что лежит в стандартных библиотеках. Поверьте, это не сложно. Дня достаточно. Тогда перестанете изобретать велосипед, а займетесь написанием своих программ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 7 февраля, 2011 Опубликовано 7 февраля, 2011 · Жалоба Увадаемый мистер smart! ... Уважаемый господин sergeeff Уж вам-то следовало бы знать, что нет стандартной функции itoa(). Она может присутствовать в некоторых компиляторах в виде подарка. Конкретно, есть ли она в WinARM - большой вопрос. Мне казалось, вы были в курсе, судя по "бойкому" ответу вот здесь http://electronix.ru/forum/index.php?showt...st&p=674374 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 7 февраля, 2011 Опубликовано 7 февраля, 2011 · Жалоба Уважаемый господин sergeeff Уж вам-то следовало бы знать, что нет стандартной функции itoa(). Под словом стандартная я имел в виду, что эта функция уйму лет существует в составе многих библиотек, а уж в исходных текстах, начиная с первого издания Кернигана и Ричи 1978 года. Если посмотрите словарь синонимов, то найдете определение слова стандартный: http://enc-dic.com/synonym/Standartnyj-82793.html нормальный, типовой, шаблонный, трафаретный, стереотипный, штампованный, не блещущий новизной, банальный, неоригинальный, плоский, не блещущий оригинальностью, стандартизованный, квадратический, неиндивидуальный, эталонный, усредненный Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 7 февраля, 2011 Опубликовано 7 февраля, 2011 · Жалоба Под словом стандартная я имел в виду, что эта функция уйму лет существует в составе многих библиотек, а уж в исходных текстах, начиная с первого издания Кернигана и Ричи 1978 года. В книжках есть, в библиотеках же, увы, далеко не во всех. Потому как не является стандартной. К ней применимы все вышеперечисленные термины, кроме самого главного - стандартизованный :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sergeeff 1 7 февраля, 2011 Опубликовано 7 февраля, 2011 · Жалоба В книжках есть, в библиотеках же, увы, далеко не во всех. Потому как не является стандартной. К ней применимы все вышеперечисленные термины, кроме самого главного - стандартизованный :) Вы все таки путаете стандартную библиотеку функций и стандартную(типовую) функцию. В любом случае я советовал автору топика не тратить время на изобретение велосипеда и подцепить стандартную(типовую) itoa() к своему проекту. Точка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 7 февраля, 2011 Опубликовано 7 февраля, 2011 · Жалоба В любом случае я советовал автору топика не тратить время на изобретение велосипеда и подцепить стандартную(типовую) itoa() к своему проекту. Так дайте ему эту функцию! Я вот - дал. :) И не один вариант, а целую кучу. А он еще и свою придумал, которая для него будет "стандартной" (будем надеяться, не надолго). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться