Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Чт апр 16, 2015 08:59:57
Модератор
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4568 Откуда: Планета Земля
Рейтинг сообщения:1 Медали: 1
OKF писал(а):
Слова то какие.))
Ну а что тут такого ? )) Вся проблема может заключаться в том, что человеку нужно дополнение к его уже существующей программе. Например, чтобы горел светодиод при приёме информации по UART'у. В таком случае, подобные примеры, уже не катят. Нужно основываться на уже реализованном алгоритме. По этому, проще объяснить на словах, чем давать готовые и возможно бесполезные куски кода.
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Чт апр 16, 2015 09:14:47
Встал на лапы
Зарегистрирован: Чт мар 05, 2015 07:14:58 Сообщений: 131
Рейтинг сообщения:0
Задержек в основном цикле быть не должно, иначе можно пропустить "важные события". В итоге должно выглядеть как то так: по UART приходят сообщения с переиодичностью в 100мс., если сообщение попадает под условие - горит светодиод, если сообщение "неправильное" или нет сообщений - светодиод гаснет.
Задержек в основном цикле быть не должно, иначе можно пропустить "важные события". В итоге должно выглядеть как то так: по UART приходят сообщения с переиодичностью в 100мс., если сообщение попадает под условие - горит светодиод, если сообщение "неправильное" или нет сообщений - светодиод гаснет.
по-моему, тут налицо непонимание общего алгоритма решения задачи. если я все понял верно, то решение такое: 1. после получения "правильного" сообщения включаем светодиод и запускаем таймера на 1 сек. 2. проверяем, истек таймер или нет 3. если истек - гасим светодиод. то есть где-то в нужном месте добавляется такой код:
Код:
if(resived_message()){ start_timer(1000) // 1000 мс led_on(); } if (!timer_is_running()) led_off();
таймер, разумеется, асинхронный
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Чт апр 16, 2015 11:19:32
Модератор
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4568 Откуда: Планета Земля
Рейтинг сообщения:1 Медали: 1
Посмотрите в сторону TMR2. Им можно отсчитывать ровные периодичные интервалы, без постоянной переустановки значений таймера. Сделайте на нём обработчик, вызывающийся каждую миллисекунду. В этом обработчике используйте счётчики-переменные (аля программные таймеры), для отсчётов всяческих интервалов. Как пример, для понимания:Спойлер
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Чт апр 16, 2015 11:51:41
Модератор
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4568 Откуда: Планета Земля
Рейтинг сообщения:1 Медали: 1
Ну, хотябы тем, что таймер занят не только для одного светодиода. Его можно использовать для множества подобных "программных таймеров". Например, будете Вы принимать данные от UART'а, он спасёт Вас для реализации таймаута. Ну или, например, можно туда-же динамическую индикацию воткнуть, или всякие кнопки опрашивать, ....
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Чт апр 16, 2015 12:19:44
Модератор
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4568 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Кстати, можно (даже будет более правильнее) добавить к счётчику, в пару, флаг события-таймаута и в основном цикле манипулировать этими флагами. А в прерывании только чисто обработка, без всяких лишних кодов, связанных с этими событиями. Например:СпойлерОбъявление собственного таймера. Функция установки таймера:
Код:
typedef struct{ unsigned int timer; unsigned time_out:1; }t_my_tmr; //---------- volatile t_my_tmr tmr_led; //---------- void set_timer(t_my_tmr* tmr, unsigned int val){ bit _gie = GIE_bit; GIE_bit = 0; // Не забываем про атомарный доступ ! tmr->timer=val; tmr->time_out=0; GIE_bit = _gie; } //----------
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Чт апр 16, 2015 17:44:08
Модератор
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4568 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Тут, в принципе, тоже самое и получается. Только к переменной добавляется ещё флаг, указывающий на окончание отсчёта. Просто не всегда бывает проверка переменной на ноль (т.б. проверка на окончание отсчёта) идёт после установки этой переменной. Она (проверка) может быть в любом месте цикла. А проверять, запускали ли мы её или нет - это ещё какой-то флаг нужен.
ЗЫ: вообще, я уже давно этой всей хренью не занимаюсь. Практически в каждом проекте использую ОСРВ, и не парюсь Даже просто для одного светодиода выделяю задачу, в которой собираю все флаги и мигаю там им
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Пн апр 20, 2015 08:21:07
Модератор
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4568 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Ну представьте, есть процессы, которые работают параллельно (псевдо-, конечно, но выглядят как параллельно). Очень удобно, особенно в подобных случаях, как у Вас. Вообще, понимание их оправданности и рациональности приходит с опытом их использования. Трудно это словами объяснить, но скажу одно - втянитесь, за уши потом от неё не оторвёшь Почитайте - http://www.pic24.ru/doku.php/osa/ref/intro
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Пн апр 20, 2015 10:04:34
Модератор
Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4568 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Я пользуюсь именно этой (OSA). Ось отличная. Простая и довольно-таки мощная. Для камней, которые она не поддерживает (например PIC32), пишу свои простенькие планировщики.
Заголовок сообщения: Re: Програмирование pic на СИ.
Добавлено: Пн апр 20, 2015 10:37:09
Встал на лапы
Зарегистрирован: Чт мар 05, 2015 07:14:58 Сообщений: 131
Рейтинг сообщения:0
Спасибо за информацию, обязательно займусь изучением этой ОСРВ. Но пока у меня немного другие проблемы, дело в том что , как я уже писал, опыта у меня мало, в связи с этим есть определённые трудности: написал я программу, вроде работает, но вот смотрю я на исходный код и кажется мне, что какой -то он убогий, неоптимальный, мне даже самому спустя некоторое время будет трудно в нём разобраться, как говорят - "быдлокод". Я понимаю, что это приходит с опытом, но все - же посоветуйте что почитать на эту тему?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 111
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения