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
Согласуйте импеданс!