Улучшите когерентность данных в сгенерированном коде

Для моделей, содержащих операции чтения и операции записи для Блоков памяти Хранилища данных, можно сгенерировать код, который содержит одну переменную, чтобы содержать значение для каждой Операции чтения Хранилища данных и Операции записи. Генерация одной переменной для каждой операции улучшает когерентность доступа к данным.

Модель в качестве примера

Модель data_store_latching содержит один Блок памяти Хранилища данных, к которому получают доступ две различной Памяти Хранилища данных Рид и два блока Записи Памяти Хранилища данных. Два блока Суммы выполняют сложение на входе, сгенерированном по условию блоки Стора Рида, и выводят данные к блокам Записи Хранилища данных.

Сгенерируйте код без Enabled параметра

При создавании модели с параметром Implement each data store block as a unique access point, выключенным по умолчанию, генерирует этот код:

void data_store_latching_step(void)
	{
	  /* DataStoreWrite: '<Root>/Data Store Write' incorporates:
	   *  DataStoreRead: '<Root>/Data Store Read'
	   *  Sum: '<Root>/Add'
	   */
	  data_store_latching_DW.A += data_store_latching_DW.A +
	    data_store_latching_DW.A;
	
	  /* DataStoreWrite: '<Root>/Data Store Write1' incorporates:
	   *  DataStoreRead: '<Root>/Data Store Read1'
	   *  Sum: '<Root>/Add1'
	   */
	  data_store_latching_DW.A += data_store_latching_DW.A +
	    data_store_latching_DW.A;
	}
И для операций чтения данных и для операций записи, код содержит глобальную переменную data_store_latching_DW.A.

Сгенерируйте код с Enabled параметром

В диалоговом окне Configuration Parameters, на панели Interface, выбирают Implement каждый блок хранилища данных как уникальный параметр точки доступа. Нажмите Apply.

Сгенерированный код теперь:

void data_store_latching_step(void)
	{
	  real_T rtb_DataStoreRead;
	  real_T rtb_DataStoreRead1;
	
	  /* DataStoreRead: '<Root>/Data Store Read' */
	  rtb_DataStoreRead = data_store_latching_DW.A;
	
	  /* DataStoreWrite: '<Root>/Data Store Write' incorporates:
	   *  Sum: '<Root>/Add'
	   */
	  data_store_latching_DW.A = (rtb_DataStoreRead + rtb_DataStoreRead) +
	    rtb_DataStoreRead;
	
	  /* DataStoreRead: '<Root>/Data Store Read1' */
	  rtb_DataStoreRead1 = data_store_latching_DW.A;
	
	  /* DataStoreWrite: '<Root>/Data Store Write1' incorporates:
	   *  Sum: '<Root>/Add1'
	   */
	  data_store_latching_DW.A = (rtb_DataStoreRead1 + rtb_DataStoreRead1) +
	    rtb_DataStoreRead1;
	}
Для каждой операции чтения хранилища данных код содержит переменную. Переменными является rtb_DataStoreRead и rtb_DataStoreRead1. Эти отдельные переменные улучшают когерентность доступа к данным.

Похожие темы