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

 
 
> Nios: burts и побайтные операции
edren_baton
сообщение Mar 2 2015, 14:37
Сообщение #1


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

Группа: Участник
Сообщений: 81
Регистрация: 13-10-08
Пользователь №: 40 915



Всем доброго времени суток!

У меня есть задача провести побайтные операции с двумя массивами данных в памяти (SDRAM или DDR3) и записать их в новую область памяти.

Варианты исполнения такой функции (например, вычитание), написанные мною в "лоб" приведены ниже. Объявления переменных и т.п. опустил.
В первом случае из памяти данные считываются побайтно и побайтно же записываются. Во втором считывается 4 байта, идет шаманство со сдвигами и запись результата как 4х байт.

Код
void difference(alt_u8* buffer1, alt_u8* buffer2, alt_u8* buffer3)
{
     for (cntr = 0; cntr < 4; cntr++)
        {
                  *buffer3 = *buffer2 - *buffer1
            
                        buffer1 = buffer1 + 1;
            buffer2 = buffer2 + 1;
            buffer3 = buffer3 + 1;
        }
}



Код
void difference2(alt_u32* buffer1, alt_u32* buffer2, alt_u32* buffer3)
{
             buf_1_1 = *buffer1;
            buf_1_2 = *buffer2;

            buf_2_1 = *buffer1 >> 8;
            buf_2_2 = *buffer2 >> 8;

            buf_3_1 = *buffer1 >> 16;
            buf_3_2 = *buffer2 >> 16;

            buf_4_1 = *buffer1 >> 24;
            buf_4_2 = *buffer2 >> 24;
    
            buf_1 = abs (buf_1_2 - buf_1_1);
            buf_2 = abs (buf_2_2 - buf_2_1);
            buf_3 = abs (buf_3_2 - buf_3_1);
            buf_4 = abs (buf_4_2 - buf_4_1);

            buf_0 = 0x00000000;
            buf_0 |= buf_4;

            buf_0 = buf_0 << 8;
            buf_0 |= buf_3;

            buf_0 = buf_0 << 8;
            buf_0 |= buf_2;

            buf_0 = buf_0 << 8;
            buf_0 |= buf_1;

            *buffer3 = buf_0;
}


Вопрос. Что из этого работает быстрее (в т.ч. с точки зрения обращения к памяти). Или же как по-другому адекватно проводить такие побайтные операции именно в Nios?
Go to the top of the page
 
+Quote Post



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

 


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


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