[an error occurred while processing this directive] [an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено ВН 29 августа 2001 г. 11:03
В ответ на: Помогите новичку. Не получается циркулярный буфер. отправлено Начинающий 29 августа 2001 г. 08:13

Тут вот в чем дело.
Циркулярная адресация в общем виде так: Inew=BASE+(Iold+M-BASE)modL.
Но в 218x BASE=Iold&MASK. А MASK в свою очередь есть !((2^k)-1).
! - это инверсия, а 2^k - ближайшая степень двойки, больше или равная L. По другому: цикл. буфер ВСЕГДА начинается с адресов, кратных этой самой 2^k. В Вашем случае L=20 -> ближайшая степень двойки 2^k=32
->начало буфера м.б. с адресов 0,32,64,96.... MASK же равна
0xffe0=!0x1f=!31. Т.к. у Вас начальное значение I2=0X19=25, то
BASE=0 -> сл. значение I2 при M2=1 будет I2=0+(25+1)mod20=26-20=6.
Это чтобы Вы поняли. Обычно же буфер явно об'являют циклическим модификатором CIRC, оставляя линковщику заботу о его размещении.
Если Вы так делать не хотите - помните об ограничениях на нач. адреса цикл. буферов.

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru