|
|
  |
Зависание микроконтроллера, ATMega 128 |
|
|
|
Apr 16 2008, 06:29
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(smalcom @ Apr 15 2008, 23:08)  чота с плюсами лажа какаето А это не исходники.ру  тут этого баловства не особенно. Судя по тому, что там написано было - надо попробовать ещё прошить старые платы прошивками, скомпилированными новым компилятором и наоборот. Если где-то шалит какое-то прерывание (обработчик есть, но прерывание не сбрасывается и лупит дальше), то оно может очень сильно тормозить ход основной программы - грубо, в число тактов выполнения обработчика раз (в то время, когда глобально прерывания разрешены, между прерываниями будет проскакивать по одной команде основной программы). Хотя... "1 из 10 штук завис" - это как-то не очень похоже на прошивку.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Apr 17 2008, 20:33
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
Цитата(Dog Pawlowa @ Apr 17 2008, 23:54)  Не нужно давать вредные советы - можно доиграться вплоть до потери программы во флэши. это как?... я тогда просто не понимаю что происходит при отключении питания... мне казалось, что просто прекращается работа генератора и сё... а как может потеряться программа во флэши??
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Apr 18 2008, 06:40
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(Mozart @ Apr 17 2008, 23:33)  это как?... я тогда просто не понимаю что происходит при отключении питания... мне казалось, что просто прекращается работа генератора и сё... а как может потеряться программа во флэши?? Не просто. При снижении питания может произойти все что угодно - например может неправильно декодироваться команда. Например вместо безобидной пересылки из регистра в регистр начнется стирание страницы флэш-памяти. И это неоднократно подтверждено жизнью. Поэтому контроллер должен быть обязательно сброшен при напряжении питания ниже критического.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Apr 18 2008, 16:00
|

Частый гость
 
Группа: Свой
Сообщений: 154
Регистрация: 16-08-07
Из: Москва
Пользователь №: 29 829

|
Цитата(Dog Pawlowa @ Apr 18 2008, 10:40)  Не просто. При снижении питания может произойти все что угодно - например может неправильно декодироваться команда. Например вместо безобидной пересылки из регистра в регистр начнется стирание страницы флэш-памяти. И это неоднократно подтверждено жизнью. Поэтому контроллер должен быть обязательно сброшен при напряжении питания ниже критического. у мну такого ещё не разу не было... учту... сенкс
--------------------
все косяки, даже о которых не знает сам разработчик, - мои
|
|
|
|
|
Apr 18 2008, 16:22
|
Группа: Новичок
Сообщений: 6
Регистрация: 9-01-07
Пользователь №: 24 231

|
Цитата(Dog Pawlowa @ Apr 18 2008, 10:40)  При снижении питания может произойти все что угодно... ППКС. У меня дома лежит tiny со стертым ID
|
|
|
|
|
Apr 18 2008, 17:06
|
Частый гость
 
Группа: Свой
Сообщений: 185
Регистрация: 5-05-06
Из: Ekaterinburg, Russia
Пользователь №: 16 821

|
Было такое же на ATmega8535. Правда стоял на плате в одной сборке с усилителями ШИМ (2 канала по 5 ампер)  . Решилось все экранированием платы (под ней силовые провода на нагрузку лежали).
--------------------
Чудес не бывает - бывает мало знаний и опыта!
|
|
|
|
|
Apr 19 2008, 08:29
|
Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782

