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

 
 
> TMS320DM642. Программа. Работа с BUF, BUF_alloc возвращает иногда некорректный адрес
DmitriyX
сообщение Jul 6 2007, 10:22
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 73
Регистрация: 21-12-04
Пользователь №: 1 581



Процессор 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
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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