Помогите разобраться ,pls Может кто сталкивался с проблемой зацикливания программы при выполнении операции взятия остатка от деления
signed int temp;
temp%=1000;
пишу на С, компилятор Keil Ниже приведена функция которую подставляет компилятор для выполнения деления, точками отмечено участок кода в котором программа зацикливается при этом содержимое регистров не меняется
?C?SDIV?A: 0x00015670 E211C102 ANDS R12,R1,#0x80000000 0x00015674 42611000 RSBMI R1,R1,#0x00000000 0x00015678 E03CB040 EORS R11,R12,R0,ASR #32 0x0001567C 22600000 RSBCS R0,R0,#0x00000000 0x00015680 E1B08001 MOVS R8,R1 0x00015684 0A00000D BEQ 0x000156C0 0x00015688 E15800A0 CMP R8,R0,LSR #1 0x0001568C 91A08088 MOVLS R8,R8,LSL #1 0x00015690 3AFFFFFC BCC 0x00015688 · 0x00015694 E1500008 CMP R0,R8 · 0x00015698 E0ACC00C ADC R12,R12,R12 · 0x0001569C 20400008 SUBCS R0,R0,R8 · 0x000156A0 E1380001 TEQ R8,R1 · 0x000156A4 11A080A8 MOVNE R8,R8,LSR #1 · 0x000156A8 1AFFFFF9 BNE 0x00015694 0x000156AC E1A0100C MOV R1,R12 0x000156B0 E1B0B08B MOVS R11,R11,LSL #1 0x000156B4 22611000 RSBCS R1,R1,#0x00000000 0x000156B8 42600000 RSBMI R0,R0,#0x00000000 0x000156BC E12FFF1E BX R14 0x000156C0 E3E01000 MVN R1,#0x00000000 0x000156C4 E3A00000 MOV R0,#0x00000000 0x000156C8 E12FFF1E BX R14 0x000156CC FFFFFFFF (???)
По всей видимости проблемы из за стека, хотя изменение размера стека не устраняет глюк. Использую в программе swi, irq
Undefined Mode 0x0000 0020 Supervisor Mode 0x0000 0020 Abort Mode 0x0000 0020 Fast Interrupt Mode 0x0000 0020 Interrupt Mode 0x0000 0800 User/System Mode 0x0000 0800
Знающие люди рекомендовали обратить внимание на CSTACK,но чем он отличается от стека User/System режима при условии, находимся в этом режиме я понять не могу?
|