Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.138.110.119] |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
smalcom извини за подозрения... новые устройства...в смысле развел новые платы?
Похожий эффект можно получить при большом расстоянии между кварцем...кондерами и процом... если растояние и так минимальное... рискни и припояй кондеры прям к ногам контроллера... |
Сообщ.
#17
,
|
|
|
сдается мне, что полтергейст зажат в узкий круг. вернусь из командировки и(надеюсь, что звонков от заказчика не будет) ) покопаю глубже. всем огромное спасибо за участие(подчерпнул дополнительные знания). приеду - с меня плюсики.
|
Сообщ.
#18
,
|
|
|
А мне сдается, что в старых платах была старая прошивка старая -- рабочая, а в новых платах ее чуть-чуть подправили и появились таки глюки.
Могу даже предположить в чем проблема: все обращения к переменным в два-четыре байта (short, int, long)(которые используются внутри любого из прерываний) нужно в теле основной программы обрамлять запретом прерываний. Поскольку контроллер восьмиразрядный, то при попадании в прерывание между обработкой отдельных байт одной переменной, один из байт этой переменной (при выходе из прерывания) может затираться неверным значением. Эта ситуация может быть незаметной или проявляться очень редко, а при изменении кода (в любом месте программы) изменятся временные соотношения между частями программы и эта лажа может вылезти явно. volatile в данной ситуации не работает (под IAR-ом и, вроде, в соответствии со стандартом С) поскольку операции с многобайтными переменными не атомарные (на восьмиразрядных контроллерах) Дважды сталкивался с такой фигней на мегах под иар-ом smalcom, тот самый счетчик, который считает период мигания светодиода, случаем не int? |
Сообщ.
#19
,
|
|
|
Цитата А мне сдается, что в старых платах была старая прошивка старая -- рабочая, а в новых платах ее чуть-чуть подправили и появились таки глюки. второй раз я нарушил старое правило разработчика - "Работает? НИ...Я НЕ ТРОГАЙ" была произведена замена avrtools - пакет кторый я собираю - замена произошла на gcc-4.3.0-binutils-2.18-glibc1.6.1... и это ошибка, которую я второй раз допускаю((( не бейте, я хотел как лучше. Цитата то при попадании в прерывание между обработкой отдельных байт новый компилятор(или glibc) изменили пролог и эпилог(помню как оптимизация пагубно влияет на работу контроллера) ЗЫ. оптимизацию не включал - новый компилятор все решил за меня Цитата случаем не int на контроллерах появилась привычка(за которую брат програмист на PC дает люлей)) ) - писать typedef: word(unsigned short int), byte(unsigned char) итд. PPS. да, кстати результаты тестов будет видно утром после ночной прогонки... на всякий случай у меня на домашней тачке остались старые хексы))). а вообще всем биг сенк помимо темы и другие интересные вещи узнал |