Приложения
Приложение А. Функции, константы и структуры RDS
А.5. Сервисные функции и макросы RDS
А.5.7. Сохранение и загрузка состояния схемы
А.5.7.4. rdsSaveSystemState – сохранить состояние блока/подсистемы
Функция rdsSaveSystemState сохраняет в памяти состояние указанного блока или подсистемы. Позже это состояние может быть загружено функцией rdsLoadSystemState.
int RDSCALL rdsSaveSystemState( RDS_BHANDLE Block, // Блок или подсистема int StateNum, // Номер состояния или -1 BOOL Recurse, // Включать вложенные блоки RDS_BBhpB CallBack // Функция проверки );
Тип указателя на эту функцию
RDS_IBhIBCb2
Параметры
- Block (RDS_BHANDLE)
- Идентификатор блока (подсистемы), состояние которого нужно сохранить.
- StateNum (int)
- Номер ранее сохраненного состояния схемы, которое нужно заменить на сохраняемое, или −1, если нужно создать в памяти новое сохраненное состояние.
- Recurse (BOOL)
- Если Block – подсистема, в этом параметре передается TRUE, если нужно сохранять состояние не только этой подсистемы и всех блоков, непосредственно находящихся в ней, но всех блоков во всех ее вложенных подсистемах. FALSE, если нужно вызывать функцию только для блоков, непосредственно находящихся в подсистеме Block. Если Block – не подсистема, этот параметр игнорируется.
- CallBack (RDS_BBhpB)
- Указатель на пользовательскую функцию, которую нужно вызвать для каждого блока, состояние которого будет
сохраняться, или NULL, если такой функции нет. С помощью этой пользовательской функции
можно, при необходимости, запретить запись состояния отдельных блоков. Она должна иметь следующий вид:
BOOL RDSCALL имя_функции(RDS_BHANDLE block,BOOL *pgo);
В параметре block пользовательской функции передается идентификатор блока, состояние которого должно сейчас сохраниться. Если состояние этого блока нужно сохранять, функция должна вернуть TRUE, если же его нужно пропустить и перейти к записи состояния следующего блока, функция должна вернуть FALSE. В параметре pgo передается указатель на логическую переменную, в которую функция может записать FALSE (исходно в этой переменной находится TRUE), чтобы после обработки блока block прекратить запись состояний оставшихся блоков.
Возвращаемое значение
Номер сохраненного состояния, который может использоваться для его загрузки функцией rdsLoadSystemState и удаления функцией rdsDeleteSystemState.
Примечания
Эта функция сохраняет в памяти текущее состояние отдельного блока или подсистемы. Если в параметре Block передан идентификатор простого блока, внешнего входа/выхода или ввода шины, сохраняется состояние только этого блока. Если в параметре Block передан идентификатор подсистемы, сохраняется состояние этой подсистемы и всех непосредственно находящихся в ней блоков. Если параметр Recurse имеет значение TRUE, будут также сохранены состояния всех блоков, находящихся в подсистеме Block на более низких уровнях иерархии (внутренние блоки внутренних подсистем). При необходимости, в параметре CallBack можно передать указатель на функцию обратного вызова, с помощью которой можно разрешать или запрещать сохранение состояния каждого из блоков, а также прервать сохранение состояния в нужный момент. Если в CallBack передано значение NULL, будут записаны все состояния блоков, удовлетворяющих параметрам функции.
При сохранении состояния блока в память записываются значения всех его статических переменных, после чего модель блока вызывается для реакции на событие RDS_BFM_SAVESTATE, в которой она должна записать в память все остальные данные, относящиеся к текущему состоянию блока. Сохраненному состоянию присваивается уникальный целый номер, который можно использовать для его последующей загрузки или удаления. Можно не создавать новое сохраненное состояние, а заменить им уже существующее, передав в параметре StateNum номер этого существующего состояния (функция в этом случае вернет число, равное StateNum).
Пример
Пример использования функции rdsSaveSystemState приведен в §2.14.3 руководства программиста.
См. также
rdsLoadSystemState, rdsDeleteSystemState, RDS_BFM_LOADSTATE, RDS_BFM_SAVESTATE, rdsWriteBlockData.