|
WinAVR 2006, Компилятор полностью игнорирует циклы |
|
|
|
Jan 10 2008, 09:02
|

Частый гость
 
Группа: Новичок
Сообщений: 153
Регистрация: 29-03-07
Из: Саратов
Пользователь №: 26 613

|
Здравствуйте. У меня появилась такая проблема... компилятор полностью пропускает циклы... то есть вот пример... на Си я пишу Код SetLCDPosition(2, 0); for(short i = 0; i == 23; i++) ucTemp += sCurrentTemp[i]; ucTemp /= 24; sprintf(sBuffer, "%3d", ucTemp / 2); а в ассемблере получается Код 181: SetLCDPosition(2, 0); +000002B3: 2F61 MOV R22,R17 Copy register +000002B4: E082 LDI R24,0x02 Load immediate +000002B5: 940E0113 CALL 0x00000113 Call subroutine
185: sprintf(sBuffer, "%3d", ucTemp / 2); +000002B7: 921F PUSH R1 Push register on stack +000002B8: 921F PUSH R1 Push register on stack +000002B9: E682 LDI R24,0x62 Load immediate +000002BA: E090 LDI R25,0x00 Load immediate +000002BB: 939F PUSH R25 Push register on stack +000002BC: 938F PUSH R24 Push register on stack +000002BD: 92FF PUSH R15 Push register on stack +000002BE: 92EF PUSH R14 Push register on stack +000002BF: 940E03CE CALL 0x000003CE Call subroutine моего цикла for(...) {...} нет совсем... так в нескольких местах программы (везде, где встречаются циклы) пробовал при уровнях компиляции 0, 1, 3, s. При нулевом уровне у меня программа не вылазиит из прерывания по АЦП. То есть сразу после окончания обработки прерывания сбрасывается на начало прерывания... А при остальных - проглатываются циклы... может, кто сталкивался с подобной проблемой... подскажите пожалуйста, что можно сделать... везде в программе писать такое количество операторов это уж слишком загромоздит код (циклов ожидается достаточно большое количество)...
--------------------
!!! All you need is LOVE !!!
|
|
|
|
|
 |
Ответов
|
Jan 10 2008, 17:21
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
И еще "short i" - ни к селу ни к городу - для 8bit это работа с чрезмерно большим 16bit значением, а для 32 ARM - с исскуственно ограниченным. Если пользоватся минимальным набором типов, то для 8bit "unsigned char" , а для 16/32 соответствено "int". Поскольку на 8bit int обычно "традиционно"  16bit, на 16bit - уже обычно логичный соразмерный, ну и на 32bit-овиках вообще все правильно.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
Сообщений в этой теме
Freeze Anti WinAVR 2006 Jan 10 2008, 09:02 Палыч Цитата(Freeze Anti @ Jan 10 2008, 12:02) ... Jan 10 2008, 09:09 aesok Цитата(Freeze Anti @ Jan 10 2008, 12:02) ... Jan 10 2008, 09:15 Daskar Цитата(Freeze Anti @ Jan 10 2008, 12:02) ... Jan 10 2008, 15:17 Freeze Anti Да, спасибо... я заметил обе ошибки... но именно о... Jan 10 2008, 16:00   Непомнящий Евгений Цитата(zltigo @ Jan 11 2008, 00:48) Я гов... Jan 11 2008, 06:03    zltigo Цитата(Непомнящий Евгений @ Jan 11 2008, 08... Jan 11 2008, 07:02     Непомнящий Евгений Цитата(zltigo @ Jan 11 2008, 10:02) Иногд... Jan 11 2008, 07:15      zltigo Цитата(Непомнящий Евгений @ Jan 11 2008, 09... Jan 11 2008, 07:39     ReAl Цитата(zltigo @ Jan 11 2008, 09:02) Иногд... Jan 11 2008, 10:27      zltigo Цитата(ReAl @ Jan 11 2008, 12:27) На како... Jan 11 2008, 10:47       ReAl Цитата(zltigo @ Jan 11 2008, 12:47) Если ... Jan 11 2008, 11:41        zltigo Цитата(ReAl @ Jan 11 2008, 13:41) Ничего ... Jan 11 2008, 12:09   Сергей Борщ Цитата(zltigo @ Jan 10 2008, 23:48) пока ... Jan 11 2008, 08:17 Непомнящий Евгений Повторю еще раз свой вопрос - в "типичных... Jan 11 2008, 11:46 ReAl Цитата(Непомнящий Евгений @ Jan 11 2008, 13... Jan 11 2008, 11:58  Непомнящий Евгений Цитата(ReAl @ Jan 11 2008, 14:58)
В прин... Jan 11 2008, 12:03 aesok Цитата(Непомнящий Евгений @ Jan 11 2008, 14... Jan 11 2008, 12:26 Непомнящий Евгений да кто ж его знает, где он будет работать Если ко... Jan 11 2008, 12:35 aesok Цитата(Непомнящий Евгений @ Jan 11 2008, 15... Jan 11 2008, 12:49
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|