реклама на сайте
подробности

 
 
> Help, Программа под ARM зацикливается при делении (%)
_ijor_
сообщение Sep 16 2008, 21:01
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 15
Регистрация: 19-06-07
Пользователь №: 28 545



Помогите разобраться ,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 режима при условии, находимся в этом режиме я понять не могу?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_ijor_
сообщение Sep 22 2008, 11:53
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 15
Регистрация: 19-06-07
Пользователь №: 28 545



Глюк пропадает если отказаться от прерывания модуля I2C

Очень похоже что у меня то -же что -то с прерываниеями не то. В программе разрешено только два прерывания от I2C и uart. Если закоментировать I2C глюк пропадает. Но вложеные прерывания я не использую, т.е. не включаю, если не ошибаюсь то по умолчанию они отключины
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 14:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01379 секунд с 7
ELECTRONIX ©2004-2016