Цитата(kovigor @ Sep 24 2011, 13:24)

Почти наверняка это такой же глюк компилятора, как и первый, описанный вами неделю назад. Хотя может быть всякое. я бы на вашем месте просто открыл .asm - файл, созданный компилятором, и посмотрел бы, как выглядит ваш фрагмент на асме. Думаю, это прояснило бы ситуацию.
Я уже, кстати, молчу о том, что у вас может, например, портиться стек, что и приводит к таким последствиям. На 99.9 и в этом случае компилятор не виноват ...
Да вот , недопёр я в asm заглянуть...
Прикол то в том, что после перекомпиляции и перепрошивки - всё заработало - в коде убрал только задокументированный текст( тогда кстати тоже текст рядом в скобках был , много текста) . Я вот думаю а не был ли и в прошлый раз ещё и стек виноват ( потому как в этот раз точно стек был- иначе не объяснишь). Надо будет асм "разобрать" при следующей запаре... Но там врятли явно увидишь... Пересмотрел указатели. Вроде запар нет нигде. Вот тоглько смущает этот кусок:
Код
void at24c256_read(unsigned char chip,unsigned int address, unsigned char count, unsigned char *buffer)
{
unsigned char a,b;
a=(chip<<1)|0b10100000;
i2c_start();
i2c_write(a);
i2c_write(address >> 8);
i2c_write(address);
i2c_start();
i2c_write((chip<<1)|0b10100001);
for (b=0;b<count-1;b++) {*buffer++=i2c_read(1);};
*buffer=i2c_read(0);
i2c_stop();
};
При переполнении страницы памяти( 64 байта) стабильно происходит запара со стеком( делал специально - при работе жётско контролируется НЕпереполнение записываю страницами по 63 байта) - переходит в начало main или вызывающей процедуры. А вот к функциям i2c добраться никак...
Сообщение отредактировал MKdemiurg - Sep 24 2011, 12:54