[an error occurred while processing this directive]
Это, тут IAR для MSP430 прямо таки оптимизатор хитрый. Что с ним делать :)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено MemoryTest 19 декабря 2002 г. 12:23

Суть вот в чем, пишу такой кусок кода, для перехода с DCO, на кристал
проверяем есть ли флаг фаулт, если да сбрасываем, ждем чуток, снова проверяем и т.д.
while(IFG1&OFIFG)
{
IFG1&=~OFIFG;
a=100;
while(a>0)
{
a--;
}
}

Если оптимизация врублена Speed,Medium, то он генерит что то типа
47. while(IFG1&OFIFG)
BIT.B #2,&2
BIC.B #2,&2
JEQ (?0010)
; 48. {
; 49.
; 50.
; 51. IFG1&=~OFIFG;
; 52.
; 53. a=100;
MOV #100,R12
?0014:
; 54.
; 55. while(a>0)
CMP #1,R12
JL (?0011)
; 56.
; 57. {
; 58. a--;
ADD #-1,R12
; 59.
; 60. }
; 61.
; 62.
; 63.
; 64.
; 65. }
JMP (?0014)
?0010:
; 66.
; 67. // switch on XT2

Т.е. Этот хитрюга сначала бит тестирует, тут же блин сам его сбрасывает, и радостно выходит из while{}. При отключенной оптимизации, код генерится в соответствии с логикой заложенной на С.
Вопросы: какую оптимизацию задать ICC430, как писать логические конструкцие, чтобы быть уверенным, что ICC, выполнит их так, как надо, немогу ведь я каждый раз, смотреть куски асма.. :), созданного компилятором.
Бест Рег!

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru