Перейти к содержанию
    

TMS320DM642. Программа. Работа с BUF

Процессор TMS320DM642. Имеется буфер, состоящий из 64 ячеек по 256 Кб. Размещается в некэшируемой внешней памяти. Регулярно идет помещение объектов в буфер и доставание их оттуда. Приблизительно через час после начала работы в какой-то момент времени функция BUF_alloc возвращает неадеквадное значение (не 0 и не адрес свободного буфера). Через watch смотрел состояние буфера, вроде бы значения там адеквадные. Каким образом и что могло привести к подобному поведению?

 

 

Подробности:

 

Фрагмент кода:

 

QUE_Elem *p= (QUE_Elem *) BUF_alloc( m_phBUF );

 

в какой-то момент возвращает значение 0x0033525B или 0x0035525B (зависание поймано два раза).

такого адреса в конфигурации dspbios нет. Он находится между внутренней и внешней памятью.

 

 

Конфигурация DSPBIOS:

 

bios.MEM.create("MONRAM");

bios.MEM.instance("MONRAM").base = 0x00030000;

bios.MEM.instance("MONRAM").len = 0x00010000;

 

bios.MEM.instance("IRAM").len = 0x00030000;

bios.MEM.instance("IRAM").createHeap = 1;

bios.MEM.instance("IRAM").heapSize = 0x00004000;

 

bios.MEM.create("CEXTDRAM");

bios.MEM.instance("CEXTDRAM").base = 0x80000000;

bios.MEM.instance("CEXTDRAM").len = 0x01000000;

bios.MEM.instance("CEXTDRAM").createHeap = 0;

bios.MEM.instance("CEXTDRAM").space = "data";

bios.MEM.instance("CEXTDRAM").comment = "кэшируемая внешняя память";

 

bios.MEM.create("UEXTDRAM");

bios.MEM.instance("UEXTDRAM").base = bios.MEM.instance("CEXTDRAM").base + bios.MEM.instance("CEXTDRAM").len;

bios.MEM.instance("UEXTDRAM").len = 0x06800000;

bios.MEM.instance("UEXTDRAM").createHeap = 0;

bios.MEM.instance("UEXTDRAM").space = "code/data";

bios.MEM.instance("UEXTDRAM").comment = "некэшируемая внешняя память";

 

bios.BUF.create("BUF_SendResults");

bios.BUF.instance("BUF_SendResults").size = 65536*4 + 16;

bios.BUF.instance("BUF_SendResults").bufCount = 64;

bios.BUF.instance("BUF_SendResults").align = 4;

bios.BUF.instance("BUF_SendResults").comment = "IFG Send Results";

bios.BUF.instance("BUF_SendResults").bufSeg = prog.get("UEXTDRAM");

 

 

Map-файл:

name origin length used unused attr fill

---------------------- -------- --------- -------- -------- ---- --------

IRAM 00000000 00030000 0002f4e8 00000b18 RWIX

MONRAM 00030000 00010000 00008000 00008000 RWIX

CEXTDRAM 80000000 01000000 004fccf0 00b03310 RWIX

UEXTDRAM 81000000 06800000 06000800 007ff800 RWIX

 

 

.BUF_SendResults$data

* 0 86000000 01000400 UNINITIALIZED

 

 

0002f284 _BUF_Registrar

0002f25c _BUF_SendResults

00022680 _BUF_alloc

 

81000000 _g_aRegDataLarge

86000000 BUF_SendResults$databeg

87000400 TSK_myLoop$stack

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...