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

 
 
> Microblaze + DDR + custom IP, Управление записью в DDR память из процессора и своего ядра
shpongle
сообщение Nov 1 2015, 18:48
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 1-11-15
Пользователь №: 89 128



Здравствуйте.
Делаю проект (707 плата) в котором есть процессор Microblaze. Программа к процессору большая и линкер складывает ее в память DDR.
Мне необходимо использовать память DDR для временного хранения информации. Как правильно это сделать?
1. Я могу использовать для этого прямой доступ к памяти из процессора и писать по определенному адресу, после чего читать из него при помощи своего ядра по AXI.
2. Я могу вызвать функцию malloc выделить кусок памяти и сохранить там информацию, после чего считать данные при помощи своего ядра по AXI. Но, насколько я знаю, этой функцией пользоваться не желательно.
В первом случае, как я понимаю, я могу перезаписать данные относящиеся к программе Microblaze, во втором случае такого не должно быть.
Поправьте если ошибаюсь.

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
Inanity
сообщение Nov 1 2015, 22:25
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 221
Регистрация: 6-07-12
Пользователь №: 72 653



Мало инфы, от задачи зависит. Если аккуратно работать с указателями и размерами, то microblaze и ваше ядро спокойно уживутся в одной памяти при обоих подходах. Выделяете кусок в .heap, делаете с ним что надо, потом ядру своему передаёте указатель на этот кусок и его размер. Чтобы не было коллапса нужно на момент работы вашего ядра с этим куском памяти приостановить все телодвижения с .heap, чтобы исключить порчу данных. Я имею ввиду ситуации, когда менеджер памяти вдруг сделает дефрагментацию и буфер, с которым сейчас работает ваше AXI ядро вдруг куда-то уплывёт. Если есть возможность подождать, то второй вариант просто каноничнее. Если нет, тогда безопаснее класть данные туда, где их точно не испортят.

Сообщение отредактировал Inanity - Nov 1 2015, 22:47
Go to the top of the page
 
+Quote Post
shpongle
сообщение Nov 2 2015, 07:19
Сообщение #3





Группа: Новичок
Сообщений: 4
Регистрация: 1-11-15
Пользователь №: 89 128



Цитата(Inanity @ Nov 2 2015, 01:25) *


Спасибо за информацию.
Мне нужно сохранить в память 10МБ данных, полученных по USB или ETH, после чего я буду их вычитывать своим ядром нонстоп.
Где можно посмотреть адрес и размер .heap секции? Если открыть линкер скрипт, то в нем написано Heap size 0xA000, это значит то под кучу выделено 40960 байт?
Как узнать с какого адреса начинается секция .heap?

Код
MEMORY
{
   microblaze_0_local_memory_ilmb_bram_if_cntlr_microblaze_0_local_memory_dlmb_bram
_if_cntlr : ORIGIN = 0x00000050, LENGTH = 0x00007FB0
   mig_7series_0 : ORIGIN = 0x80000000, LENGTH = 0x40000000
}


ELF файл:
text data bss dec hex filename
190500 2276 753784 946560 e7180 bsp.elf



Go to the top of the page
 
+Quote Post
Inanity
сообщение Nov 2 2015, 08:32
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 221
Регистрация: 6-07-12
Пользователь №: 72 653



Верно, всё указано в линкер скрипте. По поводу размера - да, но, насколько я знаю, это 40960 байт с учётом служебных полей, так что выделить все 0xA000 под буфер не выйдет, берите с запасом небольшим. Где .heap врать не хочу, не помню, вроде после .bss был, изучайте этот вопрос. А так ли это имеет значение где он?
Go to the top of the page
 
+Quote Post
shpongle
сообщение Nov 2 2015, 08:47
Сообщение #5





Группа: Новичок
Сообщений: 4
Регистрация: 1-11-15
Пользователь №: 89 128



В линкер скрипте много полей:
Код
.text
.init
.fini
...
.bss
.heap
.stack


Как я понимаю, размер каждой области памяти известен после сборки проетка. В моем случае 946560 байт и так как .heap и .stack идут после .bss, то их адрес и размер 946560+40К+40К, остальная память будет не доступна для проца и я могу писать и читать в нее напрямую. Вот зачем мне надо знать где кончается .heap и .stack.

Подскажит где можно прочитать подробнее про память Microblaze?

Сообщение отредактировал shpongle - Nov 2 2015, 08:49
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 2nd August 2025 - 15:51
Рейтинг@Mail.ru


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