আমি বুঝতে পারি না কেন জিসিসি সংকলক আমার কোডের কিছু অংশ কাটাচ্ছে যখন এটি আশেপাশে একই রকম সংরক্ষণ করে?
সি কোড:
#define setb_SYNCO do{(PORTA|= (1<<0));} while(0);
ISR(INT0_vect){
unsigned char i;
i = 10;
while(i>0)i--; // first pause - omitted
setb_SYNCO;
setb_GATE;
i=30;
clrb_SYNCO;
while(i>0)i--; // second pause - preserved
clrb_GATE;
}
LSS এর সংশ্লিষ্ট অংশ (সংকলক দ্বারা তৈরি করা এসেমব্লার ফাইল):
ISR(INT0_vect){
a4: 1f 92 push r1
a6: 0f 92 push r0
a8: 0f b6 in r0, 0x3f ; 63
aa: 0f 92 push r0
ac: 11 24 eor r1, r1
ae: 8f 93 push r24
unsigned char i;
i = 10;
while(i>0)i--;
setb_SYNCO;
b0: d8 9a sbi 0x1b, 0 ; 27
setb_GATE;
b2: d9 9a sbi 0x1b, 1 ; 27
i=30;
clrb_SYNCO;
b4: d8 98 cbi 0x1b, 0 ; 27
b6: 8e e1 ldi r24, 0x1E ; 30
b8: 81 50 subi r24, 0x01 ; 1
while(i>0)i--;
ba: f1 f7 brne .-4 ; 0xb8 <__vector_1+0x14>
clrb_GATE;
bc: d9 98 cbi 0x1b, 1 ; 27
}
be: 8f 91 pop r24
c0: 0f 90 pop r0
c2: 0f be out 0x3f, r0 ; 63
c4: 0f 90 pop r0
c6: 1f 90 pop r1
c8: 18 95 reti
আমি ধরে নিতে পারি যে সংকলকটি বুঝতে পারে যে এই জাতীয় কোডটি ডামি এবং এটি কেটে দেয় তবে কেন কোডের শেষে এটি একইটিকে সংরক্ষণ করা হচ্ছে?
এই ধরনের অপ্টিমাইজেশন থেকে রোধ করার জন্য কি কোনও সংকলক নির্দেশাবলী রয়েছে?