2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
1

Горячий рестарт

25.09.2012, 00:46. Показов 16699. Ответов 45
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ну, вопрос не только по АВР, ибо это про Си. Пишу в привычный форум.

У меня тут траханина с модбасом, причем все очень припекает, ибо речь идет о работающем на объекте приборе. Виснет связь, а кто виноват - есть 2 прибора и 2 библиотеки. Вот за что я не люблю чужого юзать - потом как баран! Но тут вот так сложилось, 2 либы, обе чужие, где-то что-то сбоит...
Так как настоящей причины найти пока не удалось, придется затыкать чем-то. Заметил, что ресет моего МК снимает проблему. Для системы в целом этот перезапуск не страшен. Ага, значит нужно поймать, когда вис - и ресетнуть.
Програма на Си.

Ну, поставил ловушки. Допустим, будет в проге точка, где станет ясно: связь в жопе, нужен перезапуск. Теперь думаю, как лучше ресетнуть:

- есть ухищрения, чтобы именно с самого начала, как хард ресет. Об этом читал когда-то, но по диагонали. Не очень нужно, ИМХО, так уж с нулевого адреса. Да я и не знаю, как это красиво сделать

- можно тупо повторить код, который у меня в main() стоит до петли moymtoop. Но там что: инициализация портов, таймеров, памяти, тесты, установка параметров из энергонезависимой памяти. Затем инициализация модбасного стека. Вроде как тоже дофига всего. Не думаю, что это нужно.

- можно самое малое: проинициализировать модбас.

Что вы в таких случаях делаете? Как считается кашернее? Прожечь 3 варианта и пробовать - долго. Там эффект может проявиться далеко не сразу.
Поделитесь мыслями вслух. Да, и как правильно из Си шугануть на ноль (по первому варианту) - тоже подскажите, плз!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.09.2012, 00:46
Ответы с готовыми решениями:

Рестарт устройства при создании нового подключения
Простейший код, мигающий диодом и посылающий в СОМ символ раз в секунду: int bytesSent; void...

Горячий backup
Здравствуйте! Как сделать горячий backup всей БД вместе с данными о пользователях(логин, пароль)?...

Горячий ноут
Здравствуйте, уже с месяц наблюдаю у ноута странный температурный режим... сильно грееться....

Горячий резерв
Доброго времени суток. Необходимо реализовать горячий резерв двух компьютеров с Windows Server 2008...

Горячий Radeon 9800 SE
Добрый день. Купил за бесценок бу видеокарту Radeon 9800 SE. Вставил в материнку, включил,...

45
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
01.05.2013, 16:55 41
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от drvtos
Твое замечание про общеизвестность факта обнуления всей оперативной памяти я не принимаю.
Брат... мы видимо не до конца понимаем друг друга.....
Я не говорю об аппаратных свойствах контроллера, при ресете очищать ОЗУ или РОН, это ежу понятно, что там могет быть все что угодно...
Я говорю о функции компилятора, который генерит программный код так, что перед началом использования майна, все глобальные переменные (не вся оперативка) очищены..... http://www.tstu.ru/r.php?r=education.el ... 995&p=h164

Цитата Сообщение от drvtos
Во-вторых, мой путь - не надеяться на то, что импульс внутреннего сброса (именно он вырабатывается аппаратно от ресета, в т.ч. и от вочдога, о котором говорит уважаемый Леанид Ивинавич) чЮжесным образом что-то там очистит.
Ты опять про тоже....
На сам деле хоть хардресет, хоть софтресет, программа по любому пройдет участок кода, сгенерированный компилятором, где будут очищены все глобальные переменные. И на мой взгляд это не зависит от варианта сброса.....

Цитата Сообщение от drvtos
Это более безопасный путь, заставляющий меня думать о начальных значениях ВСЕХ переменных, как о хаосе.
Вот насчет ВСЕХ переменных я речь и не веду... А насчет глобальных, можеш имхо изменить свою точку зДрения.....
Дело конечно не в том что, что то там будет тратится впустую, при ненужном обнулении вручную глоб переменных, а скорее в том что приятнее, когда лучше знаеш какие то глубокие процессы.....
0
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
01.05.2013, 17:03 42
Цицирую вопрос одного уважаемого человека:

