у[х]=а; загружает в массив ровно то, что прилетело в УАРТ у[х]=а-'0'; перед загрузкой вычтет порядковый номер символа "0", а т.к. цифры идут по порядку - то останется только значение принятого числа... т.е. произойдет преобразование "0"->0, "1"->1, "2"->2... и.т.д.
писал уже... разовью мысль чтоб принять число нужно: 1) выделить под него переменную соответственного размера (вместо массива) 2) обнулить её до начала приёма посылки у=0; 3) складывать в неё полученные числа: у+=а-'0'; 4) не забывать "сдвигать" разряды умножением на 10: у*=10; (сдвигать лучше сразу перед внесением новой цифры, пусть начальный 0 лишний раз умножится, зато на финише получаем ровно нужное число без лишних условий).
Добавлено after 2 minutes 29 seconds: П.С. это я продолжил начатую тему... но и тут она в тему .....
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
П.С. это я продолжил начатую тему... но и тут она в тему .....
Что то не доходит. Смотрите у меня числу знаку '0' соответствует 48. Мне что бы получить из '0'- 0. с умножением что то не зашло. Можно подробнее. То что отдельную временную переменную под это преобразование это мне понятно. Не понятно с умножением
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
это преобразование очень простое и возможно оно блвагодаря тому, что символы цифр в кодировке идут по порядку почитайте несколько постов назад я это объяснял
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
это преобразование очень простое и возможно оно блвагодаря тому, что символы цифр в кодировке идут по порядку почитайте несколько постов назад я это объяснял
Да теперь это понятно. Теперь дошел смысл. Спасибо
небольшой лайвхак для пользователей КВАВР (а может и не только, на других не проверял): раньше я дербанил числа на разряды так:
Код:
while (out>0){ putchar(out%10+'0'); out/=10;};
(отдельно делил и отдельно находил остаток) но, сегодня меня окончательно догнала мысль, о том, что деление и остаток от деления - близнецы братья, а так-же подозрение о том, что квавр нерационально использует ресурсы... Открываю ассемблеровский листинг программы и вижу, что функция деления (одна и та-же) вызывается дважды, но в качестве результата забирается информация из разных регистров... решил, почему, раз информация всёравно лежит, не забрать её вручную? т.к. остаток от деления лежит в регистровой паре R26,27, написал функцию:
Код:
unsigned int ostatok (void){#asm("MOVW R30,R26")}
и применил её в коде...
Код:
while (out>0){ out/=10; putchar(ostatok()+'0');}
скорость преобразования ожидаемо выросла в 2 раза. _____ Уважаемые коты, прошу комментариев: можно ли, и правильно ли так делать? не вылезут, ли какие нибудь подводные грабли?
Добавлено after 21 minute 8 seconds: сделать в обратной последовательности (сначала остаток, потом вытащить результат деления) не получится, т.к. штатная функция получения остатка затирает результат деления
т.к. деление, это функция и для её выполнения организуется требуемое ей свободное адресное пространство, то я не вижу причин для изменения назначенных регистров... кроме того эта функция одна на всю программу (все деления и остатки вызывают именно её) этот факт ещё больше ограничивает возможность компилятора чтото изменить в функции. Добавлено after 33 minutes 25 seconds: П.С. регистры с остатком R26, R27, а регистры R30, R31 это ретурн.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
из недостатков - квавр не понимает какого типа переменная возвращается и выдает предупреждение. пока отключил предупреждерия для этой функции:
Код:
#pragma warn- unsigned int ostatok (void){#asm("MOVW R30,R26")} #pragma warn+
не знаю правильно ли так делать или есть способ лучше?
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Вот такой прикол, проект под 2560 и я не могу использовать конструкции типа PINH.2 то есть выше порта G выдает ошибку компиляции. Никто не сталкивался?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 28
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения