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

 
 
> WinAVR 2006, Компилятор полностью игнорирует циклы
Freeze Anti
сообщение Jan 10 2008, 09:02
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 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 !!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Непомнящий Евген...
сообщение Jan 11 2008, 11:46
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Повторю еще раз свой вопрос - в "типичных" случаях (циклы и т.д.) что стоит применять - _fast или _least? Судя по постам Zltigo насчет масок - всеж таки fast...
Go to the top of the page
 
+Quote Post
aesok
сообщение Jan 11 2008, 12:26
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(Непомнящий Евгений @ Jan 11 2008, 14:46) *
Повторю еще раз свой вопрос - в "типичных" случаях (циклы и т.д.) что стоит применять - _fast или _least? Судя по постам Zltigo насчет масок - всеж таки fast...


Типы "_least" и _fast введены для улудшения переносимости кода.

_least - Существуют процессоры которые не поддерживают 8-битные данные, (некоторые DSP). Истоьзуем тип int_least8_t и один и тодже код будет компилироваться и на и процессоре который поддерживает 8-битные данные, и на том который нет, используя наименьший поддерживаемый тип для данного процесора.

_fast - Допустим есть 32-битный процессор для котораго работа с 8-битными данными менее эффективна чем с родными 32-битными. А ма хотим чтобы один и тодже код был максимально эффективным и для этого процессора и для например AVR. Истоьзуем тип int_fast8_t и для этого процессора переменная будет 32-битной, а для AVR 8-битной.

А думаю в "типичных" случаях не нужно использовать эти типы. Используйте их когда пишете код предназначеный для работы на разных платформах.

Анатолий.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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   И еще "short i" - ни к селу ни к городу ...   Jan 10 2008, 17:21
|- - Сергей Борщ   Цитата(zltigo @ Jan 10 2008, 19:21) Если ...   Jan 10 2008, 18:08
|- - zltigo   Цитата(Сергей Борщ @ Jan 10 2008, 20:08) ...   Jan 10 2008, 21:48
|- - Непомнящий Евгений   Цитата(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
|- - ReAl   Цитата(Непомнящий Евгений @ Jan 11 2008, 13...   Jan 11 2008, 11:58
||- - Непомнящий Евгений   Цитата(ReAl @ Jan 11 2008, 14:58) В прин...   Jan 11 2008, 12:03
- - Непомнящий Евгений   да кто ж его знает, где он будет работать Если ко...   Jan 11 2008, 12:35
- - aesok   Цитата(Непомнящий Евгений @ Jan 11 2008, 15...   Jan 11 2008, 12:49


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

 


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


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