Навигация:
<< >> Оглавление Указатель

Приложения

Приложение А. Функции, константы и структуры RDS

А.2. События блока и связанные с ними описания

А.2.4. События общего назначения

А.2.4.22. RDS_BFM_VARCHECK – проверка допустимости структуры статических переменных блока

Поток, в котором вызывается функция модели

Главный поток RDS.

Первый параметр функции модели (int CallMode)

Константа RDS_BFM_VARCHECK.

Третий параметр функции модели (void *ExtParam)

Указатель на строку типа (char*) статических переменных блока.

Возвращаемое функцией модели значение

RDS_BFR_DONE Структура переменных блока удовлетворяет требованиям модели.
RDS_BFR_ERROR Структура переменных блока не удовлетворяет требованиям модели, все дальнейшие реакции, кроме RDS_BFM_CLEANUP и новых RDS_BFM_VARCHECK, будут заблокированы.
RDS_BFR_BADVARSMSG Структура переменных блока не удовлетворяет требованиям модели, все дальнейшие реакции, кроме RDS_BFM_CLEANUP и новых RDS_BFM_VARCHECK, будут заблокированы, пользователю будет выведено сообщение.

Примечания

Событие RDS_BFM_VARCHECK возникает при подключении к простому блоку новой модели после события RDS_BFM_INIT, а также при любом изменении структуры статических переменных блока. У подсистем, внешних входов/выходов и вводов шин это событие не возникает. Реагируя на это событие, функция модели должна сообщить RDS, подходит ли ей данная структура переменных. Если функция вернет константу RDS_BFR_DONE, структура будет считаться подходящей, и модель блока будет вызываться RDS для реакции на все остальные события. Если же она вернет RDS_BFR_ERROR или RDS_BFR_BADVARSMSG, все события, кроме очистки данных блока (RDS_BFM_CLEANUP) и повторных проверок структуры переменных не будут передаваться в модель блока. Таким образом, написав реакцию на событие RDS_BFM_VARCHECK, программист может быть уверен, что структура статических переменных блока соответствует его ожиданиям, что даст ему возможность обращаться к этим переменным по фиксированным смещениям относительно начала дерева переменных. Работа со статическими переменными блока и примеры реакций на событие RDS_BFM_VARCHECK подробно рассмотрены в §2.5 руководства программиста.

Текущая структура переменных блока, которую модель должна проанализировать, передается в третьем параметре функции в виде строки типа, в которой каждой переменной соответствует символ, обозначающий ее тип (все символы относятся к латинскому алфавиту):

Символ Константа в RDS Обозначаемый тип
S RDS_VARTYPE_SIGNAL Сигнал (1 байт)
L RDS_VARTYPE_LOGICAL Логический (1 байт)
C RDS_VARTYPE_CHAR char (целый, 1 байт)
H RDS_VARTYPE_SHORT short int (целый, 2 байта)
I RDS_VARTYPE_INT int (целый, 4 байта)
F RDS_VARTYPE_FLOAT float (вещественный, 4 байта)
D RDS_VARTYPE_DOUBLE double (вещественный двойной точности, 8 байтов)
A RDS_VARTYPE_STRING Строка в кодировке UTF8 (char*, завершается нулевым байтом)
V RDS_VARTYPE_RUNTIME Произвольный тип (изменяется в процессе работы)
M RDS_VARTYPE_ARRAY Массив или матрица (следующий символ – тип элемента)
{ RDS_VARTYPE_STRUCT Начало структуры (начиная со следующего символа описываются типы полей структуры)
} RDS_VARTYPE_STRUCTEND Конец структуры (описание типов полей структуры закончилось)

Последовательность таких символов однозначно описывает структуру статических переменных блока и их размещение в памяти. Поскольку вся совокупность переменных блока с точки зрения RDS является структурой, строка типа всегда начинается с символа «{» и заканчивается символом «}». Ниже приведены некоторые примеры строк типа переменных блоков:

Строка Расшифровка
«{SSDD}» Две первых переменных блока – сигналы («S»), за ними следуют две вещественных переменных двойной точности («D»).
«{SSMIA}» Две первых переменных блока – сигналы («S»), за ними следует массив или матрица целых чисел («MI»), за ней – строка («A»).
«{SSVMMD}» Два сигнала («S»), переменная произвольного типа («V»), матрица матриц вещественных чисел («MMD»).
«{SS{DD}I{DD}}» Два сигнала («S»), структура с двумя вещественными полями двойной точности («{DD}»), целое число («I»), снова структура с двумя вещественными полями двойной точности («{DD}»).
«{SSM{IDMA}}» Два сигнала («S») и матрица («M») структур, содержащих три поля: целое («I»), вещественное («D») и матрицу строк («MA»).

Строка типа переменных простого блока всегда начинается с двух букв «S», поскольку две первых переменных любого простого блока – это сигнал запуска и сигнал готовности. В строке типа не содержится никакой информации о том, является ли переменная входом или выходом, о ее имени и об именах используемых структур (для структур указываются только типы их полей). Вся эта информация не влияет на собственно структуру дерева переменных, то есть на смещения к данным каждой переменной от начала дерева. По той же причине в строке типа не делается различия между матрицами и массивами – в RDS они хранятся в памяти одинаково (см. §2.5.3 руководства программиста).

Модель блока должна сравнить полученную ей в реакции на событие RDS_BFM_VARCHECK строку типа с одной или несколькими заложенными в нее строками, и вернуть RDS константу, указывающую на допустимость данной структуры переменных для данной модели. Возврат RDS_BFR_ERROR отличается от возврата RDS_BFR_BADVARSMSG только тем, что в последнем случае RDS выведет пользователю сообщение о недопустимости структуры переменных блока.

Пример

Реакция на событие RDS_BFM_VARCHECK в модели, которая, помимо двух обязательных сигналов, должна иметь три вещественных переменных двойной точности:

  switch(CallMode)
      {
        case :
          if(strcmp((char*)ExtParam,"{SSDDD}")==0)
            return RDS_BFR_DONE;
          return RDS_BFR_BADVARSMSG;

См. также

RDS_BFM_CLEANUP, RDS_BLOCKDATA.


<< >> Оглавление Указатель