DogPawlowa 0 22 декабря, 2009 Опубликовано 22 декабря, 2009 · Жалоба а вот интересно ... :cranky: Вам трудно ответить на конкретные вопросы? Зачем тему создавали? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
goodking 0 22 декабря, 2009 Опубликовано 22 декабря, 2009 · Жалоба извините, temperaturefin-long все типы переменных-long Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 22 декабря, 2009 Опубликовано 22 декабря, 2009 · Жалоба мне нужно преобразовать в строку то-есть в char :)Если бы вы потрудились почитать по ссылкам, то могли бы понять, что для перевода бинарного представления числа в символьное для начала нужно его (число) преобразовать в двоично-десятичное представление, где каждая тетрада (полубайт) имеет значение от 0 до 9. Дальнейшее преобразование в символы ASCII не представляет трудности, поскольку для этого достаточно к каждой тетраде прибавить код символа '0' - 0x30. В языке Си имеются и готовые функции для преобразования чисел в строку символов. Почитайте какой-нибудь "букварь" по языку Си наконец. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 27 22 декабря, 2009 Опубликовано 22 декабря, 2009 · Жалоба извините, temperaturefin-long все типы переменных-long buf должен быть не лонг, а указатель на char[] Попробуйте char buf[10] (ну или 20, 30 - сколько надо символов) В языке Си имеются и готовые функции для преобразования чисел в строку символов. Почитайте какой-нибудь "букварь" по языку Си наконец. Дык эта... sprintf вроде как раз это и делает. Только ему указатель на правильный буфер надо подсунуть sprintf(buf,"%d",temperaturefin); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
goodking 0 22 декабря, 2009 Опубликовано 22 декабря, 2009 · Жалоба buf должен быть не лонг, а указатель на char[] Попробуйте char buf[10] (ну или 20, 30 - сколько надо символов) Дык эта... sprintf вроде как раз это и делает. Только ему указатель на правильный буфер надо подсунуть нет, buf у меня как раз обьявлен char buf[10]; но все -равно на выходе какая-то ерунда выходит, 0x10 "0l" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 27 22 декабря, 2009 Опубликовано 22 декабря, 2009 · Жалоба нет, buf у меня как раз обьявлен char buf[10]; но все -равно на выходе какая-то ерунда выходит, 0x10 "0l" а "HelloWorld" выводит? если константой забить, причём прямо в буфер Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
goodking 0 22 декабря, 2009 Опубликовано 22 декабря, 2009 · Жалоба а "HelloWorld" выводит? если константой забить, причём прямо в буфер Выводит! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 22 декабря, 2009 Опубликовано 22 декабря, 2009 · Жалоба Не ленитесь пользоваться поиском! Тема двоично-десятичного преобразования (BCD - Binary-Coded Decimal) мусолится на форуме постоянно.А причём тут BCD, простите? Ему надо просто коды АЦП пересчитать в температуру, а её отобразить в виде строки на дисплее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
goodking 0 22 декабря, 2009 Опубликовано 22 декабря, 2009 (изменено) · Жалоба Все, разобрался, всем большое спасибо! Изменено 22 декабря, 2009 пользователем goodking Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 22 декабря, 2009 Опубликовано 22 декабря, 2009 · Жалоба А причём тут BCD, простите?А что по-вашему делает sprintf при указании формата %d, как не BCD + конвертация в ASCII? Ему надо просто коды АЦП пересчитать в температуру, а её отобразить в виде строки на дисплее.Ну да. Загвоздка была как раз в отображении. Все, разобрался, всем большое спасибо! Разобрались - хорошо. Только нужно огласить причину, чтобы у отвечающих не пропало желание в следующий раз вновь помогать вам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
goodking 0 22 декабря, 2009 Опубликовано 22 декабря, 2009 · Жалоба А что по-вашему делает sprintf при указании формата %d, как не BCD + конвертация в ASCII? Ну да. Загвоздка была как раз в отображении. Разобрались - хорошо. Только нужно огласить причину, чтобы у отвечающих не пропало желание в следующий раз вновь помогать вам. причина была в неверном присвоении типов используемых переменных! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 22 декабря, 2009 Опубликовано 22 декабря, 2009 · Жалоба А что по-вашему делает sprintf при указании формата %d, как не BCD + конвертация в ASCII?Это да.для начала нужно его (число) преобразовать в двоично-десятичное представление, где каждая тетрада (полубайт) имеет значение от 0 до 9.Вы просо усложняете немного. Зачем ему тут вообще знать про упакованный BCD? ИМХО это немного лишне для совсем начинающего:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 23 декабря, 2009 Опубликовано 23 декабря, 2009 · Жалоба Это да.Вы просо усложняете немного. Зачем ему тут вообще знать про упакованный BCD? ИМХО это немного лишне для совсем начинающего:)Как раз начинать нужно с основ языка, типовых алгоритмов и примитивов. В следующий раз ему понадобиться float на дисплей выводить и sprintf начнет требовать такой размер ОЗУ для стека, которого просто нет в кристалле. Что вы предложите: взять кристалл "пожирнее" или самостоятельно написать простой алгоритм вывода float на индикацию? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
goodking 0 23 декабря, 2009 Опубликовано 23 декабря, 2009 · Жалоба Как раз начинать нужно с основ языка, типовых алгоритмов и примитивов. В следующий раз ему понадобиться float на дисплей выводить и sprintf начнет требовать такой размер ОЗУ для стека, которого просто нет в кристалле. Что вы предложите: взять кристалл "пожирнее" или самостоятельно написать простой алгоритм вывода float на индикацию? А что в таком случае надо сделать?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 23 декабря, 2009 Опубликовано 23 декабря, 2009 · Жалоба А что в таком случае надо сделать??Застрелиться.Как раз начинать нужно с основ языка, типовых алгоритмов и примитивов. В следующий раз ему понадобиться float на дисплей выводить и sprintf начнет требовать такой размер ОЗУ для стека, которого просто нет в кристалле. Что вы предложите: взять кристалл "пожирнее" или самостоятельно написать простой алгоритм вывода float на индикацию?Вариантов достаточно. Ну если так пойти то начинать надо было с архитектуры MCU, понятиях стек, способы адресации, способы передачи аргументов. Изучить ассемблер хотя бы одного самого примитивного семейства. А уже потом браться за Си:) Ну а ещё раньше системы исчисления, форматы чисел, булеву алгебру и т.д. и т.п. Спорить дпльше не вижу смысла. Главное не загубить в человеке желания учиться и саморазвиваться! Остальное приложится! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться