slog 0 17 апреля, 2007 Опубликовано 17 апреля, 2007 · Жалоба Насчет sprintf() и printf() в IAR. Эти функции кроме требования большого стека еще и все инициализированные строки хранит в ОЗУ, в IAR так сделано. И при большом кол-ве строк, ОЗУ очень быстро кончается. В IAR желательно пользовать printf_P(). Строки будут храниться во флэше. ps. ну а если все глючит, то это конечно же не программист, а AVR виноват :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 17 апреля, 2007 Опубликовано 17 апреля, 2007 · Жалоба ps. ну а если все глючит, то это конечно же не программист, а AVR виноват :-) А вот и неправда! Еще компилятор! :laugh: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirYU 0 17 апреля, 2007 Опубликовано 17 апреля, 2007 · Жалоба Может ошибаюсь, но вроде для printf_P() надо не забыть putchar() прописать (для IAR). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
boez 0 17 апреля, 2007 Опубликовано 17 апреля, 2007 · Жалоба 2 rezident -я неочень большой знаток С,но мне казалось,что NULL-это некое абстрактное число,не равное ничему.А строка в С заканчивается обычным нулем. Как правило: #define NULL ((void *)0) И к ASCII коду отношения особого не имеет, а обозначает указатель, "не указывающий ни на что". А то что в символах - называется нулевым символом, и равно совершенно обычному нулю, хотя может быть записано и по модному, типа такого: '\0' или '\x00'. Но '\0' == 0 всегда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Жора 0 18 апреля, 2007 Опубликовано 18 апреля, 2007 · Жалоба Я написал простинькую програмку ,камень оказался целым , программатор значит тоже. Похоже действительно sprintf виновата , я думал что библиотечные функции рабочии и на них можно расчитывать а тут ... Как лучше описать подобную функцию я раньше к примеру делал так в числе 0x34 , обнулял 3 и делал сравнение на четверку , затем делал битовый сдвиг вправо ни четыре позиции ,и опять сравнение. А какой механизм можно сделать попрощще? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aesok 0 18 апреля, 2007 Опубликовано 18 апреля, 2007 · Жалоба Похоже действительно sprintf виновата , я думал что библиотечные функции рабочии и на них можно расчитывать а тут ... Функция sprintf рабочая. Для общего развития попробуйте поргнать через симулятор програмку и обьяснить результат. #include <stdio.h> signed char dat0 = 0xFF; unsigned char dat1 = 0xFF; char buffer0[10],buffer1[10]; int main(void) { sprintf(buffer0,"%02x",dat0); sprintf(buffer1,"%02x",dat1); for (;;); } Анатолий. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 18 апреля, 2007 Опубликовано 18 апреля, 2007 · Жалоба А просто книжку почитать по Си-вам такая мысль никогда в голову не приходила? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 19 апреля, 2007 Опубликовано 19 апреля, 2007 · Жалоба А просто книжку почитать по Си-вам такая мысль никогда в голову не приходила? А Вам не приходило в голову, что тыкать человека носом в книжку не вполне прилично или Вас кто-то преподавателем назначил (с предупреждениями то)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 53 19 апреля, 2007 Опубликовано 19 апреля, 2007 · Жалоба 2 rezident -я неочень большой знаток С,но мне казалось,что NULL-это некое абстрактное число,не равное ничему.А строка в С заканчивается обычным нулем. В Си NULL определен как ((void*)0) и используется как значение указателя, который никуда не указывает. Т.е. это не интегральная константа, а указатель. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Igor26 0 19 апреля, 2007 Опубликовано 19 апреля, 2007 · Жалоба В Си NULL определен как ((void*)0) и используется как значение указателя, который никуда не указывает. Т.е. это не интегральная константа, а указатель. А вот так NULL определен в библиотеке stdio.h от EWAVR #ifndef NULL #define NULL (0) #endif это как расценить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 19 апреля, 2007 Опубликовано 19 апреля, 2007 · Жалоба Я считаю неприличным не сделав ни малейшей попытки что-либо "асилить" самостоятельно выходить на форум с вопросами,излагаемых в куче литературы. ИМХО,предупреждение нужно выносить за такой стиль общения-я тут кой-чаво наковырял левой ногой, почему-то не пашет,памажите кто может. При этом еще вводя в заблуждение,заявляя,что на симуляторе это работает-чего не может быть. Впрочем,модератор вы и решать вам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 19 апреля, 2007 Опубликовано 19 апреля, 2007 · Жалоба Я считаю неприличным не сделав ни малейшей попытки что-либо "асилить" самостоятельно выходить на форум с вопросами,излагаемых в куче литературы. Ваше предыдущее сообщение А просто книжку почитать по Си-вам такая мысль никогда в голову не приходила? формулируется гораздо короче - RTFM! ;) Поэтому без указания раздела FM это выглядит неубедительно :) C другой стороны я был бы сильно удивлен, если бы за мое сообщение со ссылкой на K&R мне вынесли бы предупреждение. :blink: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 53 19 апреля, 2007 Опубликовано 19 апреля, 2007 · Жалоба А вот так NULL определен в библиотеке stdio.h от EWAVR #ifndef NULL #define NULL (0) #endif это как расценить? Наверное, как самодеятельность (если там не применен какой-нить хитрый финт ушами). ISO/IEC 9899:1999 (E) 7.17 Commonde?nitions<stddef.h> ... 3 The macros are NULL which expands to an implementation-defined null pointer constant; ... Для чего им в stdio потребовалось этот макрос переоределлять к нулю, не понятно. Был бы это С++, было бы понятно, но в С... Не знаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Жора 0 19 апреля, 2007 Опубликовано 19 апреля, 2007 · Жалоба Ув. WHALE выяснять отношения иди на другой форум твои замечания не по теме. Дело в том что функция sprintf переводит любое шестнадцатеричное число в массив в виде кода( это удобно для жк индикации для отображения переменных в десятичном представлении ). Из-за этого я ее и использовал , как сделать что-то подобное я не знаю, Подскажите кто силен ,хотя-бы дайте наброски ! Я не прошу за меня делать всю работу мне нужен хотя-бы примерный алгоритм. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DogPawlowa 0 19 апреля, 2007 Опубликовано 19 апреля, 2007 · Жалоба ...Из-за этого я ее и использовал , как сделать что-то подобное я не знаю, Подскажите кто силен ,хотя-бы дайте наброски ! Я не прошу за меня делать всю работу мне нужен хотя-бы примерный алгоритм. Вам же уже указали - нужно увеличить размер буфера для sprintf. Пробовали? вариант второй - табличное преобразование char tab[16]={'0', ..'9','A'..'F'}; char byte_to_display; //вывод display(tab[byte_to_display>>4]); display(tab[byte_to_display&0x0f]); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться