-
- Есть такой трюк, как несколько лупов поменьше, в прерываниях таймеров с соответствующими приоритетами и вложениями. Одна беда - на AVR этот трюк не катит ;) - Vladimir Ljaschko(25.07.2013 16:42)
- Несколько заЛупов поменьше - имитация RTOS. Нафиг. При производительности современных камней... Слушайте, может мы к DOS вернемся. Она уж на Атомах точно летать будет. - tesla(29.07.2013 00:33)
- Вполне катит и на АВР - в медленном таймерном прерывании разрешаются вложенные прерывания (чтобы могло работать быстрое таймерное прерывание), в быстром таймерном прерывании через сколько-то раз разрешается медленное таймерное прерывание. Таких Apтём(53 знак., 25.07.2013 16:48)
- Ага, лёгкое извращение. - Vladimir Ljaschko(25.07.2013 17:05)
- Малая скорость это не помеха. Ехали бы 50 км/ч за пенсионером - уже хорошо. Помеха - нет разгонных полос при въездах(съездах) на магистрали. - Юра(25.07.2013 16:04, )
- никогда вообще в своих программах не использовал задержек, и все таймауты прекрасно формируются - AVF(25.07.2013 14:24)
- Ну о чем и речь. Процедура вывода символов проверяет, истекло ли время ожидания. Если не истекло - сразу выход в Main Loop. Если истекло - выводим символ, выставляем новое значение таймаута и выходим опять же в Main Loop. - LightElf(25.07.2013 13:42)
- Здрасти! Пауза же не в конце процедуры стоит, а после КАЖДОГО выведенного на дисплей символа впадает в ожидание. Если я при первом же ожидании в Main loop вернусь, то следующие цифры никогда не будут прописаны. - Ксения(25.07.2013 15:19)
- Где-то у вас что-то не продумано. Koyodza мне подсказал этот способ. Создается буфер. Скажем, 20x4=80 байт. Пусть раз в 1 мс выводим посимвольно из буфера на дисплей. При 20x4 обновление всего экрана 84 мс. 80 символов, 4 адреса строк. Я мог бы mazur(175 знак., 25.07.2013 16:03, youtube)
- И вам не хворать :) LightElf(202 знак., 25.07.2013 15:48 - 15:55)
- Можно и всю строку выводить, но тогда очиску FIFO можно поручить таймерному прерыванию, которое будет за один вызов писать один символ на экран. - Apтём(25.07.2013 19:46)
- А как быть, если в начале/конце строки есть дополнительная работа (например, на очистку экрана) с особо большой задержкой? Тогда таймирование подравнивать под эту большую задержку, чтобы было поровну, или ту большую задержку разбивать на много Ксения(17 знак., 25.07.2013 19:11)
- Ну вот как-то примерно так. lcd_put просто складывает строку в буфер fifo. lcd_poll вызывается из main loop. LightElf(1581 знак., 26.07.2013 13:29 - 13:44)
- В вашем случае FIFO - это означает, что отправка символьных сообщений происходит всегда из одного места? Не проще ли работать с буфером символьного дисплея? Мне как показал Koyodza этот способ, я даже семисегментники перевел на этот способ. С mazur(34 знак., 26.07.2013 14:51)
- Ну нет, lcd_put можно из разных мест звать. С буфером в моем случае не лучший вариант. Текст для дисплея (кроме нескольких сообщений об ошибках) поступает снаружи устройства и содержит вперемешку еще всякие дополнительные коды (команды контроллера LightElf(205 знак., 26.07.2013 15:07)
- 1 - В том-то и прикол, что с буфером без разницы с чем работать. Это независимый модуль. А модули устройств уже из буфера отправляют символы. Все независимо. Как в вашем FIFO определить знакоместа символов? Вот я хочу отправить на 1 строку, mazur(66 знак., 26.07.2013 15:31)
- У меня ни текст, ни его форматирование, ни спецэффекты, ни тип дисплея неизвестны на этапе компиляции прошивки. - LightElf(26.07.2013 16:18 - 16:31)
- В смысле? Как это неизвестны? Как вы пишете тогда программу, если вам неизвестно с чем вы работаете, какие возможности вам доступны. Спецэффекты бесполезны в случае знакосинтезирующих дисплеев и семисегментников. - mazur(26.07.2013 16:39)
- Я пишу программу, которая будет работать с любым дисплеем, имеющим интерфейс типа HD44780. Я не знаю заранее его разрешение (от 1x8 до 4x40), конкретную кодировку и все такое прочее (у VFD от Futaba кодировка вообще левая, дисплеи от МЭЛТ работают LightElf(284 знак., 26.07.2013 17:28 - 17:31)
- Хочу заметить, что вы с mazur-ом о разных уровнях абстракции беседуете. - rezident(26.07.2013 17:36)
- Ну, Ксения о конкретной проблеме заикнулась. Что у нее проблемы с задержками при работе с дисплеем. Мои соображения, что она говорила о модуле для работы с конкретным дисплеем. Поэтому, если упоминаются разные уровни абстракции, то получается, что mazur(177 знак., 26.07.2013 18:17)
- Наверно. Мое дело - плата с прошивкой. Кто-то подключит к ней какой-то дисплей. Кто-то другой напишет управляющий софт (на сервере). Кто-то третий придумает выводимый текст. Желательно, чтобы все эти "кто-то" не парили каждый раз мозг мне :) - LightElf(26.07.2013 17:49)
- Хочу заметить, что вы с mazur-ом о разных уровнях абстракции беседуете. - rezident(26.07.2013 17:36)
- Я пишу программу, которая будет работать с любым дисплеем, имеющим интерфейс типа HD44780. Я не знаю заранее его разрешение (от 1x8 до 4x40), конкретную кодировку и все такое прочее (у VFD от Futaba кодировка вообще левая, дисплеи от МЭЛТ работают LightElf(284 знак., 26.07.2013 17:28 - 17:31)
- В смысле? Как это неизвестны? Как вы пишете тогда программу, если вам неизвестно с чем вы работаете, какие возможности вам доступны. Спецэффекты бесполезны в случае знакосинтезирующих дисплеев и семисегментников. - mazur(26.07.2013 16:39)
- У меня ни текст, ни его форматирование, ни спецэффекты, ни тип дисплея неизвестны на этапе компиляции прошивки. - LightElf(26.07.2013 16:18 - 16:31)
- 1 - В том-то и прикол, что с буфером без разницы с чем работать. Это независимый модуль. А модули устройств уже из буфера отправляют символы. Все независимо. Как в вашем FIFO определить знакоместа символов? Вот я хочу отправить на 1 строку, mazur(66 знак., 26.07.2013 15:31)
- Ну нет, lcd_put можно из разных мест звать. С буфером в моем случае не лучший вариант. Текст для дисплея (кроме нескольких сообщений об ошибках) поступает снаружи устройства и содержит вперемешку еще всякие дополнительные коды (команды контроллера LightElf(205 знак., 26.07.2013 15:07)
- В вашем случае FIFO - это означает, что отправка символьных сообщений происходит всегда из одного места? Не проще ли работать с буфером символьного дисплея? Мне как показал Koyodza этот способ, я даже семисегментники перевел на этот способ. С mazur(34 знак., 26.07.2013 14:51)
- Я начинаю понимать, что мне придется просто свой исходник привести, бо косноязычен зело и описать словами не могу. - LightElf(26.07.2013 12:17)
- Про какой дисплей вы говорите? Если взять ЖКИ на HD44780, то команда очистки 1,5 мс. Установили таймер, новое состояние автомата, новую точку входа прототреда, вышли. Делаете свои дела дальше. При следующей итерации проверка таймера. Время вышло? mazur(360 знак., 25.07.2013 20:16 - 20:19, youtube)
- Ну вот как-то примерно так. lcd_put просто складывает строку в буфер fifo. lcd_poll вызывается из main loop. LightElf(1581 знак., 26.07.2013 13:29 - 13:44)
- Здрасти! Пауза же не в конце процедуры стоит, а после КАЖДОГО выведенного на дисплей символа впадает в ожидание. Если я при первом же ожидании в Main loop вернусь, то следующие цифры никогда не будут прописаны. - Ксения(25.07.2013 15:19)
- Никакого тупика. Решение для обгона есть, но вы его упорно игнорируете -> - SciFi(25.07.2013 13:41, ссылка)
- Есть такой трюк, как несколько лупов поменьше, в прерываниях таймеров с соответствующими приоритетами и вложениями. Одна беда - на AVR этот трюк не катит ;) - Vladimir Ljaschko(25.07.2013 16:42)