реклама на сайте
подробности

 
 
> Ошибки компиляции или сам дурак? (Продолжение), Еще интереснее...
Sergio66
сообщение Feb 19 2013, 06:43
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526



В продолжение темы работы оптимизатора...
Итак, есть код на С:
CODE
__C_task bool loader(UCHAR flash)
{
cnt = 0;
#if KEY_COUNT > 0
unsigned char chainCipherBlock[16]; // Buffer for Cipher Block
// Unchaining

// Copy Initial Vector to start the cipher block unchaining
{
unsigned char *p = chainCipherBlock;
unsigned char BOOTFLASH *q = initialVector;
unsigned char n = 16;

do
{
*p++ = *q++;
}
while (--n);
}

aesInit( tempbuf ); // Init AES algorithm.
#endif


// Start the Watchdog Timer (sorry for the mess, there is a bug in
// iom8.h (in version 2.28A) which is informed to IAR).

WDTCR |= (1<<WDTOE) | (1<<WDE) | (1<<WDP0) | (1<<WDP2);

// Loop forever (the loop is broken by Watchdog when RESET record is
// received)
for (;;)
{
frameindex_t frameSize;
unsigned int crc;
frameindex_t n;
UCHAR error_counter=0;

// Get the frame size

if (repeat) cnt = previous_frame_address;
//çàïîìèíàåì àäðåñ ïîñëåäíåé frame
previous_frame_address = cnt;
__watchdog_reset();
frameSize = ((frameindex_t)ConvHDToByte(busReceiveByte(repeat, flash),busReceiveByte(0,flash)) << 8) |
ConvHDToByte(busReceiveByte(0,flash),busReceiveByte(0,flash));

// Receive a frame of data from communication interface and calculate
// its CRC
{
unsigned char *p = rxBuffer;
n = frameSize;

crc = 0;
do
{
unsigned char ch;

ch = ConvHDToByte(busReceiveByte(0,flash),busReceiveByte(0,flash));//busReceiveByte();

*p++ = ch;
crc = CRC(crc, ch);

__watchdog_reset();
}
while (--n);

}

// CRC is OK?
if (crc == 0x0000)
{
//åñëè êîíòðîëüíàÿ ñóììà ñîøëàñü, ñáðàñûâàåì ñ÷åò÷èê îøèáîê
error_counter = 0;
unsigned char *p = rxBuffer;

// Decrypt 16 bytes, CRC-bytes are ignored.
#if KEY_COUNT > 0
{
unsigned char *p = rxBuffer;

frameSize -= 2;
do
{
__watchdog_reset();
aesDecrypt(p, chainCipherBlock);
p += 16;
}
while (frameSize -= 16);
}
#endif // KEY_COUNT > 0

// Check that the signature is correct
if ((*p++ == (unsigned char)(SIGNATURE >> 24)) &&
(*p++ == (unsigned char)(SIGNATURE >> 16)) &&
(*p++ == (unsigned char)(SIGNATURE >> 8)) &&
(*p++ == (unsigned char)(SIGNATURE >> 0)))
{
unsigned char APPFLASH *address;
unsigned char bits;
frameindex_t size;
unsigned char type;

// Continue parsing the frames until the 'End Of Frame' is
// received
while ((type = *p++) != TYPE_EOF)
{
__watchdog_reset();

// Receive Lock Bits (used in TYPE_LOCKBITS)
bits = *p++;

// Destination Address (note: 'bits' and 'address' overlap)
address =
(unsigned char APPFLASH *)((unsigned long)bits << 16);
address = (unsigned char APPFLASH *)
((unsigned long)address | ((unsigned long)*p++ << 8));
address = (unsigned char APPFLASH *)
((unsigned long)address | *p++);

size = ((unsigned int)*p++ << 8);
size |= *p++;

switch (type)
{
// Erase page
case TYPE_ERASE:
spmErasePage(address);
// Fall-through!

// Prepare for incoming data chunks by copying the page
// contents into the page buffer
case TYPE_PREPARE:
{
unsigned char *q = pageBuffer;
unsigned char APPFLASH *r = address;

do
{
*q++ = *r++;
}
while (--size);
break;
}

// Chunk of data is written into the page buffer
case TYPE_DATA:
{
unsigned char *r =
&pageBuffer[(unsigned long)(address) & 0xffff];
__watchdog_reset();
do
{
*r++ = *p++;
}
while (--size);
break;
}

// Program page buffer into flash page
case TYPE_PROGRAM:
{
unsigned int *q = (unsigned int *)pageBuffer;
unsigned char APPFLASH *r = address;

//ïðîâåðÿåì, íå çàëåçàåì ëè â BOOT AREA
if ((UINT16)address >= 0x7000) {
return false;
}
else {
// bytes_loaded += size*2;
do
{
__watchdog_reset();
spmWriteWord(r, *q++);
r += 2;
}
while (--size);

spmErasePage(address);
spmProgramPage(address);
}

break;

}

// Write a chunk of data into EEPROM
case TYPE_EEPROM:
do
{
__watchdog_reset();
spmEEWriteByte(
(unsigned long)address++ & 0xffff, *p++
);
}
while (--size);
break;

// Write Lock Bits
case TYPE_LOCKBITS:
spmWriteLockBits(bits);
break;

// Reset (let the Watchdog Timer expire)!
case TYPE_RESET:
return true;

// Nonsense frames, one byte long
default:
p -= 5;
break;
}
}

// return; //äîñòèãëè êîíöà ôàéëà
}
repeat = 0;
// busReplyByte(ERROR_OK);
}
else {
//âûñòàâëÿåì ôëàã ïîâòîðà ÷òåíèÿ ïîñëåäíåãî ôðåéìà
repeat = 1;
//ïðîâåðÿåì ñ÷åò÷èê îøèáîê. Åñëè ïåðåïîëíåí, òî âûõîäèì èõ ôóíêöèè ñ false
if (error_counter == MAX_ERROR)
return false;
else
error_counter++;
}
}
// return true;
}


