-
- У меня обычный биг-луп. OS_base - мой. Совпало с чем-то распространенным? - Скрипач(20.09.2013 09:13)
- Да просто подумалось что если уж реализована OS, то точно надо бы защитить регистры EEAR/EEDR от порчи в прерываниях. Кстати, почему-то встроенная функция __eeprom этого не делает( - Юра(20.09.2013 09:32,
)
- И что делать В ПРЕРЫВАНИИ,если EEPROM занята? - Скрипач(20.09.2013 09:34)
- Ну как что? Если занята - будет просто ждать. Прямо в прерывании. У Вас же стоит while(EECR & _BV(EEWE)); Подождёт освобождения, дождётся - и испортит EEAR/EEDR - Юра(20.09.2013 09:42,
)
- Только я не об занятости. Я о простейшей ситуации когде ничего не занято. Вот Вы хотите в фоновой программе прочитать EEPROM. Только установили значение EEAR - и произошло прерывание, где тоже читается EEPROM. А результате EEAR испортится. - Юра(20.09.2013 09:59,
)
- Можете запретить прерывания до установки EEAR. Но лучше не читать eeprom в прерывании вообще. - Apтём(20.09.2013 14:32)
- Я понимаю, Вы обалденно умные ребята. Но объясните мне, почему невинную трехтактовую операцию чтения EEPROM нельзя в прерывании выполнять? Это откуда такие новости-то?)) Если речь про запись не идёт а только про чтение - то почему нет? Смешно, но Юра(506 знак., 20.09.2013 18:54,
)
- Как-то неправильно так делать: Apтём(583 знак., 20.09.2013 22:52)
- 1 "А если запись уже запущена?Дожидаться окончания её в прерывании?" - Речь про запись не идет, специально сказал. Но если все же - это как Вам в данный момент удобнее где глухо ждать 4 мс. Можно ждать в фоне, можно и в прерывании. Когда пошла Юра(784 знак., 20.09.2013 23:35,
)
- Зачем переключателю контекстов EEPROM? Трудно такое прадставить...мне во всяком случае. Apтём(225 знак., 20.09.2013 23:48)
- 1 "А если запись уже запущена?Дожидаться окончания её в прерывании?" - Речь про запись не идет, специально сказал. Но если все же - это как Вам в данный момент удобнее где глухо ждать 4 мс. Можно ждать в фоне, можно и в прерывании. Когда пошла Юра(784 знак., 20.09.2013 23:35,
- Как-то неправильно так делать: Apтём(583 знак., 20.09.2013 22:52)
- Я понимаю, Вы обалденно умные ребята. Но объясните мне, почему невинную трехтактовую операцию чтения EEPROM нельзя в прерывании выполнять? Это откуда такие новости-то?)) Если речь про запись не идёт а только про чтение - то почему нет? Смешно, но Юра(506 знак., 20.09.2013 18:54,
- А не надо в прерывании читать еепром и делать другие странные вещи. - fk0(20.09.2013 10:43)
- Угу. А если в прерывании находится диспетчер задач, то получается, что читать EEPROM вообще ни в какой задаче нельзя?)) - Юра(20.09.2013 19:02,
)
- Там где есть диспетчер задач -- там есть критические секции, мьютексы и всё такое. А в прерывании не нужно, ни к чему оно. Почему бы в прерывании ещё HTTP GET-запрос не сделать куда-то в облачный сервер? - fk0(20.09.2013 19:12)
- Почитайте мой начальный пост. У него include OS.h вставлен - там может всё что угодно быть. Отсюда всё и родилось. - Юра(20.09.2013 19:18,
)
- Паранойя у вас. Отнеситесь к этому серьезно. Запускать не стоит. - Скрипач(20.09.2013 21:33)
- Угу. Контроллер дает выбор: паранойя vs пофигизм. Когда ЛЮБОЕ прерывание вклинится между установками _BV(EEMWE); и _BV(EEWE); - сразу станете параноиком :) - Юра(20.09.2013 22:03,
)
- Спасибо, поправил. - Скрипач(20.09.2013 22:14)
- Опять скажете параноик, но я скорее перфекционист, что не лучше параноика:) Говорю Вам прямо: с помощью такой критической секции Булава знаете куда улетит? Вы же в конце директивно разрешаете прерывания! А если эта функция вызвана ВО ВРЕМЯ Юра(213 знак., 20.09.2013 23:57,
)
- вообщем неправильно, но видимо предполагается что запись в прерывании не запускается. А Значит исполняется основная программа и прерывания должны быть рзрешены за пределами критической секции. - Apтём(21.09.2013 00:29)
- Че-та не пойму... Уже исправлено или я не увидел что все в норме? Прошу прощения, глаза подвели. - Юра(21.09.2013 00:08,
)
- Вы проскочили в четыре такта ;) Пока вы писали комментарий, я уже сам исправил. - Скрипач(21.09.2013 10:26 - 10:34)
- Опять скажете параноик, но я скорее перфекционист, что не лучше параноика:) Говорю Вам прямо: с помощью такой критической секции Булава знаете куда улетит? Вы же в конце директивно разрешаете прерывания! А если эта функция вызвана ВО ВРЕМЯ Юра(213 знак., 20.09.2013 23:57,
- Спасибо, поправил. - Скрипач(20.09.2013 22:14)
- Угу. Контроллер дает выбор: паранойя vs пофигизм. Когда ЛЮБОЕ прерывание вклинится между установками _BV(EEMWE); и _BV(EEWE); - сразу станете параноиком :) - Юра(20.09.2013 22:03,
- Паранойя у вас. Отнеситесь к этому серьезно. Запускать не стоит. - Скрипач(20.09.2013 21:33)
- Почитайте мой начальный пост. У него include OS.h вставлен - там может всё что угодно быть. Отсюда всё и родилось. - Юра(20.09.2013 19:18,
- Там где есть диспетчер задач -- там есть критические секции, мьютексы и всё такое. А в прерывании не нужно, ни к чему оно. Почему бы в прерывании ещё HTTP GET-запрос не сделать куда-то в облачный сервер? - fk0(20.09.2013 19:12)
- +1. Скрипач(27 знак., 20.09.2013 12:34)
- ??? mr-x(24 знак., 20.09.2013 14:36)
- В начале раз пять, а потом сжечь. - fk0(20.09.2013 14:42)
- ??? mr-x(24 знак., 20.09.2013 14:36)
- Угу. А если в прерывании находится диспетчер задач, то получается, что читать EEPROM вообще ни в какой задаче нельзя?)) - Юра(20.09.2013 19:02,
- Можете запретить прерывания до установки EEAR. Но лучше не читать eeprom в прерывании вообще. - Apтём(20.09.2013 14:32)
- Только я не об занятости. Я о простейшей ситуации когде ничего не занято. Вот Вы хотите в фоновой программе прочитать EEPROM. Только установили значение EEAR - и произошло прерывание, где тоже читается EEPROM. А результате EEAR испортится. - Юра(20.09.2013 09:59,
- Ну как что? Если занята - будет просто ждать. Прямо в прерывании. У Вас же стоит while(EECR & _BV(EEWE)); Подождёт освобождения, дождётся - и испортит EEAR/EEDR - Юра(20.09.2013 09:42,
- И что делать В ПРЕРЫВАНИИ,если EEPROM занята? - Скрипач(20.09.2013 09:34)
- Да просто подумалось что если уж реализована OS, то точно надо бы защитить регистры EEAR/EEDR от порчи в прерываниях. Кстати, почему-то встроенная функция __eeprom этого не делает( - Юра(20.09.2013 09:32,
- У меня обычный биг-луп. OS_base - мой. Совпало с чем-то распространенным? - Скрипач(20.09.2013 09:13)