‮Сдвиг по фазе (kincajou) wrote,
‮Сдвиг по фазе
kincajou

Глюконат

Есть некая плата на основе AVR. К ней подключено два однотипных устройства, различающихся только адресом. Конкретный адрес того устройства, с которым идёт обмен, хранится в статической переменной, доступ к которой имеют только две функции, назовём их условно GetAddress() и SetAddress() (похоже на приватные данные и два метода доступа к ним в C++). Непосредственно значение переменной больше никто поменять не может (не должен, точнее), равно как и заглянуть в неё, минуя соответствующую функцию.

Для пущего благолепия обе функции в консоль пишут инфу о своём вызове и результате работы.

Так вот, сначала я делаю SetAddress(0), работаю с нулевым устройством (все библиотечные функции обращаются строго к GetAddress() - пусть это создаёт некий оверхед, но зато я могу контролировать процесс), потом делаю SetAddress(1) и всё повторяется.

НО! С некоторых пор какая-то неотождествимая падла меняет значение этой переменной. Причём не абы как, а только на 48 или 61 (десятичные числа). Может, и ещё какие-то характерные значения есть, я не проверял. Вызов SetAddress() только один на весь цикл работы. А GetAddress() сначала сообщает правильное значение переменной, а потом вдруг изменившееся.

Память вроде нигде не перехлёстывается, за массивы не вылезаю, вообще в ОЗУ места ещё дофига.

Что за херотоооааааааАААААААААА?!
Tags: глюки компиляторов
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 13 comments