Перейти к содержанию

Eddy_Em

Members
  • Постов

    151
  • Зарегистрирован

  • Посещение

Весь контент Eddy_Em

  1. Будет другое состояние. Логично же. В компьютерах мыши именно так и обслуживаются: сначала ты получаешь сигнал CLICK, а лишь после него - DBLCLICK.
  2. Зачем кнопку обрабатывать в прерывании? Ну чушь же! Просто заводим конечный автомат с состояниями каждой кнопки. Проверяем: если вдруг состояние изменилось, фиксируем текущее время в миллисекундах и новое состояние. Чтобы не было дребезга, в течение 30-100мс после этого не реагируем на изменения состояний. Далее, если кнопку отпустили, переводим в состояние "RELEASED". Если через Nмс нахождения в состоянии RELEASED оно опять сменяется на PRESSED, заменяем на DBL_PRESSED… Если в течение Mмс нахождения в состоянии PRESSED или DBL_PRESSED кнопку не отпустили, даем ей состояние HOLD. Вот так просто я делал свою реализацию, но мне не нужно было состояние DBL_PRESSED.
  3. Могу сказать, что налицо полный профан. Тут, похоже, не только С надо изучать, но и элементарный матан! Я уже писал, что там, где нет флоатов, заменяю умножение на некую нормировочную константу двумя действиями: умножением и делением. Однако, в STM32F0 даже деления нет, поэтому для них лучше эту операцию реализовать как умножение и сдвиг, пусть даже uint32_t может понадобиться расширить до uint64_t. Правда, считать коэффициенты так лихо не получится. Вот, допустим, хочу я с точностью до 0.001 получить значения числителя и знаменателя для коэффициентов 1.23, 3.25 и 7.11. Я просто в октаве пишу: [n d]=rat([1.23 3.25 7.11], 0.001) n = 16 13 711 d = 13 4 100 Вот и сразу три числителя и три знаменателя. Можно проверить: n./d ans = 1.2308 3.2500 7.1100 - просто превосходно! Однако, в случае, когда деление хочется заменить сдвигом, придется покумекать, т.к. через цепные дроби подбирать эти числа нереально! Могу разве что предложить последовательный перебор. Вот так: K=1.23; for x=0:31; N=round(K*bitshift(1,x)); printf("a*%g approx a*%d>>%d (*%g)\n",K, N, x, bitshift(10000*N,-x)/10000); endfor a*1.23 approx a*1>>0 (*1) a*1.23 approx a*2>>1 (*1) a*1.23 approx a*5>>2 (*1.25) a*1.23 approx a*10>>3 (*1.25) a*1.23 approx a*20>>4 (*1.25) a*1.23 approx a*39>>5 (*1.2187) a*1.23 approx a*79>>6 (*1.2343) a*1.23 approx a*157>>7 (*1.2265) .... Можно функцию написать, которая будет подбирать коэффициенты с наибольшей точностью. Вот так: function [N Shift] = findNR(K, dk) N = 1; Shift = 1; delta = 1; Ngood = 1; Shiftgood = 1; deltagood = 1; Nmax = bitshift(1,32)-1; for Shift = 3:31; N = round(K*bitshift(1,Shift)); if(N > Nmax) break; endif delta = abs(bitshift(1e6*N, -Shift)/1e6 - K); if(delta < dk) break; endif if(delta < deltagood) deltagood = delta; Ngood = N; Shiftgood = Shift; endif endfor if(delta > dk) printf("tolerance %g not found, use %g\n", dk, deltagood); Shift = Shiftgood; N = Ngood; endif endfunction И в этом случае: [N S] = findNR(1.23, 0.001) N = 315 S = 8 Т.е. можно было бы просто умножить на 315 и сдвинуть вправо 8 раз! А вот если я захочу 10¯⁶ получить, то уже может быть переполнение uint64_t, так что придется точность понизить: [N S] = findNR(1.23, 1e-6) tolerance 1e-06 not found, use 1e-05 N = 40305 S = 15
  4. Слово-то какое хорошее ☺ И прямо-таки значительно лучше характеризует, чем "аудиофил"...
  5. Прискорбно. Он прямо как тот "хирург", который по советам с форумов делает операцию на мозге, и уже на вскрытии черепной коробки застрял…
  6. А чего делать-то нужно? Просто писать дни недели? Ну так это легко (пусть N - номер дня недели, 0 - воскресенье; и тип строковых переменных можно спокойно на char поменять с uint8_t): const char *days = {"воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота"}; ... // здесь что-то с N делают и проверяют, чтобы не вышло за пределы 0..6 char *nxt = pcd8544_print(days[N]); if(nxt){ pcd8544_roll_screen(); pcd8544_print(nxt); } И с Lcd_prints: Lcd_prints(7,0, FONT_1X, (unsigned char *)days[N]); // там тоже стоит uint8_t на обычный знаковый char поменять, чтобы не приводить типы вечно туда-сюда. P.S. Да, полторы тысячи страниц. Или даже больше. Либо человек учится, либо остается некомпетентным бездарем и городит непонятную фигню! Вам же не западло было пару тысяч страниц литературы прочесть, прежде чем начать эффективно компьютер использовать? Вот и программирование - штука нелегкая. Я в свое время минимум тысяч 25 страниц разной литературы прочел, чтобы просто понять, что да как. А потом регулярно бестселлеры перечитываю: по линуксовым IPC; кнутовский "все про ТеХ"; Львовского о латехе; тех же Кернигана и Ритчи нет-нет, да почитаю; Хоровица и Хилла ну и т.д., и т.п. И даташиты/мануалы постоянно читать приходится. И статьи о всяких разных алгоритмах и не только. И это при том, что я - не программист и не электронщик!
  7. От корки до корки, раз такая беда с языком! И упражнениями закрепить. Указатели - это же так просто! И указатель - основной элемент языка. Нужно понимать, что такое указатель, массив, ссылка на переменную… Чем массив указателей отличается от двойного массива типа "char".
  8. Для STM32 там только аппаратно-зависимая часть. А остальное - общее. Слова выводятся посимвольно. Вот такая простая функция рисует строки: U8 *pcd8544_print(U8 *koi8){ while(*koi8){ U8 chr = *koi8; if(pcd8544_putch(chr) == chr) return koi8; ++koi8; } return NULL; } (правда, писал я это давненько, сейчас бы сделал более рационально все). Если эта функция вернет не-NULL, значит, целиком строка на экран не влезла - нужно чуть подождать, чтобы пользователь первую строчку прочел, и сделать pcd8544_roll_screen(). А если есть проблемы собственно с С, советую Кернигана и Ритчи почитать, а после них можно еще о современном C11 (правда, порекомендовать ничего не могу на этот счет: вся литература, что я встречал по современному С, - лютое дерьмо; вот по старому С99 можно Богатырева почитать - рекомендую).
  9. Красивше так: const char *days = {"воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "шаббат"}; И меньше места тратится.
  10. А, я для F0 написал. В F1 это ADC->SQR и ADC->JSQR. RM ID 13902, страница 210, пункт 11.3.3: "Channel selection".
  11. Ну в документации же написано: ADC->CHSEL. А бит SCANDIR в ADC->CFGR1 задает направление сканирования.
  12. Вполне. Вот только о последствиях своего эксперимента, похоже, не задумывался…
  13. @каминщик не совсем так. Тут реально какой-то фашизм. Технофашизм — это, грубо говоря, разновидность социализма, при которой некомпетентный человек не то, что в руководители выбиться не сможет (как мы сейчас наблюдаем), но даже намного более низкие должности занимать, покуда компетентность не докажет... А сейчас сначала на работу берут, а потом надеются, что человек будет нормально работать. А ему и так хорошо штаны просиживать, зачем ему изучать, как повысить эффективность своей работы? Так и будет продолжать в либреофисе тексты пробелами "форматировать" вместо того, чтобы ТеХ изучить. Ну и так далее…
  14. Если нужна точность в сотую долю процента, там реально цены какие-то невменяемые! Но за это платит работодатель. А для шабашек обычно 5% за глаза хватает.
  15. В нормальном социалистическом государстве не нужны постоянные судьи и милиция! Нужны лишь дежурные, которым и будут за дежурство доплачивать... Пусть те же 20тыр за три-четыре выхода в месяц. А гражданское общество должно внимательно следить, чтобы среди этих дежурных не было "крыс"… Да, понадобится еще диспетчерская служба и т.п., но это можно держать отлельным "флаконом" — как МЧС. И таки зарплаты должны быть достойными. А не как в нашей "дерьмократической" РФии! Вот какая зараза решила, что в Москвабаде учитель должен в 5-10 раз больше получать, чем такой же учитель где-нибудь в ауле Усть-Зажопинск? Достаточно было вменяемую премию давать и на правах любой свободной лицензии это дело оформлять. Т.е. все знают, что автор хитрого механизма в твоей машине — дядь Миша из Трыгвындынска, а дядь Миша рад, что получил за такое изобретение четырехкомнатную квартиру на 500м² в центре Москвабада, гараж прямо во дворе дома и новый электромобиль…
  16. Знаю тех, кто еще в машкодах писал и перфокарты вручную пробивал (т.к. не хотелось сидеть в длинной очереди и ждать, пока "девочка" на более вменяемом компе сделает эту работу автоматом). Поэтому очень высокого мнения. А дебилов везде хватало, но мы здесь не о них! Зато в капитализме есть "патенты". Когда один тридварас, "запатентовав" круглые края корпуса, будет получать бешеные отчисления ни за что! Или другой тридварас, пытающийся запатентовать машины на постоянном токе (благо, эта тварь — Эдисон — села в лужу, меня вообще от этого куска говна постоянно люто взрывает!)… И ведь таких уродов - полным-полно! Вот, к счастью, когда-то Линус Торвальдс написал зачаток операционной системы и опубликовал ее свободно. А дальше подключился Ричард Столман, да придумал лицензию GPL для таких случаев. И теперь ни одна ***** в мире не может использовать свободный код в своих гнусных махинациях — иначе столкнется с судами!
  17. Жесть-то какая! Лучше б уж сами на асме нарисовали… Да или даже на машкодах: всяко не привыкать было советским программистам!
  18. Да какое, блин, ПО на компутерах того уровня? Там для каждой конкретной железяки писали не ее конкретном асме. А учитывая то, что не каждому был доступен терминал с асмом и перфоратором карт/лент, то зачастую писали в машкодах, да вручную те самые карты/ленты перфорировали. Мне уже понарассказывали, как работали на ранних этапах ввода в строй БТА... Я сейчас просто радуюсь, что у меня нормальный Gentoo Linux, и не нужно так извращаться (хотя, чуть меньше 30 лет назад, когда я на ставропольской "весте" пытался первые свои программки писать, приходилось сочетать BASIC с машкодами).
  19. На самом деле никого расстреливать не нужно! Нужна лишь вменяемая система правосудия: какой ты ущерб причинил (но да: придется оценивать человеческую жизнь, что весьма сложно), такой и должен отработать на каторге. Скажем, стырил на 1000 рублей — поди-ка дворником вечер-другой дворы помети. А спер миллиард — ну, так будешь пожизненно ртуть добывать на рудниках!.. Потому как честным трудом ни в жизнь такой суммы не отработаешь! Я не понимаю, почему до сих пор никто не ввел такой системы! Почему честрые граждане должны из своих налогов всяких мудаков содержать? Это — вообще маразм!
  20. Ну, не надо! Поначалу отлично писали сами. Это во время горбатого урода сдались, да решили объявить "выньдовс" бесплатной. Вместо того, чтобы как люди на UNIX-base переходить! Итог мы видим: в стране околонулевая компьютерная грамотность. Люди тупы настолько, что среднемировые 95% идиотов для нас — фантастика! У нас идиотов больше 99%!!!
  21. В России испокон поголовного признания людей рабами (как "крестили" некогда свободную страну) аналогично. И что - поменялось что-то? Народ — рабы, тюрьмы боятся. Однако, воруют изо всех сил! Подозреваю, даже смертная казнь за расхищение социалистического имущества не поможет… Чтобы рабскую дурь выбить, нужно хотя бы лет 200 давать людям понимать, что они — свободные. Но что-то такого не предвидится…
  22. Расстреливали слишком мало. В итоге получилось: "на работе ты — не гость, тащи с работы даже гвоздь". Вот как при такой политике страна может развиваться? В журнале "фитиль" высмеивались эти пороки, однако, руководство страны вообще никаких выводов не делало! То кукурузу вместо пшеницы засеют. То еще что-нибудь "забудут" в плановой экономике. В итоге росла коррупция, воровали где только можно, а страна катилась в задницу. Вот так-то "инерции" после смерти Сталина хватило лишь на то, чтобы запустить человека в космос (и то, в духе "Омон Ра"), впервые в мире автоматом собрать пробы лунного грунта, да построить самые крутые на то время оптический и радиотелескопы (замалчивая тот же дух "Омон Ра").
  23. Это где гомосеки считаются умственно здоровыми? Ну-ну…
×
×
  • Создать...