Страница 408 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн авг 31, 2020 12:38:00
dibor
А так не подойдет:
I = atoi(Mass);
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн авг 31, 2020 12:40:29
ARV
Кошмарная проблема! Отнять от значения '0', чтобы из кода цифры получить число, это ведь так сложно...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн авг 31, 2020 14:10:19
Ivanoff-iv
[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3884874#p3884874"]у[х]=а; загружает в массив ровно то, что прилетело в УАРТ
у[х]=а-'0'; перед загрузкой вычтет порядковый номер символа "0", а т.к. цифры идут по порядку - то останется только значение принятого числа... т.е. произойдет преобразование "0"->0, "1"->1, "2"->2... и.т.д.[/uquote] писал уже... разовью мысль
чтоб принять число нужно:
1) выделить под него переменную соответственного размера (вместо массива)
2) обнулить её до начала приёма посылки у=0;
3) складывать в неё полученные числа: у+=а-'0';
4) не забывать "сдвигать" разряды умножением на 10: у*=10;
(сдвигать лучше сразу перед внесением новой цифры, пусть начальный 0 лишний раз умножится, зато на финише получаем ровно нужное число без лишних условий).
Добавлено after 2 minutes 29 seconds:
П.С. это я продолжил начатую тему... но и тут она в тему .....

Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн авг 31, 2020 15:03:33
mixon46
[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3886086#p3886086"]П.С. это я продолжил начатую тему... но и тут она в тему .....

[/uquote]
Что то не доходит. Смотрите у меня числу знаку '0' соответствует 48. Мне что бы получить из '0'- 0. с умножением что то не зашло. Можно подробнее. То что отдельную временную переменную под это преобразование это мне понятно. Не понятно с умножением
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн авг 31, 2020 15:48:55
ARV
mixon46 писал(а): Мне что бы получить из '0'- 0
чтобы получить 0, вам надо из '0' вычесть '0'.
int x = y - '0'; // если y='9', то x будет 9
и не забивайте голову кодами символов - берите символ и им манипулируйте
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн авг 31, 2020 17:51:20
Ivanoff-iv
это преобразование очень простое и возможно оно блвагодаря тому, что символы цифр в кодировке идут по порядку
почитайте несколько постов назад я это объяснял
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт сен 01, 2020 15:03:23
mixon46
[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3886191#p3886191"]это преобразование очень простое и возможно оно блвагодаря тому, что символы цифр в кодировке идут по порядку
почитайте несколько постов назад я это объяснял[/uquote]
Да теперь это понятно. Теперь дошел смысл. Спасибо
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт окт 09, 2020 13:51:49
Ivanoff-iv
небольшой лайвхак для пользователей КВАВР (а может и не только, на других не проверял):
раньше я дербанил числа на разряды так:
Код: Выделить всё
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:
сделать в обратной последовательности (сначала остаток, потом вытащить результат деления) не получится, т.к. штатная функция получения остатка затирает результат деления

Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт окт 09, 2020 14:08:08
WiseLord
Нет гарантии, что нужными регистрами будут всегда именно эти R26 и R30.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт окт 09, 2020 15:17:15
Ivanoff-iv
т.к. деление, это функция и для её выполнения организуется требуемое ей свободное адресное пространство, то я не вижу причин для изменения назначенных регистров... кроме того эта функция одна на всю программу (все деления и остатки вызывают именно её) этот факт ещё больше ограничивает возможность компилятора чтото изменить в функции.
Добавлено after 33 minutes 25 seconds:
П.С. регистры с остатком R26, R27, а регистры R30, R31 это ретурн.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт окт 15, 2020 20:53:28
Ivanoff-iv
из недостатков - квавр не понимает какого типа переменная возвращается и выдает предупреждение.
пока отключил предупреждерия для этой функции:
Код: Выделить всё
#pragma warn-
unsigned int ostatok (void){#asm("MOVW R30,R26")}
#pragma warn+
не знаю правильно ли так делать или есть способ лучше?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт окт 15, 2020 21:34:50
ARV
правильнее и лучше применять стандартную функцию libc:
div
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 19, 2020 07:50:26
dibor
[uquote="ARV",url="/forum/viewtopic.php?p=3907425#p3907425"]правильнее и лучше применять стандартную функцию libc:
div[/uquote]
Так ее нет в CVAVR

Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 19, 2020 08:01:35
ARV
Лишний повод не использовать нестандартную фигню.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср янв 06, 2021 16:09:29
mixon46
Приветствую. Подскажите есть такая запись
return mode > 0.5f;
Возвращает значение mode если больше чем 0.5f?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср янв 06, 2021 16:33:24
WiseLord
Не значение mode, а true/false
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт янв 07, 2021 09:41:13
mixon46
Понял. Это как условие. Если больше то true если меньше то false
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт янв 07, 2021 14:03:49
OKF
Равно куда то затерялось. Вот они характерные ошибки начинающих.)
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс янв 10, 2021 21:56:02
AVK
Вот такой прикол, проект под 2560 и я не могу использовать конструкции типа PINH.2 то есть выше порта G выдает ошибку компиляции.
Никто не сталкивался?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс янв 10, 2021 22:07:26
OKF
Попробуйте по стандартному: (PINH & 1<<2).