Всем доброго времени суток.
Возникла у меня проблема:
Есть ATmega16L. Подключена через MAX232CPE к COM-порту компьютера.
Компьютер управляет портами МК (через ключи подключена нагрузка) отправляя ком-порт соответствующие команды.
Собственно, все работает хорошо, но иногда, после очередной команды, повисает компьютер (наглухо - только вкл/выкл). Что может быть???
Кстати, МК подключен к компу через USB2COM переходник.
Карма: 4
Рейтинг сообщений: 22
Зарегистрирован: Чт мар 05, 2009 05:31:16 Сообщений: 622 Откуда: г. Кемерово
Рейтинг сообщения:0
Сам по себе порт комп завесить не может, а вот программа которая работает с портом, может. В опрос порта , надо добавить тайм аут, на случай потери части байтов. Возможно, при потере части байт, программа продолжает их ждать.
Правильно сказали - повисать должна программа во время работы с портом. Но если работа сделана правильно, т.е. ожидание, передача данных и т.д реализовано в отдельных потоках - зависаний не будет.
А если программа вешает всю систему, то... выкинь эту программу, и систему за одно.
Карма: 16
Рейтинг сообщений: 14
Зарегистрирован: Вс июн 01, 2008 00:17:35 Сообщений: 4673 Откуда: Я всего лишь плод вашего воображения...
Рейтинг сообщения:0 Медали: 1
ploop писал(а):
Правильно сказали - повисать должна программа во время работы с портом. Но если работа сделана правильно, т.е. ожидание, передача данных и т.д реализовано в отдельных потоках - зависаний не будет. А если программа вешает всю систему, то... выкинь эту программу, и систему за одно.
Ага. Меня вообще всегда это поражало - запускаешь какую-нибудь хрень в потоке и нормально. Хотя по факту оно хоть в основном, хоть в неосновном потоке висеть должно одинаково. А вообще, по чесноку, зависания в системах с вытесняющей многозадачностью быть не должно никак.
Ага. Меня вообще всегда это поражало - запускаешь какую-нибудь хрень в потоке и нормально. Хотя по факту оно хоть в основном, хоть в неосновном потоке висеть должно одинаково.
Это как так?
Что такое зависание? Программа работает, но не реагирует на команды пользователя. А не реагирует потому, что окно (или что там еще, не важно) прорисовывается и обрабатывает события (команды) пользователя в том же потоке, что и основная логика. Вот и весь секрет
Вот если разделить интерфейс и логику (подозреваю, что так и сделано в *nix системах), то это окно хоть убрать с глаз долой можно, пока программа не соизволит "отвиснуть"
Карма: 16
Рейтинг сообщений: 14
Зарегистрирован: Вс июн 01, 2008 00:17:35 Сообщений: 4673 Откуда: Я всего лишь плод вашего воображения...
Рейтинг сообщения:0 Медали: 1
Цитата:
Что такое зависание? Программа работает, но не реагирует на команды пользователя. А не реагирует потому, что окно (или что там еще, не важно) прорисовывается и обрабатывает события (команды) пользователя в том же потоке, что и основная логика. Вот и весь секрет
Э нет, это-то понятно, что если прога думает, то интерфейс висит. Это решается распоточиванием еще с каменного века (как и печать, и сохранение и все остальное). Суть в другом - иногда потоки (или процессы) зависают намертво по одним им известным причинам, причем повисает почти сразу и вся система, хотя казалось бы - отобрал в нужный момент системное время у процесса и все. Ан нет - пишут, что он там вовсю чего-то молотит. Причем в винде даже в командную строку не зайти, в линуксе хоть иногда можно Борна запустить да закиллить гада. Вот и непонятно иногда - как так ОСи пишут, что какие-то ошибки к такому вот приводят. Понятно, что эти гадкие процессы себе могли приоритету запросить немеряно, так ведь не повод......
Понятно, что эти гадкие процессы себе могли приоритету запросить немеряно, так ведь не повод......
Ну, значит ошибка. Любой косяк внутри (недогляд программиста, например, ошибка в работе с указателями или... да много чего придумать можно) может привести к повреждению памяти внутри процесса, он и запросит приоритет повыше и тут же зациклится... Но это догадки конечно.
А я вот одного не понимаю, для чего нужен потокам приоритет реального времени? Баловался с ним, такое ощущение, что даже прерывания у процессора отключаются, всё время отдаётся этому потоку, короче система становится парализована...
Карма: 16
Рейтинг сообщений: 14
Зарегистрирован: Вс июн 01, 2008 00:17:35 Сообщений: 4673 Откуда: Я всего лишь плод вашего воображения...
Рейтинг сообщения:0 Медали: 1
ploop писал(а):
Баловался с ним, такое ощущение, что даже прерывания у процессора отключаются, всё время отдаётся этому потоку, короче система становится парализована...
А насчет *nix. Там треды применяются намного реже чем в винде, считается что там проще запустить еще десяток-другой процессов, ибо хорошо развита система межпроцессного взаимодействия
Карма: 16
Рейтинг сообщений: 14
Зарегистрирован: Вс июн 01, 2008 00:17:35 Сообщений: 4673 Откуда: Я всего лишь плод вашего воображения...
Рейтинг сообщения:0 Медали: 1
BCluster писал(а):
А насчет *nix. Там треды применяются намного реже чем в винде, считается что там проще запустить еще десяток-другой процессов, ибо хорошо развита система межпроцессного взаимодействия
Ну это еще как посмотреть. Учитывая, что потоки там очень просто устроены, проблем нет.
Нет. Автор не завис. Автор чинил свой комп (не связано с мегами).
Насчет зависаний вроде разобрался: действительно где-то ждало считывание из порта, когда там ничего не было.
Встала другая проблема:
заливаю периодически прошивку (процесс отладки).
После очередного "залива" мк стал плохо принимать с ком-порта.
Передаешь ему одну команду, а он делает по другой.
Долго пытался понять "почему?". Вставил другой мк с той же прошивкой - все работает. Хотя оба мк периодически меняю туда-сюда (до этого проблем не было).
Такое бывает с мегами?
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения