ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
154777 Топик полностью
Alex B. (24.04.2009 17:01, просмотров: 218) ответил AlexBi на volatile для f1 помогает, но как-то не уверенно.
ну низнаю. ничего неуверенного не вижу:  155: void foo (volatile SS *ps, unsigned int f) 156: { 00288 780100 mov.w 0x0000,0x0004 157: 158: if(f) {__asm__ __volatile__ (" disi #0x3ff"); ps->f1=1;} 0028A E00001 cp0.w 0x0002 0028C 320004 bra z, 0x000296 0028E FC03FF disi #1023 00290 904020 mov.b [0x0000+2],0x0000 00292 A00000 bset 0x0000,#0 00294 370003 bra 0x00029c 159: else {__asm__ __volatile__ (" disi #0x3ff"); ps->f1=0;} 00296 FC03FF disi #1023 00298 904020 mov.b [0x0000+2],0x0000 0029A A10000 bclr 0x0000,#0 0029C 984120 mov.b 0x0000,[0x0004+2] 160: asm(" disi #0"); 0029E FC0000 disi #0 161: 162: } 002A0 060000 return А если сделать по уму, то вообще все замечательно: void foo (volatile SS *ps, unsigned int f) { __asm__ __volatile__ (" disi #0x3ff"); if(f) {ps->f1=1;} else {ps->f1=0;} __asm__ __volatile__ (" disi #0"); } 155: void foo (volatile SS *ps, unsigned int f) 156: { 00288 780100 mov.w 0x0000,0x0004 157: __asm__ __volatile__ (" disi #0x3ff"); 0028A FC03FF disi #1023 158: if(f) {ps->f1=1;} 0028C E00001 cp0.w 0x0002 0028E 320003 bra z, 0x000296 00290 904020 mov.b [0x0000+2],0x0000 00292 A00000 bset 0x0000,#0 00294 370002 bra 0x00029a 159: else {ps->f1=0;} 00296 904020 mov.b [0x0000+2],0x0000 00298 A10000 bclr 0x0000,#0 0029A 984120 mov.b 0x0000,[0x0004+2] 160: __asm__ __volatile__ (" disi #0"); 0029C FC0000 disi #0 161: } 0029E 060000 return
Согласуйте импеданс!