Цитата(scifi @ Jan 16 2012, 22:08)

А почему это проблема? Если выбрасывает, значит они не нужны.
Вот пример кода.
Заполняем массив Buf_RS485 и отправляем его в UART. Первый байт в массиве определяет его длинну.
Первые 2 строки после case00: копируют некие данные известной длинны. Поэтому в следующей строке эта длинна и записывается.
Далее, если есть Cnt_sob, то туда еще кучка всего вписывается и другая длинна перезаписывается.
Таким образом отправляется либо короткий, либо более длинный пакет.
Так вот 3 строку оптимизатор игнорирует и пакет отправляется с неверной длинной!
Код
vu8 Buf_RS485[256]; // Глобальная
void sw_get(void)
{
u32 i, j, k, u;
switch(GetSet)
{
case 0x00: Pool=1; RX_RS485=1;
memcpy((char*)Buf_RS485+1,Mac_mas_bcd,4);
memcpy((char*)Buf_RS485+5,Mac_sl_bcd,4); u=9;
Buf_RS485[0]=u-1;
if(Cnt_sob)
{
j=EE_rd_byte(UK_WRS);
if(j>=Cnt_sob) k=j-Cnt_sob;
else k=KOL_BUF-(Cnt_sob-j);
k=k*LEN_SOB+BAZA_S; i=0;
EE_rd_nbyte(k,Buf_tmp,64); Buf_tmp[64]=0;
k=strlen((char*)Buf_tmp); k=k-6; Buf_RS485[u++]=k|0x40;
for(i=0; i<12; i=i+2,u++)
Buf_RS485[u]=((Buf_tmp[i]-0x30)<<4)|((Buf_tmp[i+1]-0x30)&0xF);
for(i=0; i<(k-6); i++) Buf_RS485[u++]=Buf_tmp[i+12];
Buf_RS485[0]=u-1;
}
SEND_RS485; return;
.........
}
Сообщение отредактировал IgorKossak - Jan 17 2012, 08:12
Причина редактирования: [code]