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

 
 
> Проблемная опция Use Link-Time code generation, RVCT., генерит неправильный код, stm32
baralgin
сообщение May 13 2010, 19:23
Сообщение #1


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

Группа: Участник
Сообщений: 92
Регистрация: 23-12-08
Из: Кишинёв
Пользователь №: 42 680



Столкнулся с проблемой при включении этой опции в настройках Keil'а (MDK-4.10). Судя по описанию это поззволяет компилятору "глубже" проводить оптимизиацию. В общем суть проблемы: есть функция, запускаемая прямо из main():

Код
void HardTest_Run()
{
    int counter = 0;
    while( counter < 100 )
    {
        while( !ready );
        ready = false;

        if( !isV15Valid( CalcValue(sums_saved.V15) ) )
        {
            lcd_manualSet(26,16,12);
//            lcd_setState(LCD_STATE_EHA);
            counter = 0;
        }
        else
        {
            counter++;
            int dig = 9 - (counter / 10) % 10;
            lcd_manualSet(dig, dig , dig);
        }
    }
}


переменная ready (volatile bool) периодически меняется функцией этого же модуля, которая вызывается из другого модуля обработчиком прерывания. При закоментированной строчке   lcd_setState(LCD_STATE_EHA); срабатывает if(!isV15Valid(...)) - хотя не должен. Если же закоментировать lcd_manualSet и раскомментировать lcd_setState, то if не срабатывает (как и должно быть). Самое смешное, что обе эти функции(lcd_xxx) по сути делают одно и тоже:

Код
void lcd_manualSet(uint_fast8_t d0, uint_fast8_t d1, uint_fast8_t d2)
{
    point1_on = false;
    point2_on = false;
    dig0 = d0;
    dig1 = d1;
    dig2 = d2;
}

void lcd_setState(uint_fast8_t state)
{
    point1_on = false;
    point2_on = false;
    dig2 = some_states[state][0];
    dig1 = some_states[state][1];
    dig0 = some_states[state][2];
}


где массив some_states константный.

В итоге этот код работает без проблем, если не ставить галочку "Use Link-Time code generation" , иначе только с плясками типа замены одной функции на другую(lcd_xxx). Чувствую что проблема где-то в коде, но не знаю какому типу ошибок характерны такие глюки.

ps: Стэк и кучу увеличивал, да и судя по статистике компилятора там с лихвой числа.
Go to the top of the page
 
+Quote Post



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

 


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


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