Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Интересна заигравка с цикъл.
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=2803
Страница 1 от 1

Автор:  Nikola Kirov [ Чет Авг 24, 2006 6:22 pm ]
Заглавие:  Интересна заигравка с цикъл.

Оптимизирам си една библиотека и рекох да приведа в по човешки вид това но ми стана интересно кво е сътворил IAR като асемблер

Код:
do
    {
        if ( i2cMasterSendNI(i2cAddr, 2, packet,NO_STOP_COND)     == I2C_OK )
            if ( i2cSentDevAddr( i2cAddr | 0x01,0,TW_MR_SLA_ACK ) == I2C_OK ) break;
        i2ceeprom_DEV_ERR();
    } while(0);


учудих се че на най ниското ниво на оптимизация е компилирано много правилно като проверка а не като цикъл и няма смисъл да го пипам изобщо. Някой има ли наблюдение как се компилират подобни извращения с циклите в други среди?

Автор:  miro_atc [ Чет Авг 24, 2006 8:12 pm ]
Заглавие: 

е тука просто няма цикъл ;-)

почти всики компилатори изяждат всякакви константни изрази и проверка на константи.
Само за GCC не съм сигурен, щото на него като му изключиш оптимизациите може всичко да очакваш ;-)

Автор:  Nikola Kirov [ Чет Авг 24, 2006 8:17 pm ]
Заглавие: 

На големите нива на оптимизация компилатора задължително трябва да го компилира без цикъла но ми стана интересно че на най ниско на което обикновенно и се дебъгва в IAR e изключен цикъла.

Автор:  Dimitar [ Чет Авг 24, 2006 8:49 pm ]
Заглавие: 

Nikola Kirov написа:
най ниско на което обикновенно и се дебъгва в IAR

Това е интересно. Я кажи защо така дебъгваш, защото аз със IAR специално винаги съм дебъгвал на full оптимизация.

Автор:  Nikola Kirov [ Чет Авг 24, 2006 8:58 pm ]
Заглавие: 

И как дебъгваш на full оптимизация. То кода който се генерира тогава е толкова раздробен в някой участъци е изключен даже. Как дебъгваш? Маркера за стъпките скача като побъркан от място на място :)
Даже за понякога изключвам изобщо оптимизацията че да имам видимост за всички локални променливи. Иначе в зависимост от конкретния случай може и да не виждаш стойноста на някоя. Най вече в случаите когато до края на функцията не се ползва. Но като трябва да видиш стойноста и след последната операция с нея е неприоятно. Изключването на оптимизацията изобщо решава проблема. Поне при AVR ската версия.

Автор:  Dimitar [ Чет Авг 24, 2006 9:04 pm ]
Заглавие: 

Много рядко се е случвало при MSP430 - а го държахме на пълна оптимизация, защото се борехме за всеки байт програмна памет. Аз мислих, че някаква друга ти е идеята, но за променливите си прав.

Автор:  Nikola Kirov [ Чет Авг 24, 2006 9:10 pm ]
Заглавие: 

Ами опримизацията може да се задава отделно за всеки фаил от проекта. Даже с #pragma някаква може да се изключва оптимизацията локално за участък от кода даже. Така че не пречи за фаила с който работиш в момента да я изключиш и да си дебъгваш спокойно

Автор:  Dimitar [ Чет Авг 24, 2006 9:13 pm ]
Заглавие: 

Абе човек - оставаха ни от 3 до 20-на свободни байта в програмната памет. Каквото и да изключа - все надхвърляше 8) . Ако трябваше да добавим нещо - преди това 3 дена оптимизирахме кода :? .

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/