Как создать расширенный идентификатор сообщения в CAPL?

CAPL принимает определения сообщений, подобные следующим

сообщение 100x mymsg

Однако он не принимает длинные идентификаторы сообщений, как в случае расширенных полезных нагрузок. Другими словами, это то, что я хотел бы сделать (и CAPL не принимает):

сообщение 18FEF889x mymsg

Я знаю, что есть функция mkExtId(), хотя я до сих пор не выяснил, как она работает. Я пробовал что-то вроде

сообщение 18FEF889x mymsg

mkExtId (mymsg.id)

но это все еще не работает. У кого-нибудь есть идеи?

Спасибо

3 ответа

Решение
  1. Сначала объявите сообщение без идентификатора

    сообщение *ExtMsg; // Декларация без идентификатора

  2. Используйте функцию CAPl mkExtId() для возврата расширенного идентификатора
  3. назначьте этот идентификатор сообщению.
variables
{
  timer T1 = 1;
  message 0x100 stdMsg;
  dword ext_id ;
  message *ExtMsg;  // Declaration without Id
}

on start
{
  setTimer(T1,1);
  ext_id = mkExtId(0x34444);
  ExtMsg.id = ext_id;
  ExtMsg.dlc = 2;
}

on Timer T1
{
 ExtMsg.byte(0) = 99;
 stdMsg.stdSignal =2;
 output(stdMsg);
 output(ExtMsg);
 setTimer(T1,1);
}

Вы можете просто объявить сообщение следующим образом:

message 0x114455x msg;

Функция mkExtId возвращает расширенный идентификатор, который затем вы передаете id если сообщение, вот пример:

Эта функция устанавливает расширенный идентификатор передаваемого сообщения:

void setExtId(dword x_id, message* m)
{
  dword ext_id;
  ext_id = mkExtId(0x1FFFFFFF);
  m.id = mkExtId(x_id);
  if(m.id == ext_id)
  {
    write("some stuff");
  }
}
Другие вопросы по тегам