(2015-10-06 01:42:03 отредактировано dayznse)

Разделение RAM-ключа для нескольких микропрограмм

Если я использую несколько микропрограмм в одном ключе (например 4 программы для ключа с 128кБ), то как быть с RAM-ключа: следует его делать общим для всех четырех программ или разделить на несколько частей, задавая соответствующие значения в makefile?

Отсюда возникают следующие вопросы:
1) Если я разделяю RAM на части, то каким должно быть выравнивание памяти?
2) Если я использую общую RAM на все четыре программы, то доступны ли значения NO_INIT-переменных, созданных одной программой в другой; т.е. может ли программа номер 2 изменить (случайно или намеренно) данные, расположенные по адресу NO_INIT-переменной, которая описана и создавалась в программе номер 1?
3) Могут ли совпадать имена буферов ввода-вывода для всех программ, записанных в ключ, или же обязательно должны различаться? Если я использую общую RAM, то все буферы будут создаваться по одному и то му адресу и "перетирать" друг друга?
4) Кстати, по какому адресу располагаются буферы ввода-вывода? Вначале зарезервированной RAM? Сначала идет буфер ввода, а за ним буфер вывода?

Re: Разделение RAM-ключа для нескольких микропрограмм

Здравствуйте!
Мы переадресовали Ваши вопросы нашим разработчикам. Ответ будет до конца этой недели.

Re: Разделение RAM-ключа для нескольких микропрограмм

Здравствуйте!

1. 0x200

2. Не всегда.
В случае если все четыре программы будут иметь одинаковые области глобальных данных, размеров стека, входных и выходных буферов, можно добиться одинакового распределения памяти, но linker это не гарантирует. (необходимо проверять по asm файлу)

Закомментируйте  строчку “call %YAGARTO_MAKE% clean_temp” в build.bat.
В начале .out/SAMPLE2.asm вы увидите распределение данных по памяти.
Примечание.
Стартовый адрес  RAM памяти в *.asm 0x10003000 эквивалентен адресу 0x40003000 из makefile (для совместимости makefile  с более ранним моделями GuardantCode)

3. Имена буферов ввода-вывода могут быть любыми. Одинаковые имена в разных микропрограммах не гарантируют одно и того же их адреса.

4. Кстати, по какому адресу располагаются буферы ввода-вывода? Вначале зарезервированной RAM? Не всегда. 
Сначала идет буфер ввода, а за ним буфер вывода? Да.

Re: Разделение RAM-ключа для нескольких микропрограмм

dayznse пишет:

Если я использую несколько микропрограмм в одном ключе (например 4 программы для ключа с 128кБ), то как быть с RAM-ключа: следует его делать общим для всех четырех программ или разделить на несколько частей, задавая соответствующие значения в makefile?

В зависимости от решаемой задачи.  Использование общего RAM без целей сохранения данных между вызовами предпочтительнее.

Re: Разделение RAM-ключа для нескольких микропрограмм

1. 0x200

И для стартового адреса RAM и для размера RAM?

А если я использую для разных микропрограмм разные, не пересекающиеся, области RAM, гарантирует ли это сохранность абсолютно всех NO_INIT-переменных и буферов ввода\вывода?

Re: Разделение RAM-ключа для нескольких микропрограмм

Здравствуйте!
Да, гарантирует сохранность. Соответственно, как и для любой оперативной памяти, до сброса питания ключа (переподключения).