|
Цитата(Dog Pawlowa @ Apr 18 2008, 10:40)  Не просто. Поэтому контроллер должен быть обязательно сброшен при напряжении питания ниже критического. Полностью согласен. При этом, из собственного опыта, не доверяю ни каким BODам, а ставлю внешний супервизор. +20 рублей, но про такие проблемы забываешь раз и навсегда.
|
|
|
|
|
Apr 26 2008, 14:55
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(smalcom @ Apr 24 2008, 20:15)  да, кстати, проблема была в том, что прогу скомпилил новым набором утилит - gcc-4.3.0, binutils-2.18, glibc-1.6; раньше были gcc-3.4.0, binutils-2.17, glibc-1.4 И всё-таки, как это может влиять не на "тотальное" зависание, а на "1 из 10". Что касается разницы между 3.х и 4.х, то 4.х гораздо агрессивнее оптимизирует работу с не-volatile-переменными, скажем, Цитата #include <avr/io.h> #include <avr/interrupt.h>
unsigned cnt;
unsigned foo(void) { int tmp; uint8_t sr = SREG; cli(); tmp = cnt; SREG = sr; return tmp; } Успешно компилируется в Цитата foo: /* prologue: frame size=0 */ /* prologue end (size=0) */ in r24,95-0x20 /* #APP */ cli /* #NOAPP */ out 95-0x20,r24 lds r24,cnt lds r25,(cnt)+1 /* epilogue: frame size=0 */ ret Т.е. по сути в Цитата uint8_t sr = SREG; cli(); SREG = sr; return cnt; Что вполне соответствует стандарту  , cnt тоже надо объявить volatile, чтобы сохранился интересующий порядок операций. Цитата(Flasher @ Apr 26 2008, 00:08)  Могу рассказать в чем секрет зависания устройства. Будете долго удивляться. - Это компьютерный блок питания. Удивляюсь  Вот чего не знал, того не знал... И как дурак уже 15 лет на столе держу в качестве источника для отлаживаемых плат компьютерные блоки питания  Если место позволяет - часто даже на плате кроме штатного разъёма ещё штыри заложены под флопарный разъёмчик, чтобы переходник не был нужен. И ничего не "рестартует в лучшем случае", включая сам комп, внутри которого стоит такой же блок питания. И изделия серийные выпускаются в компьютерном корпусе и с компьютерным блоком питангия - там и микроконтроллеры, и ПЛИС, и АЦП горстями (ну да, по питанию АЦП фильтры дополнительные). Может это? Прокладочку поменять?
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Apr 26 2008, 19:30
|

Группа: Новичок
Сообщений: 4
Регистрация: 12-01-07
Пользователь №: 24 365

|
Цитата(smalcom @ Apr 14 2008, 17:27)  Наблюдается следующая картина: казалось бы без всяких причин виснет контроллер, если дотронуться металическим предметом до ножек кварца, то или пускается дальше или уходит в перезагрузку, или сделает еще пару шагов и опять виснет. Выводит его из такого состояния только кнопка резет или сброс питания. контроллер - ATMega128-16AU. Программа раньше работала, проблеиы появились только в текущем месяце на новых устройствах. Не знаю на кого грешить((
PS. менял кварц - непомогло PPS. частота - 14.7456МГц Попробуйте выяснить кто виноват. Для это: - Запитайте устройство не от БП (господин Flasher правильно высказал свое мнение по поводу компьтерного БП - помойка там конкретная); - Если не полегчает, то отключите от источника питания платы все, что может приводить к "просадкам" питания (в идеале - оставить только проц и светодиод какой нибудь) - Правильно выставьте бит CKSEL. Посмотрите осцилом на амплитуду на кварце - должна быть не менее 1,5В... - Отключите супервизор, RESET повесьте прям на ногу питания МК Кстати, как схема питания реализована? Было у нас такое дело - производили устройство, все было ОК.... Затем пошел серийный брак - устройство вроде работает, но после установки на транспорт - сбойт... Виснет, перестает работать, перезапускается.... Думал долго, перепахал всю плату - не помогло. А дело было вот в чем. Использовали программатор ChipProg который стоял на компьютере с которого прошивались изделия. В один прекрасный или ужасный день наши герои - радиомеханики переставили винду, поставили какую то "тюнингувую модель ручной сборки WinXP. С этого дня брак и пошел. Хотя все отлично прошивалось и тестировалось...
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|