На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
    > Зависание микроконтроллера , ATMega 128
      smalcom извини за подозрения... новые устройства...в смысле развел новые платы?
      Похожий эффект можно получить при большом расстоянии между кварцем...кондерами и процом...
      если растояние и так минимальное... рискни и припояй кондеры прям к ногам контроллера...
      Сообщение отредактировано: hot_ice -
        сдается мне, что полтергейст зажат в узкий круг. вернусь из командировки и(надеюсь, что звонков от заказчика не будет) ) покопаю глубже. всем огромное спасибо за участие(подчерпнул дополнительные знания). приеду - с меня плюсики.
          А мне сдается, что в старых платах была старая прошивка :rolleyes: старая -- рабочая, а в новых платах ее чуть-чуть подправили и появились таки глюки.

          Могу даже предположить в чем проблема: все обращения к переменным в два-четыре байта (short, int, long)(которые используются внутри любого из прерываний) нужно в теле основной программы обрамлять запретом прерываний.

          Поскольку контроллер восьмиразрядный, то при попадании в прерывание между обработкой отдельных байт одной переменной, один из байт этой переменной (при выходе из прерывания) может затираться неверным значением. Эта ситуация может быть незаметной или проявляться очень редко, а при изменении кода (в любом месте программы) изменятся временные соотношения между частями программы и эта лажа может вылезти явно.

          volatile в данной ситуации не работает (под IAR-ом и, вроде, в соответствии со стандартом С) поскольку операции с многобайтными переменными не атомарные (на восьмиразрядных контроллерах)

          Дважды сталкивался с такой фигней на мегах под иар-ом

          smalcom, тот самый счетчик, который считает период мигания светодиода, случаем не int?
            Цитата
            А мне сдается, что в старых платах была старая прошивка :rolleyes: старая -- рабочая, а в новых платах ее чуть-чуть подправили и появились таки глюки.

            второй раз я нарушил старое правило разработчика - "Работает? НИ...Я НЕ ТРОГАЙ"
            была произведена замена avrtools - пакет кторый я собираю - замена произошла на gcc-4.3.0-binutils-2.18-glibc1.6.1... и это ошибка, которую я второй раз допускаю((( не бейте, я хотел как лучше.

            Цитата
            то при попадании в прерывание между обработкой отдельных байт

            новый компилятор(или glibc) изменили пролог и эпилог(помню как оптимизация пагубно влияет на работу контроллера)
            ЗЫ. оптимизацию не включал - новый компилятор все решил за меня

            Цитата
            случаем не int

            на контроллерах появилась привычка(за которую брат програмист на PC дает люлей)) ) - писать typedef: word(unsigned short int), byte(unsigned char) итд.


            PPS. да, кстати результаты тестов будет видно утром после ночной прогонки... на всякий случай у меня на домашней тачке остались старые хексы))). а вообще всем биг сенк помимо темы и другие интересные вещи узнал
            Сообщение отредактировано: smalcom -
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0266 ]   [ 15 queries used ]   [ Generated: 28.04.24, 13:10 GMT ]