100 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,599
|
||||||
1 | ||||||
Как вызвать функцию через промежуток времени?06.01.2020, 06:09. Показов 2725. Ответов 65
Метки нет (Все метки)
Даже не то чтобы вызвать, а две булевые переменные чтобы сбрасывались/устанавливались через 40000мс и 20000мс.
40000мс true потом 40000мс false, и т.д. Я понял, что можно считать в main, да только там занято и непонятно сколько времени тратится на обработку кода в цикле. Гуглил, есть способ с использованием счётчиков таймеров, но тут тоже что-то используется.
0
|
06.01.2020, 06:09 | |
Ответы с готовыми решениями:
65
Как вызывать метод (функцию) в определенный промежуток времени? Как вывести строку через промежуток времени? Как повторять действие через промежуток времени? Как менять случайное число через какой-то промежуток времени? |
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
|
|
15.01.2020, 14:08 | 41 |
Знаете, я почему-то не хочу верить во всякую чушь, тем более на слово. Интересно, с чего бы...
IDE это ни разу не автоматизация. Интеграция (объединение инструментов написания кода, отладки, прошивки,...) - да, коллекция шаблонов (настройки для десктопного приложения, консольного, библиотеки,...) - да. А автоматизация это среда, где последовательностью операций можно управлять. То есть набор утилит и какой-то скриптовый язык для их связи.
1
|
100 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,599
|
|
15.01.2020, 20:28 [ТС] | 43 |
По крайней мере в этой теме, ни первое ни второе ко мне не подходит.
Каюсь, эмоциональный понос бывает. Так я вроде как и создал отдельный проект, чтобы проверить, в чём дело, в таймере, в его использовании или протеусе. Ну во флагах компиляции мне лень разбираться, а заголовочный файл я в проекте создал на этапе "лишь бы скомпилировать"(первоначально проблема была проект вообще открыть), т.к. требовалось в 2х файлах. А на счёт правильности, кому как нравится, я это делаю только для себя. А уж пропишет это компилятор или я - да без разницы. Я конечно подправлю. Комментарий остался неизменным с самого начала, до того как я понял, что можно либо использовать делитель на 1024 такта, либо изменить момент счёта(на спаде или на подъёме). На счёт макросов, для меня я 3дня назад(по времени, которое я уделил этому) скачал Atmel Studio, и вообще начал знакомство с мегой. Названия макросов мне совершенно ни о чём не говорят, я делал по аналогии с другим таймером, посмотрел их значение и оставил нужное. Таймер 0, путаница получилась из-за моей невнимательности, я не сразу понял какие макросы включаются именно в моём случае. Автор проекта разрабатывал так же и под другие версии микроконтроллеров. OCR0 я вообще ни разу не упоминал, зачем вы вводите меня в путаницу, я и так запутался. Я понимаю что таймеры считаются где-то "там", но не в функции майн. В счётный регистр я полез потому, что мне нужен промежуток в 233*1024 такта. Зачем мне городить какие-то костыли, чтобы как-то посчитать также 233 изменения регистра счётчика, особенно после того, как на 266й раз он будет равен 0. Обнуляю я его и всё. Всё это "удобство" я не одобряю, много лишней информации. Работать с одним байтом не настолько сложно, чтобы написать кучу макросов для того, чтобы работать побитово. Я так написал, потому, что ещё не врубился, где функция, а где макрос. У вас наверное сразу появился вопрос, не дальтоник ли я, ведь функция черным а макрос сиреневым. Я просто последний раз лез в программирование 2 года назад - подзабыл всё. Плюс незнакомый стиль оформления.
0
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
|
|
16.01.2020, 09:35 | 44 |
То есть под автоматизацией вы понимаете ручную работу с регистрами. Скорее всего, имелось в виду что-то другое, но сказали вы именно это.
Я комментировал только оформление вашего алгоритма. Запутались вы без моей помощи. Для этого используется режим таймера CTC (сброс при совпадении). Поскольку таймер работает независимо от ядра, чем больше логики вы ему отдадите, тем лучше. И рассинхронизации не будет, и производительность не снизится. Пока речь идет об отдельных светодиодах действительно можно не заморачиваться. Удобство таких макросов начинается во время разводки платы, когда бывает удобно перекинуть кнопки, светодиоды и прочее с одних выводов на другие, причем в коде это меняется в одном месте, а не в десятке. Но пока необходимости не возникло, вряд ли оцените. Не надо оправдываться, просто учтите замечания на будущее. И воздержитесь от негативной эмоциональной оценки когда задаете вопросы.
1
|
16.01.2020, 12:31 | 45 |
Я думал понято что я имел в виду. У GDB консольный интерфейс с текстовым управлением. Это мягко говоря не очень удобно. IDE значительно упрощает работу с отладчиком предоставляя понятный графический интерфейс. Не нужно знать команды GDB. Просто ставим точки останова кликая мышкой по строке кода, наводим мышку на переменную и узнаем значение в ней и т. д. Нажимаем F10 на клавиатуре и пошагово выполняем программу.
1
|
100 / 35 / 21
Регистрация: 17.09.2014
Сообщений: 1,599
|
|||||||||||
17.01.2020, 05:37 [ТС] | 46 | ||||||||||
Вот нашел пример использования CTC.
Так нельзя сделать?
И нужно ли вообще трогать TIFR и TIMSK? Я так понял это настройка прерываний для всех таймеров, не собьётся ли тот который уже используется?
0
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
|
|||||||||||
17.01.2020, 10:22 | 47 | ||||||||||
Я даже больше скажу: именно через gdb обычно реализуется отладка. То есть все ваши костыли не сами ходят к железке / программе, а через gdb.
Кому-то и в иконки удобнее тыкать, чем набрать короткую команду в консоли. Ну вот не хотят они потратить немного времени, чтобы потом работать быстрее. Если этот код изначально был так записан, то это странно. Еще можно понять, когда он разбит на блоки:
Старайтесь избегать записи (0<<x) , это создает ложное ощущение записи нуля. Надеюсь, вы понимаете, почему оператор |= не записывает нули. Исключение - когда бит связан с другими, как те же WGM0x. Но вот если COM0x не используются вообще, какой смысл акцентировать на них внимание?Если бы они были совсем бесполезны для программиста, их бы не выставили наружу, очевидно. TIMSK, если я правильно помню, это разрешение прерываний. То есть если вы хотите использовать прерывания, вам придется лазить в TIMSK. Если хотите менять условие возникновения прерываний, лазить туда придется не только при инициализации, но и во время работы. TIFR придется трогать только если хотите обрабатывать события от таймера программно, без прерываний. То есть досчитал, скажем, таймер, до максимума, выставил TOVF0 - а прерывание запрещено. Вместо этого вы в основном цикле проверяете флаг, обрабатываете его и сбрасываете. Такой подход тоже иногда используется.
1
|
17.01.2020, 19:48 | 48 |
Вы же сами попросили.
Отлаживать вводя команды в консоль? Нет, спасибо. Покажите несколько "коротких команд", допустим для пошаговой отладки и просмотра переменных. Посмотрим насколько это проще чем кликнув парой раз по кнопкам/менюшкам сделать тоже самое.
1
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
|
|
17.01.2020, 21:24 | 49 |
locm, я же сразу сказал что предпочитаю обычную отладку, через отладочный вывод, логи и т.п.
1
|
612 / 373 / 69
Регистрация: 21.09.2008
Сообщений: 1,277
|
|
17.01.2020, 21:34 | 50 |
1
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
|
|
18.01.2020, 02:13 | 52 |
locm, идея попробовать что-то кроме винды в любом случае хорошая.
Например, освоить работу в консоли, и осознать, что она гораздо эффективнее похода по менюшкам. Разумеется, в современной консоли, а не виндовой или тем более досовской.
1
|
18.01.2020, 02:25 | 53 |
Как вы выразились "поход по менюшкам" я выкладывал Как вызвать функцию через промежуток времени?
Покажите что-то аналогичное сделано через консоль. Посмотрим насколько будет эффективно. Можете привести пример? Чтобы не было недопонимания.
1
|
612 / 373 / 69
Регистрация: 21.09.2008
Сообщений: 1,277
|
|
18.01.2020, 08:17 | 54 |
locm, а Вы отладку делаете функциональными клавишами и их сочетаниями (F5, F7, F8, Shift+F5 и т.п.) или жмакаете на иконки в инструментальной панели?
1
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
|
|
18.01.2020, 11:14 | 55 |
Через код, естественно, без отладчика. То есть в консоли это будет
make && make prog bash, zsh и подобные для работы на уровне ОС. В специализированных программах свои реализации, например AutoCAD, LibreCAD (выбор команды и координаты можно задавать с клавиатуры, часто это удобнее, чем мышкой). Запись формул в Writer или Tex в текстовом виде по сравнению с тыканьем в иконки в MS Word. Между прочим, специально проверял, где-то тут на форуме есть результат: tex: 35 сек y=\lim_{x\rightarrow 0} {\frac{sin x}{x}} + \sum_{i=0}^{N} {a_i^{2 \cdot i+1}} writer: 30 сек y=lim from {x->0} {{sin x}over x} + sum from {i=0} to {N} {a_i^{2 cdot i +1}} word: 60 сек Ну и так далее.
1
|
18.01.2020, 14:41 | 56 |
Можно кнопками клавиатуры или экраными на панели инструментов. Как удобнее.
Речь про аппаратный отладчик если не забыли. Вы писали про GDB и отладку консольными командами. И как это связанно с GDB про который шла речь?
1
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
|
|
18.01.2020, 18:11 | 57 |
Угу, вот только не про использование, а про необходимость. Которой нет, как видите.
Никак, естественно. Вопрос-то был про GUI vs CLI.
1
|
18.01.2020, 18:22 | 58 |
Нет? Вот объясните ТС как пошагово выполнить код вашим методом чтобы найти место где он выполняется не так как должен? Выводить в USART номер каждой строки не самое лучшее решение. Это не очень наглядно и требует добавления кода в каждую строку. После отладки этот код становится не нужен и программу придется чистить от него.
Тогда зачем было об этом писать?
1
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,888
|
|
18.01.2020, 19:50 | 59 |
Вы уже в который раз требуете от меня что-то реализовать вашим способом. Не поверите, если бы я считал вашу точку зрения единственно верной, я бы с ней не спорил.
А про отладку уже говорили - отладочный вывод (хотя бы зажигание светодиода) в ключевых точках. Везде перед своим ответом я привожу цитату, на которую отвечаю.
1
|
18.01.2020, 20:01 | 60 |
Неэффективно по времени и ресурсах.
Вы предлагаете изучать предметы на ощупь с закрытыми глазами, а же предлагаю на них смотреть. Это более информативно и проще понять что перед нами. Это не ответ на мой вопрос.
1
|
18.01.2020, 20:01 | |
18.01.2020, 20:01 | |
Помогаю со студенческими работами здесь
60
Архивирование записей из БД, через определённый промежуток времени. Как лучше сделать? Как изменить фоновое изображение формы через какой-то промежуток времени? Как закрыть программу или весь документ через определенный промежуток времени Как сделать так чтобы диалоговое окно закрывалось через определенный промежуток времени? Как сделать так чтобы картинка могла меняться через определенный промежуток времени? Как сделать, чтобы текст выводился поочередно буква за буквой через определенный промежуток времени? Как запустить несколько окон браузера и закрыть каждое через свой, заданный для каждого, промежуток времени? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |