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

 
 
> особенности оптимизации под LPC
sergik_vrn
сообщение Feb 2 2009, 12:41
Сообщение #1


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

Группа: Свой
Сообщений: 152
Регистрация: 11-10-05
Из: Воронеж
Пользователь №: 9 491



Исходные данные: IAR 5.30 + LPC2478, ЖКИ TFT, внешняя SDRAM в качестве буфера индикатора.
при работе наблюдаются периодические неприятные помехи на индикаторе. опытным путем было установлено, что помехи вызываются некоторыми операциями чтения/записи SDRAM (в том числе в участки памяти, не находящиеся внутри буфера ОЗУ). Написал тестовый цикл
Код
        for (;;)
        {
            int y1 = 0, y2 = 200;
            int x1 = 0, x2 = 200;
            for (; y1 <= y2; ++y1)
            {
                volatile u16 *from = screen_shadow + x1 + (y1 * C_GLCD_H_SIZE);
                volatile u16 *to   = screen_buffer + x1 + (y1 * C_GLCD_H_SIZE);
                for (int i = x1; i < x2; ++i) *to++ = *from++;
            }
        }

сперва грешил на размерность указателей (8/16/32 бита), потом выяснилось, что дело не в этом, а в уровне оптимизации. при level = medium все стоит как вкопаное, как только ставлю high - помехи. при этом при high level от компилятор от исходного кода ничего не оставляет, все ссылки идут куда-то в недра memcpy, с использованием жутких конструкций типа LDMIA, STMIA, LDMCSIA и проч.
Конечно, причина ясна, можно обойти, но собирать весь проект со средним уровнем оптимизации очень не хочется, выискивать по всему коду и обвешивать обращения к SDRAM прагмами тоже нет никакого желания. volatile не помогает ни коим образом. может, что-то еще посоветуете?
Go to the top of the page
 
+Quote Post



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

 


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


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