при программном ресете (отправляем на 0) глобальные переменные инициализируются автоматически нулем, или нет?
Отвечаю: они инициализируются той программой. которую ты с компилятором записал. То есть, он свое очистит, ты свое присвоишь (там, где явно пишешь).
А "автоматически" сбрасывается х.з. что и на это мы дружно не надеемся.
Верно?
0
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
01.05.2013, 17:09 43
Ну вот и вышли на чистую воду.....

Я забыл вставить слово:
при программном ресете (отправляем на 0) глобальные переменные КОМПИЛЯТОРОМ инициализируются автоматически нулем, или нет?
а ты в принципе согласен:
Цитата Сообщение от drvtos
они инициализируются той программой. которую ты с компилятором записал. То есть, он свое очистит
0
1 / 1 / 0
Регистрация: 01.02.2010
Сообщений: 2,010
01.05.2013, 17:18 44
Цитата Сообщение от itysiy
Кстати компиляторы ругаются варнингами, когда они видят вероятность использования не инициализированной переменной.
Кста... это касается только локальных переменных, а вот глобальные переменные не могут быть неизвестными, либо мы туда пихаем чтото свое, либо компиль туда пихает 0.....
0
0 / 0 / 0
Регистрация: 14.10.2011
Сообщений: 806
01.05.2013, 19:15 45
При включении питания содержимое всех РОН и ячеек ОЗУ не определённое, другое дело РВВ. При старте все переменные проходят инициализацию. При передаче управления по нулевому адресу необходимо сперва глобально запретить прерывания , сбросить все разрешения прерываний от используемых устройств, обнулить соответствующие им флаги на тот случай, если какое то застряло в очереди на обработку, если используются таймеры остановить их и обнулить прескаллер и счетный регистр, после чего можно смело передавать управление нулевому вектору. Все переменные и РВВ будут проинициализированы в штатном порядке. Может возникнуть проблема при ините некоторой внешней периферии, например ЛЦД на HD44780, тут полезно заглянуть в причину сброса и если это не по включению питания, то инит пропустить
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
01.05.2013, 21:37 46
Цитата Сообщение от ShodS
глобальные переменные не могут быть неизвестными, либо мы туда пихаем чтото свое, либо компиль туда пихает 0.....
Не совсем так.
В программах на Си обнулением занимается стартапный код. При использовании своего (а не автоматически сгенерированного средой компиляции) стартапа МОЖНО обойтись без обнуления ОЗУ (совсем или частично), и содержимое ОЗУ останется тем же, что и до ресета. Любого ресета, в том числе по watchdogу.

Некоторые IDE (например, CVAVR) позволяют регулировать адрес, с которого начинается обнуление. Это ещё один способ сохранить значения глобальных переменных при сбросе.

Я делал проекты, где AVR уходил в глубочайший сон, и только watchdog его периодически будил - при этом все переменные оставались нетронутыми, а флаг "risit reason == watchdog" говорил программе, что это не начало, а продолжение работы.
0
01.05.2013, 21:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2013, 21:37
Помогаю со студенческими работами здесь

Горячий радиатор процессора
Всем привет. История такая комп вырубается после непродолжительной работы. Трогаю рукой радиатор...

Горячий блок питания!
Всем привет, недавно мне мастер собрал комп. Все было бы отлично, если бы не был горячим в играх...

Как импортировать горячий дамп?
Проблема - Block Corrupted. Как восстановить? Flash Recovery не работает. RMAN не может...

Gigabyte G1 Gaming 3GB горячий бэкплейт
Приветствую пользователей форума) Даже не знаю, проблема это или нет, но все равно очень странно...

Intel Pentium 4 3.0 Prescott постоянно горячий
Всем привет)))))у меня вот такая проблема-есть проц Intel Pentium 4 3.0 Prescott.так...

Ноутбук отключается (горячий, но показатели не превышены)
Всем привет, Имеется проблема. Ноутбук Lenovo SL510 начал в жаркие дни (я в отпуске в жаркой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
46
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru