ARV, да никакого. Нет никакой несовместимости. Есть накладные расходы. И если критична производительность и/или объем кода - то стоит задуматься, а нужен ли тут float ? Я, наверное, из своих поделий на восьмой или 32й мегах и не припомню, что б вот так прямо нужен был float. Практически везде получалось уйти в целочисленную математику. Но спорить с вами я не буду Хватило тут уже холиваров с авторами ЯВУ. Точку зрения Блондинки™ вы услышали, она может не совпадать с вашей.
Добавлено after 1 minute 30 seconds: Вспомнила, делался какой то показометр на линейке диодов, там логарифмическое что то просили считать. Пришлось туда втулить.
Проблема разрешилаь очень просто. Применил остаток от деления %. И потом положил в массив. Точку тоже положил в массив куда мне нужно. Ну а дальше вывел как простую строчку. Получилось прикольно! Ну признаться посмотрел на форуме там приводился пример подобных действий,я применил его, я такую разбивку применял только по 7seg indication тоже нормально работает.
Интересно, а что там за магическое число в программе - 0x30?
Последний раз редактировалось Bill_ Вт ноя 22, 2022 12:02:36, всего редактировалось 1 раз.
Проще, проще... требуется ввести только 3 символа вместо 4-х.
Тогда так ещё проще
Код:
x = y % 10 + 48;
всего 2 символа...
_________________ Для тех, кто не учил магию мир полон физики Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Bill_, при чем здесь "три символа"? '0' — это и в Африке '0', наглядно и понятно. А что за хрень 0x30 — кто бы знал? Вот можно и строки заканчивать символом 0x0A, но наглядней таки '\n' писать (я и сам полез сейчас в хексдамп, чтобы глянуть, какой код у '\n', т.к нафиг оно мне в реальной жизни сплющилось это помнить?). А то еще дойдет до писания букв их кодами. А в какой кодировке тогда?? Вот я работаю в КОИ8-Р, хоть давно на хрюникод все попереходили.
Добавлено after 3 minutes 5 seconds: Кстати, у меня для печати целых вот что нарисовано:
// return string with number `val` char *u2str(uint32_t val){ return _2str(val, 0); } char *i2str(int32_t i){ uint8_t minus = 0; uint32_t val; if(i < 0){ minus = 1; val = -i; }else val = i; return _2str(val, minus); }
Когда начал играться с Cortex-M3, пришлось еще и на флоаты расширять...
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Вы чего? шуток не понимаете?вон сколько морд нарисовал!!!! читаемость кода на первом месте всегда! (глаза и нервы даны одни на всю жизнь, а клавиатуру по мере износа и поменять можно ) Хотя... бывают случаи, когда читабельность не на первом месте (или даже вредна)... но встречаются довольно редко и данный случай к ним не относится.
_________________ Для тех, кто не учил магию мир полон физики Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Вы чего? шуток не понимаете?вон сколько морд нарисовал!!!! читаемость кода на первом месте всегда! (глаза и нервы даны одни на всю жизнь, а клавиатуру по мере износа и поменять можно ) Хотя... бывают случаи, когда читабельность не на первом месте (или даже вредна)... но встречаются довольно редко и данный случай к ним не относится.
Да я как-то не привык морды рисовать. Ни кошачьи, ни другие... Ладно, для данного случая так и быть нарисую. PS: Вообще-то, я задал вопрос автору поста как-бы в шутку, чтобы обратить его внимание на эту деталь. Но люди восприняли это всерьёз и стали отвечать. Ладно, впредь в таких случаях буду рисовать кошачьи мордочки.
Последний раз редактировалось Bill_ Ср ноя 23, 2022 07:21:45, всего редактировалось 1 раз.
Мужики, выручайте. ) Есть код. В функцию отправляю переменную с конкретным значением. В функции конструкция switch - case. Значение переменной, пусть будет 2. Он корректно в отладчике прилетает на этот же CASE. Однако, потом случается чудо и после break он летит через несколько case и выполняет еще один и тот не полностью...
Т.е. перескакивает. В итоге на выходе в регистрах получаются не не значения, которые нужны...
Код:
void Set_Digit(int Digit) // Функция вывода цифры { switch (Digit) { case 0: PORTB |= (1<<Segment_A)|(1<<Segment_E)|(1<<Segment_F); PORTD |= (1<<Segment_B)|(1<<Segment_C)|(1<<Segment_D); break; case 1: PORTD |= (1<<Segment_B)|(1<<Segment_C); break; case 2: PORTB |= (1<<Segment_A)|(1<<Segment_E)|(1<<Segment_G); PORTD |= (1<<Segment_B)|(1<<Segment_D); break; case 3: PORTB |= (1<<Segment_A)|(1<<Segment_G); PORTD |= (1<<Segment_B)|(1<<Segment_C)|(1<<Segment_D); break; case 4: PORTB |= (1<<Segment_B)|(1<<Segment_C); PORTD |= (1<<Segment_F)|(1<<Segment_G); break; case 5: PORTB |= (1<<Segment_A)|(1<<Segment_F)|(1<<Segment_G); PORTD |= (1<<Segment_C)|(1<<Segment_D); break; case 6: PORTB |= (1<<Segment_A)|(1<<Segment_E)|(1<<Segment_F)|(1<<Segment_G); PORTD |= (1<<Segment_C)|(1<<Segment_D); break; case 7: PORTB |= (1<<Segment_A); PORTD |= (1<<Segment_B)|(1<<Segment_C); break; case 8: PORTB |= (1<<Segment_A)|(1<<Segment_E)|(1<<Segment_F)|(1<<Segment_G); PORTD |= (1<<Segment_B)|(1<<Segment_C)|(1<<Segment_D); break; case 9: PORTB |= (1<<Segment_A)|(1<<Segment_F)|(1<<Segment_G); PORTD |= (1<<Segment_B)|(1<<Segment_C)|(1<<Segment_D); break; default: break; } }
Чудес не бывает. Вам сначала нужно выключить все сегменты в портах, а затем уже зажигать. Starichok51 опередил.)
Добавлено after 7 minutes 6 seconds: А вообще, это делается не так. Обычно в хедере расписывается подключение индикатора и всё. Программа же не меняется. И пофигу, общий анод или катод, один порт, два или три. И кол-во разрядов индикатора.
Последний раз редактировалось OKF Пн мар 13, 2023 21:58:59, всего редактировалось 1 раз.
Вот и все. Понятно, что надо и сегменты выключать, но при инциализации они выключены все. Это первая команда, которая включает их. БОльше нигед ничего пока нет. Просто хочу зажечь один индикатор и все.
Добавлено after 1 minute 54 seconds: И да, я допишу в функцию изначальное гашение всех сегментов. Это СПАСИБО, что посказали и напомнили. )
Добавлено after 1 minute 15 seconds: У меня почему то , что в отладчике перескакивает при нажатии F11 через несколько кейсов. Что залитая в МК показывает хреноту.
Добавлено after 5 minutes 31 second:
OKF писал(а):
А вообще, это делается не так. Обычно в хедере расписывается подключение индикатора и всё
Очередная задача... Кстати, с первой был простой косяк: оптимизация компилияции в АВРстудио почему то жутко урезала код, что начлало скакаять по кейсам в свитч не понятно куда. Убрал оптимизацию и все стало так, как нужно.
Теперь я хочу разбивать число неопределенного количества разрядов на цифры. Мне нужен только алгоритмический принцип, а не код. Понимаю, что надо использовать деление на 10 и остаток от деления на 10. Много чего уже посмотрел, но все равно плохо доходит. Думаю, что и сам скоро разберусь, однако не помешает и толчек в нужном направлении.
Суть в том, что я не знаю, сколько разрядов у числа изначально. Может быть три, а может пять. Мне надо его разбить на отдельные цифры и вывести корректно на индикатор.
Опишите суть, или ткните, где это максимально понятно расписано.
Добавлено after 12 minutes 22 seconds: З.Ы. Число целое. До 5 разрядов.
кроме деления часто используют вычитание. если 5 разрядов, то сначала вычитают 10000, пока есть от чего вычитать. потом вычитают 1000, потом 100, и наконец 10. после вычитания десятков остаются единицы числа.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
с /10 и %10 и получаете разряды (напр. масив цифр), с максимально возможного количества цифр для отображения на дисплее. Затем (при необходимости), удаляете незначащие нули (leading_zeros) (заменяете их пустым символом).
напр.: 123456 в 8-digit 7-сегментный дисплей 123456 -> 0, 0, 1, 2, 3, 4, 5, 6 -> ' ', ' ', 1, 2, 3, 4, 5, 6 а затем последовательно вывести их на дисплей.
Последний раз редактировалось veso74 Ср мар 15, 2023 20:14:50, всего редактировалось 1 раз.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения