Уж извините, если уже упоминалось, читать все страницы темы лень. Отвечая на вопрос темы:
В основном, конечно, разницы принципиальной нет, за исключением того, что вообще-то почти всегда (если не всегда) можно логически отделить данные от исполняемого кода (если только не юзать самомодифицирующийся код). Тогда, появляется возможность определить исполняемый код в а) ПЗУ б) EEPROM в) Flash и т.п. Т.е. смысл в том, что исполняемый код модифицировать не требуется, и его можно разместить в более емкой/дешевой/быстрой/неудобной по доступу (выбирать самостоятельно) памяти. А вот данные уж будь добр либо в DRAM либо в SRAM.
Собственно так все нормальные своременные микроконтроллеры и строятся (память программ обычно внутри, flash, программируется с помощью специальных танцев с бубном, иногда даже требует отличного от VDD напряжения программирования) + 1...4 Кб обычной ОЗУ (тоже внутренней). Бывает еще память двойного доступа (в зависимости от состояния определенных регистров, работает как память программ или как память данных, но все-таки она - ОЗУ, т.е если там программа, то надобно ее туда скопировать после RESET'а, компилятор обычно сам об этом заботится), но это уже экзотика.
Кстати есть еще адресное пространство ввода-вывода, которое отличается тем, что проц обычно не имеет столь развитых средств работы с ним и ограничивается командамит in,out, и то бывает весьма урезанными - без косвенной адресации. Бывает, что это тоже отдельная шина.
Подводя итог: разделять память программ и данных с точки зрения архитектуры процессора, системы и программиста сложнее, зато дает возможность сэкономить на памяти/улучшить потребительские св-ва изделия. В принципе, все упирается только в технологии памяти, если бы была такая универсальная дешевая память со свободным доступом с высокой скоростью, не стирающаяся после сбоя питания, то фон-Неймонавская архитектура была бы наверное идеальной.
Хотя наверное, если память программ и данных разделены, есть возможность одновременно делать выборку следующей команды из памяти программ и читать/писать данные в память данных при исполнении текущей команды. Т.е. получаем ускорение за счет "двойного" обращения к памяти.
Еще раз извиняюсь за очевидные вещи.




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