вот листинг:
CODE
124 __C_task bool loader(UCHAR flash)
\ loader:
125 {
\ 00000000 9760 SBIW R29:R28, 16
\ 00000002 2EE0 MOV R14, R16
126 cnt = 0;
\ 00000004 E000 LDI R16, 0
\ 00000006 .... LDI R30, LOW(cnt)
\ 00000008 .... LDI R31, (cnt) >> 8
\ 0000000A 8300 ST Z, R16
\ 0000000C 8301 STD Z+1, R16
\ 0000000E 8302 STD Z+2, R16
\ 00000010 8303 STD Z+3, R16
127 #if KEY_COUNT > 0
128 unsigned char chainCipherBlock[16]; // Buffer for Cipher Block
129 // Unchaining
130
131 // Copy Initial Vector to start the cipher block unchaining
132 {
133 unsigned char *p = chainCipherBlock;
\ 00000012 019E MOVW R19:R18, R29:R28
134 unsigned char BOOTFLASH *q = initialVector;
\ 00000014 .... LDI R16, LOW(initialVector)
\ 00000016 .... LDI R17, (initialVector) >> 8
135 unsigned char n = 16;
\ 00000018 E140 LDI R20, 16
136
137 do
138 {
139 *p++ = *q++;
\ ??loader_0:
\ 0000001A 01F8 MOVW R31:R30, R17:R16
\ 0000001C 9155 LPM R21, Z+
\ 0000001E 018F MOVW R17:R16, R31:R30
\ 00000020 01F9 MOVW R31:R30, R19:R18
\ 00000022 9351 ST Z+, R21
\ 00000024 019F MOVW R19:R18, R31:R30
140 }
141 while (--n);
\ 00000026 954A DEC R20
\ 00000028 F7C1 BRNE ??loader_0
142 }
143
144 aesInit( tempbuf ); // Init AES algorithm.
\ 0000002A .... LDI R16, LOW(sharedbufs)
\ 0000002C 2E40 MOV R4, R16
\ 0000002E .... LDI R16, (sharedbufs) >> 8
\ 00000030 2E50 MOV R5, R16
\ 00000032 0182 MOVW R17:R16, R5:R4
\ 00000034 ........ CALL aesInit
145 #endif
146
147
148 // Start the Watchdog Timer (sorry for the mess, there is a bug in
149 // iom8.h (in version 2.28A) which is informed to IAR).
150
151 WDTCR |= (1<<WDTOE) | (1<<WDE) | (1<<WDP0) | (1<<WDP2);
\ 00000038 B501 IN R16, 0x21
\ 0000003A 610D ORI R16, 0x1D
\ 0000003C BD01 OUT 0x21, R16
152
153 // Loop forever (the loop is broken by Watchdog when RESET record is
154 // received)
155 for (;;)
156 {
157 frameindex_t frameSize;
158 unsigned int crc;
159 frameindex_t n;
160 UCHAR error_counter=0;
161
162 // Get the frame size
163
164 if (repeat) cnt = previous_frame_address;
\ 0000003E 9100.... LDS R16, (previous_frame_address + 4)
\ 00000042 2300 TST R16
\ 00000044 F051 BREQ ??loader_1
\ ??loader_2:
\ 00000046 .... LDI R30, LOW(previous_frame_address)
\ 00000048 .... LDI R31, (previous_frame_address) >> 8
\ 0000004A .... RCALL ?Subroutine3
\ ??CrossCallReturnLabel_4:
\ 0000004C .... LDI R30, LOW(cnt)
\ 0000004E .... LDI R31, (cnt) >> 8
\ 00000050 .... RCALL ?Subroutine2
\ ??CrossCallReturnLabel_2:
\ 00000052 C003 RJMP ??loader_1
165 //çàïîìèíàåì àäðåñ ïîñëåäíåé frame
166 previous_frame_address = cnt;
167 __watchdog_reset();
168 frameSize = ((frameindex_t)ConvHDToByte(busReceiveByte(repeat, flash),busReceiveByte(0,flash)) << 8) |
169 ConvHDToByte(busReceiveByte(0,flash),busReceiveByte(0,flash));
170
171 // Receive a frame of data from communication interface and calculate
172 // its CRC
173 {
174 unsigned char *p = rxBuffer;
175 n = frameSize;
176
177 crc = 0;
178 do
179 {
180 unsigned char ch;
181
182 ch = ConvHDToByte(busReceiveByte(0,flash),busReceiveByte(0,flash));//busReceiveByte();
183
184 *p++ = ch;
185 crc = CRC(crc, ch);
186
187 __watchdog_reset();
188 }
189 while (--n);
190
191 }
192
193 // CRC is OK?
194 if (crc == 0x0000)
195 {
196 //åñëè êîíòðîëüíàÿ ñóììà ñîøëàñü, ñáðàñûâàåì ñ÷åò÷èê îøèáîê
197 error_counter = 0;
198 unsigned char *p = rxBuffer;
199
200 // Decrypt 16 bytes, CRC-bytes are ignored.
201 #if KEY_COUNT > 0
202 {
203 unsigned char *p = rxBuffer;
204
205 frameSize -= 2;
206 do
207 {
208 __watchdog_reset();
209 aesDecrypt(p, chainCipherBlock);
210 p += 16;
211 }
212 while (frameSize -= 16);
213 }
214 #endif // KEY_COUNT > 0
215
216 // Check that the signature is correct
217 if ((*p++ == (unsigned char)(SIGNATURE >> 24)) &&
218 (*p++ == (unsigned char)(SIGNATURE >> 16)) &&
219 (*p++ == (unsigned char)(SIGNATURE >> 8)) &&
220 (*p++ == (unsigned char)(SIGNATURE >> 0)))
221 {
222 unsigned char APPFLASH *address;
223 unsigned char bits;
224 frameindex_t size;
225 unsigned char type;
226
227 // Continue parsing the frames until the 'End Of Frame' is
228 // received
229 while ((type = *p++) != TYPE_EOF)
230 {
231 __watchdog_reset();
232
233 // Receive Lock Bits (used in TYPE_LOCKBITS)
234 bits = *p++;
235
236 // Destination Address (note: 'bits' and 'address' overlap)
237 address =
238 (unsigned char APPFLASH *)((unsigned long)bits << 16);
239 address = (unsigned char APPFLASH *)
240 ((unsigned long)address | ((unsigned long)*p++ << 8));
241 address = (unsigned char APPFLASH *)
242 ((unsigned long)address | *p++);
243
244 size = ((unsigned int)*p++ << 8);
245 size |= *p++;
246
247 switch (type)
248 {
249 // Erase page
250 case TYPE_ERASE:
251 spmErasePage(address);
252 // Fall-through!
253
254 // Prepare for incoming data chunks by copying the page
255 // contents into the page buffer
256 case TYPE_PREPARE:
257 {
258 unsigned char *q = pageBuffer;
259 unsigned char APPFLASH *r = address;
260
261 do
262 {
263 *q++ = *r++;
264 }
265 while (--size);
266 break;
267 }
268
269 // Chunk of data is written into the page buffer
270 case TYPE_DATA:
271 {
272 unsigned char *r =
273 &pageBuffer[(unsigned long)(address) & 0xffff];
274 __watchdog_reset();
275 do
276 {
277 *r++ = *p++;
278 }
279 while (--size);
280 break;
281 }
282
283 // Program page buffer into flash page
284 case TYPE_PROGRAM:
285 {
286 unsigned int *q = (unsigned int *)pageBuffer;
287 unsigned char APPFLASH *r = address;
288
289 //ïðîâåðÿåì, íå çàëåçàåì ëè â BOOT AREA
290 if ((UINT16)address >= 0x7000) {
291 return false;
292 }
293 else {
294 // bytes_loaded += size*2;
295 do
296 {
297 __watchdog_reset();
298 spmWriteWord(r, *q++);
299 r += 2;
300 }
301 while (--size);
302
303 spmErasePage(address);
304 spmProgramPage(address);
305 }
306
307 break;
308
309 }
310
311 // Write a chunk of data into EEPROM
312 case TYPE_EEPROM:
313 do
314 {
315 __watchdog_reset();
316 spmEEWriteByte(
317 (unsigned long)address++ & 0xffff, *p++
318 );
319 }
320 while (--size);
321 break;
322
323 // Write Lock Bits
324 case TYPE_LOCKBITS:
325 spmWriteLockBits(bits);
326 break;
327
328 // Reset (let the Watchdog Timer expire)!
329 case TYPE_RESET:
330 return true;
331
332 // Nonsense frames, one byte long
333 default:
334 p -= 5;
335 break;
336 }
337 }
338
339 // return; //äîñòèãëè êîíöà ôàéëà
340 }
341 repeat = 0;
\ ??loader_3:
\ 00000054 E000 LDI R16, 0
\ 00000056 9300.... STS (previous_frame_address + 4), R16
\ ??loader_1:
\ 0000005A .... LDI R30, LOW(cnt)
\ 0000005C .... LDI R31, (cnt) >> 8
\ 0000005E .... RCALL ?Subroutine3
\ ??CrossCallReturnLabel_5:
\ 00000060 .... LDI R30, LOW(previous_frame_address)
\ 00000062 .... LDI R31, (previous_frame_address) >> 8
\ 00000064 .... RCALL ?Subroutine2
\ ??CrossCallReturnLabel_3:
\ 00000066 95A8 WDR
\ 00000068 .... RCALL ?Subroutine0
\ ??CrossCallReturnLabel_0:
\ 0000006A 9100.... LDS R16, (previous_frame_address + 4)
\ 0000006E ........ CALL busReceiveByte
\ 00000072 .... RCALL ?Subroutine4
\ ??CrossCallReturnLabel_7:
\ 00000074 .... RCALL ?Subroutine0
\ ??CrossCallReturnLabel_1:
\ 00000076 .... RCALL ?Subroutine5
\ ??CrossCallReturnLabel_11:
\ 00000078 .... RCALL ?Subroutine4
\ ??CrossCallReturnLabel_6:
\ 0000007A 2FA0 MOV R26, R16
\ 0000007C 0132 MOVW R7:R6, R5:R4
\ 0000007E 2FB0 MOV R27, R16
\ 00000080 E080 LDI R24, 0
\ 00000082 E090 LDI R25, 0
\ ??loader_4:
\ 00000084 .... RCALL ?Subroutine1
\ ??CrossCallReturnLabel_9:
\ 00000086 2E80 MOV R8, R16
\ 00000088 .... RCALL ?Subroutine1
\ ??CrossCallReturnLabel_10:
\ 0000008A 2D18 MOV R17, R8
\ 0000008C .... RCALL ConvHDToByte
\ 0000008E 2F20 MOV R18, R16
\ 00000090 01F3 MOVW R31:R30, R7:R6
\ 00000092 9301 ST Z+, R16
\ 00000094 013F MOVW R7:R6, R31:R30
\ 00000096 018C MOVW R17:R16, R25:R24
\ 00000098 ........ CALL CRC
\ 0000009C 01C8 MOVW R25:R24, R17:R16
\ 0000009E 95A8 WDR
\ 000000A0 95BA DEC R27
\ 000000A2 F781 BRNE ??loader_4
\ 000000A4 2B81 OR R24, R17
\ 000000A6 F009 BREQ $+2+2
\ 000000A8 C086 RJMP ??loader_5
\ 000000AA 01C2 MOVW R25:R24, R5:R4
\ 000000AC 50A2 SUBI R26, 2
\ ??loader_6:
\ 000000AE 95A8 WDR
\ 000000B0 019E MOVW R19:R18, R29:R28
\ 000000B2 018C MOVW R17:R16, R25:R24
\ 000000B4 ........ CALL aesDecrypt
\ 000000B8 9640 ADIW R25:R24, 16
\ 000000BA 51A0 SUBI R26, 16
\ 000000BC F7C1 BRNE ??loader_6
\ 000000BE 9100.... LDS R16, sharedbufs
\ 000000C2 3E0A CPI R16, 234
\ 000000C4 F639 BRNE ??loader_3
\ 000000C6 9100.... LDS R16, (sharedbufs + 1)
\ 000000CA 3E01 CPI R16, 225
\ 000000CC F619 BRNE ??loader_3
\ 000000CE 9100.... LDS R16, (sharedbufs + 2)
\ 000000D2 3F0B CPI R16, 251
\ 000000D4 F009 BREQ $+2+2
\ 000000D6 CFBE RJMP ??loader_3
\ 000000D8 01D2 MOVW R27:R26, R5:R4
\ 000000DA 9614 ADIW R27:R26, 4
\ 000000DC 9100.... LDS R16, (sharedbufs + 3)
\ 000000E0 310F CPI R16, 31
\ 000000E2 F009 BREQ $+2+2
\ 000000E4 CFB7 RJMP ??loader_3
\ 000000E6 C014 RJMP ??loader_7
\ ??loader_8:
\ 000000E8 95A8 WDR
\ 000000EA 01F4 MOVW R31:R30, R9:R8
\ 000000EC 9121 LD R18, Z+
\ 000000EE 9131 LD R19, Z+
\ 000000F0 014F MOVW R9:R8, R31:R30
\ 000000F2 0186 MOVW R17:R16, R13:R12
\ 000000F4 ........ CALL spmWriteWord
\ 000000F8 E002 LDI R16, 2
\ 000000FA 0EC0 ADD R12, R16
\ 000000FC E000 LDI R16, 0
\ 000000FE 1ED0 ADC R13, R16
\ 00000100 946A DEC R6
\ 00000102 F791 BRNE ??loader_8
\ 00000104 018C MOVW R17:R16, R25:R24
\ 00000106 ........ CALL spmErasePage
\ 0000010A 018C MOVW R17:R16, R25:R24
\ 0000010C ........ CALL spmProgramPage
\ ??loader_7:
\ 00000110 914D LD R20, X+
\ 00000112 2344 TST R20
\ 00000114 F409 BRNE $+2+2
\ 00000116 CF9E RJMP ??loader_3
\ 00000118 95A8 WDR
\ 0000011A 916D LD R22, X+
\ 0000011C 900D LD R0, X+
\ 0000011E 2D10 MOV R17, R0
\ 00000120 2D90 MOV R25, R0
\ 00000122 900D LD R0, X+
\ 00000124 2D00 MOV R16, R0
\ 00000126 2D80 MOV R24, R0
\ 00000128 9611 ADIW R27:R26, 1
\ 0000012A 906D LD R6, X+
\ 0000012C 954A DEC R20
\ 0000012E F069 BREQ ??loader_9
\ 00000130 954A DEC R20
\ 00000132 F069 BREQ ??loader_10
\ 00000134 954A DEC R20
\ 00000136 F0B9 BREQ ??loader_11
\ 00000138 954A DEC R20
\ 0000013A F101 BREQ ??loader_12
\ 0000013C 954A DEC R20
\ 0000013E F151 BREQ ??loader_13
\ 00000140 954A DEC R20
\ 00000142 F189 BREQ ??loader_14
\ 00000144 954A DEC R20
\ 00000146 F199 BREQ ??loader_15
\ 00000148 C034 RJMP ??loader_16
\ ??loader_9:
\ 0000014A ........ CALL spmErasePage
\ ??loader_10:
\ 0000014E .... LDI R16, ((sharedbufs + 148) & 0xff) & 0xFF
\ 00000150 .... LDI R17, (((sharedbufs + 148) >> 8) & 0xff) & 0xFF
\ 00000152 019C MOVW R19:R18, R25:R24
\ ??loader_17:
\ 00000154 01F9 MOVW R31:R30, R19:R18
\ 00000156 9145 LPM R20, Z+
\ 00000158 019F MOVW R19:R18, R31:R30
\ 0000015A 01F8 MOVW R31:R30, R17:R16
\ 0000015C 9341 ST Z+, R20
\ 0000015E 018F MOVW R17:R16, R31:R30
\ 00000160 946A DEC R6
\ 00000162 F7C1 BRNE ??loader_17
\ 00000164 CFD5 RJMP ??loader_7
\ ??loader_11:
\ 00000166 01F2 MOVW R31:R30, R5:R4
\ 00000168 0DE0 ADD R30, R0
\ 0000016A 1FF1 ADC R31, R17
\ 0000016C 56EC SUBI R30, 108
\ 0000016E 4FFF SBCI R31, 255
\ 00000170 95A8 WDR
\ ??loader_18:
\ 00000172 910D LD R16, X+
\ 00000174 9301 ST Z+, R16
\ 00000176 946A DEC R6
\ 00000178 F7E1 BRNE ??loader_18
\ 0000017A CFCA RJMP ??loader_7
\ ??loader_12:
\ 0000017C 0142 MOVW R9:R8, R5:R4
\ 0000017E E904 LDI R16, 148
\ 00000180 0E80 ADD R8, R16
\ 00000182 E000 LDI R16, 0
\ 00000184 1E90 ADC R9, R16
\ 00000186 2CC0 MOV R12, R0
\ 00000188 2ED1 MOV R13, R17
\ 0000018A 3790 CPI R25, 112
\ 0000018C F408 BRCC $+2+2
\ 0000018E CFAC RJMP ??loader_8
\ ??loader_19:
\ 00000190 9660 ADIW R29:R28, 16
\ 00000192 9508 RET
\ ??loader_13:
\ 00000194 95A8 WDR
\ 00000196 912D LD R18, X+
\ 00000198 018C MOVW R17:R16, R25:R24
\ 0000019A ........ CALL spmEEWriteByte
\ 0000019E 9601 ADIW R25:R24, 1
\ 000001A0 946A DEC R6
\ 000001A2 F7C1 BRNE ??loader_13
\ 000001A4 CFB5 RJMP ??loader_7
\ ??loader_14:
\ 000001A6 2F06 MOV R16, R22
\ 000001A8 ........ CALL spmWriteLockBits
\ 000001AC CFB1 RJMP ??loader_7
\ ??loader_15:
\ 000001AE E001 LDI R16, 1
\ 000001B0 CFEF RJMP ??loader_19
\ ??loader_16:
\ 000001B2 9715 SBIW R27:R26, 5
\ 000001B4 CFAD RJMP ??loader_7
342 // busReplyByte(ERROR_OK);
343 }
344 else {
345 //âûñòàâëÿåì ôëàã ïîâòîðà ÷òåíèÿ ïîñëåäíåãî ôðåéìà
346 repeat = 1;
\ ??loader_5:
\ 000001B6 E001 LDI R16, 1
\ 000001B8 9300.... STS (previous_frame_address + 4), R16
347 //ïðîâåðÿåì ñ÷åò÷èê îøèáîê. Åñëè ïåðåïîëíåí, òî âûõîäèì èõ ôóíêöèè ñ false
348 if (error_counter == MAX_ERROR)
349 return false;
350 else
351 error_counter++;
\ 000001BC CF44 RJMP ??loader_2
\ 000001BE REQUIRE _A_WDTCR
352 }
353 }
354 // return true;
355 }


прошу прощения за комментарии..

обратите внимание на оператор:
Код
if (crc == 0x0000)
    {
тра та та
    }
    else
    {
      repeat = 1;
      if (error_counter == MAX_ERROR)
          return false;
      else
          error_counter++;
    }

так вот - последнюю часть (c else) оптимизатор просто напросто выбрасывает!!!
Отключение оптимизации - и все нормально! Код работает, но в память не помещается...
Оптимизация нужна!
Какое право имеет оптимизатор выкидывать куски работающего кода???
Жду комментариев!

Сообщение отредактировал IgorKossak - Feb 19 2013, 14:43
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 17:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.0141 секунд с 7
ELECTRONIX ©2004-2016