Здравствуйте
Не могу понять как будет более правильно сделать: необходимо по циклу посылать в кан 15 команд с интервалом 100мс, при этом когда идет 100мс ожидания надо опросить опять же по кану два адреса и если содержимое первых двух байт в посылке совпадет то зажечь на время жизни посылки светодиод. Изначально сделал вообще неправильно через делей, но потом дошло что система всегда занята и опросить уже кан она не сможет, начал разбираться вышел на две ветки решения этой проблемы задержки с помощью миллис либо организация двух потоков один для выдачи посылок, другой для опроса шины. В блоке выдачи посылок надо сделать как-то так чтобы одна посылка ушла потом управление передается на поток опроса, как 100мс прошло обратно в потом посылок, но запуститься уже следующая посылка (это наверное можно через if else только не совсем пойму как перескок на следующую посылку сделать)
@VladimirSh
какую ардуину используете ?
Nano c с каншилдом (но есть еще в запасах Uno)
Контроллер на плате Нано - однопотоковый. Все способы организации на нем многопоточности - программные, по сути основанные на той же миллис.
Почитай описание и примеры библиотеки от Деда.
И я всегда тут (пока не помер), спрашивай
Спасибо ребята! Попытаюсь разобраться чтобы по мелочам не беспокоить, если упрусь опять буду писать. Если ардуина не совсем подходит, может есп32 или стм32 посмотреть? или там еще сложнее к освоению будет?
Гайвера почитай, у него какие-то Task-и есть
Спасибо! Хорошо
Почему не подходит? По условиям задачи тебе два потока и не нужно - шина-то КАН у тебя все равно одна. А значит хоть 20 потоков заведи, два сообщения одновременно ты не никак не отправишь.
Родителей почитать надо! И Б…га! А не Гивера…
Да верно, и кан один и шилд одноканальный и запись или чтение может быть только одно.
В этой задаче никакие таски/потоки и т.д. не нужны.
“Blink w/o delay” и всё.
А мы не можем понять на каком железе Вы это делаете. От этого, собсна во многом зависит ответ на Ваш вопрос.
post #4
Железо UNO+Шилд2515.
Да я уже подумал, как выше подсказали наверное самое простое(возможно не самое изящное и правильное) будет так:
-Посылка в Кан n1
-Ссылка на подпрограмму опроса шины на предмет наличия нужной посылки и если да то зажигаем диод с периодом опроса, если нет то снова опрос.
-Посылка в кан n2
-Ссылка на подпрограмму опроса шины на предмет наличия нужной посылки и если да то зажигаем диод с периодом опроса, если нет то снова опрос.
……
….
-Посылка в кан n15
-Loop
Void подпрограмма опроса шины
10 опросов с периодом 10мс
Я отвечал на стартовый пост, еще не прочитав всю тему.
Это к тому, что вопросы надо задать так, чтобы не тянулся шлейф уточнений на десятки постов.
Помните моё слово, если Вы сейчас сядете писать программу, Вы её не напишете - будете очень долго трахаться пока хоть как-то не заработает и всё равно будет глючить.
Но что-то же нужно делать, с чего-то начать. Пока на ум пришло такое решение.