Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
for ( sram_test_page = 3; sram_test_page <= 0x0F; sram_test_page++ ) {
SELECT_SRAM_PAGE( sram_test_page );
if ( ptr[0] != sram_test_page ) {
sram_test_code = ( uint16_t ) SRAM_PAGE_BEGIN;
return( sram_test_step );
}
if ( ptr[1] != ~sram_test_page ) {
sram_test_code = ( uint16_t )( SRAM_PAGE_BEGIN + 1 );
return( sram_test_step );
}
}
получаю результат:
258 for ( sram_test_page = 3; sram_test_page <= 0x0F; sram_test_page++ ) {
\??xmemTestAll_6:
\ LDI R16, 3
\ STS sram_test_page, R16
\ LDS R16, sram_test_page
\ CPI R16, 16
\ BRCC ??xmemTestAll_7
259 SELECT_SRAM_PAGE( sram_test_page );
\ LDS R16, sram_test_page
\ STS 49151, R16
260 if ( ptr[0] != sram_test_page ) {
\ LD R16, X
\ LDS R17, sram_test_page
\ CP R16, R17
\ BREQ ??xmemTestAll_8
261 sram_test_code = ( uint16_t ) SRAM_PAGE_BEGIN;
\ LDI R16, 0
\ LDI R17, 192
\ LDI R30, 1
\ LDI R31, 1
\ ST Z, R16
\ STD Z+1, R17
262 return( sram_test_step );
\ LDS R16, sram_test_step
\ RJMP ??xmemTestAll_1
263 }
264 if ( ptr[1] != ~sram_test_page ) {
265 sram_test_code = ( uint16_t )( SRAM_PAGE_BEGIN + 1 );
\ ??xmemTestAll_8:
\ LDI R16, 1
\ LDI R17, 192
\ LDI R30, 1
\ LDI R31, 1
\ ST Z, R16
\ STD Z+1, R17
266 return( sram_test_step );
\ LDS R16, sram_test_step
\ RJMP ??xmemTestAll_1
267 }
268 }
Из кода видно, что проверка условия
if ( ptr[1] != ~sram_test_page ) {
не выполняется вообще.
Может быть кто-нибудь знает , в чем дело - это моя ошибка или
глюк компилятора ?
С Уважением, Zevaka
P.S. Оптимизация вырублена полностью