"...The CortexM3 processor has a total of 4 GB of address space. Program code can be located in the code region, the Static Random Access Memory (SRAM) region, or the external RAM region. However, it is best to put the program code in the code region because with this arrangement, the instruction fetches and data accesses are carried out simultaneously on two separate bus interfaces (I-Code, D-Code). "
Еще цитата: "В процессоре CortexM3 при условии, что память имеет нулевую латентность, и учитывая, что архитектура шин позволяет одновременно ocyществлять выборку вектора и сохранение контекста проrраммы, минимальная величина задержки обработки прерывания составляет 12 тактов. Это время yxoдит на сохранение реrистров в стеке, выборку вектора и выборку первых команд обработчика прерывания. В то же время указанная величина зависит от наличия циклов ожидания при обращении к памяти и ряда друrих факторов. "
3-х уровневый конвеер "выборки-декодирования-выполнения" команд тоже оптимизирован под код из Flash.
Кроме того, при наступлении прерывания (то же относится и к возврату из обработчика), в SRAM сохраняется контекст - стековый фрейм (8 регистров) одновременно с выборкой вектора и первой исполняемой команды оброботчика. Эта "одновременность" может быть достигнута если код обработчика будет во флэш! Иначе весь обмен будет по системной шине ч/з которую подключено SRAM. Что приведет к задержкам. Если в обработчике идет интенсивный обмен данными с SRAM, то используйте выравнивание данных иначе будут лишние такты шины.
Cortex-M3 оптимизирован для обработки прерываний с маленькой задержкой (latenсy). Поэтому для быстрого обработчика с минимальной latency все же лучше подходит Flash, чем SRAM.
|