⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 icanobja.c51

📁 infineon C515C RTX51 example. it contains example on using this device
💻 C51
📖 第 1 页 / 共 3 页
字号:
             can_obj_buf[nbr_of_obj].task_bind = NO_BIND;
             can_obj_buf[nbr_of_obj].obj_read = TRUE;

             can_obj_buf[nbr_of_obj].contr_adr =
                 CONTR_BUF_START_ADR + (nbr_of_obj - 1) * MESSAGE_SIZE;

             c_init_obj (identifier,
                        data_length,
                        obj_typ,
                        can_obj_buf[nbr_of_obj].contr_adr,
                        FALSE); /* 0 for extended */
             return C_OK;
          }
          else {
             /* Objekt existiert schon */
             return C_OBJ_ERROR;
          }
    }

/*---------------------------------------------------------------------*
 *     C _ D E F I N E _ L _ O B J
 *---------------------------------------------------------------------*
 *  Funktion:
 *     Definiert 15. Objekt im Objekt-Buffer
 *       resultierende Akzeptanz-Maske
 *
 *---------------------------------------------------------------------*
 *  Parameter:
 *
 *     mask_15      : 15. Obj Mask
 *     data_length  : Anzahl Datenbytes des zu definierenden
 *                    Objektes (0..8)
 *
 *     Returnwert   : OK, OBJ_ERROR, TOO_LONG
 *
 *---------------------------------------------------------------------*/

    byte c_define_l_obj (unsigned long mask_15,
                       byte data_length
                       )

    {
          if (mask_15 > MAX_OBJECT_IDENT) return C_OBJ_ERROR;

          if (can_obj_buf[MAX_OBJECTS].identifier == 0) {
             can_obj_buf[MAX_OBJECTS].identifier = mask_15;
             can_obj_buf[MAX_OBJECTS].obj_typ = D_REC;
             can_obj_buf[MAX_OBJECTS].standart = TRUE;
             can_obj_buf[MAX_OBJECTS].data_length = data_length;
             can_obj_buf[MAX_OBJECTS].task_bind = NO_BIND;
             can_obj_buf[MAX_OBJECTS].obj_read = TRUE;

             can_obj_buf[MAX_OBJECTS].contr_adr =
                 CONTR_BUF_START_ADR + (MAX_OBJECTS -1 ) * MESSAGE_SIZE ;

             c_init_obj (mask_15,
                        data_length,
                        D_REC,
                        can_obj_buf[MAX_OBJECTS].contr_adr,
                        TRUE); /* 1 for standart */
             return C_OK;
          }
          else {
             /* Objekt existiert schon */
             return C_OBJ_ERROR;
          }
   }

/*---------------------------------------------------------------------*
 *     C _ D E F I N E _ L _ O B J _ E X T
 *---------------------------------------------------------------------*
 *  Funktion:
 *     Definiert 15. Objekt im Objekt-Buffer
 *
 *---------------------------------------------------------------------*
 *  Parameter:
 *
 *     mask_15      : 15. Obj Mask
 *     data_length  : Anzahl Datenbytes des zu definierenden
 *                    Objektes (0..8)
 *
 *     Returnwert   : OK, OBJ_ERROR, TOO_LONG
 *
 *---------------------------------------------------------------------*/

    byte c_define_l_obj_ext (unsigned long mask_15,
                       byte data_length
                       )

    {

          if (mask_15 > MAX_OBJECT_IDENT_EXT) return C_OBJ_ERROR;

          if (can_obj_buf[MAX_OBJECTS].identifier == 0) {
             can_obj_buf[MAX_OBJECTS].identifier = mask_15;
             can_obj_buf[MAX_OBJECTS].obj_typ = D_REC;
             can_obj_buf[MAX_OBJECTS].standart = TRUE;
             can_obj_buf[MAX_OBJECTS].data_length = data_length;
             can_obj_buf[MAX_OBJECTS].task_bind = NO_BIND;
             can_obj_buf[MAX_OBJECTS].obj_read = TRUE;

             can_obj_buf[MAX_OBJECTS].contr_adr =
                 CONTR_BUF_START_ADR + (MAX_OBJECTS -1 ) * MESSAGE_SIZE ;

             c_init_obj (mask_15,
                        data_length,
                        D_REC,
                        can_obj_buf[MAX_OBJECTS].contr_adr,
                        FALSE ); /* 0 for extended */
             return C_OK;
          }
          else {
             /* Objekt existiert schon */
             return C_OBJ_ERROR;
          }
    }


#pragma eject
/*---------------------------------------------------------------------*
 *     Zugriffsfunktionen                                              *
 *---------------------------------------------------------------------*/

 /* Die Applikation benutzt die Objekt-Identifikation f乺 den Zugriff  */
 /* auf ein bestimmtes Objekt. Intern wird jedoch nur der Index eines  */
 /* bestimmten Objektes innerhalb des Objektbuffers zum Zugriff        */
 /* benutzt. Mit den Prozeduren C_GET_INDEX und C_GET_IDENT    */
 /* kann der Index resp. die Identifikation eines bestimmten Objektes  */
 /* ermittelt werden.                                                  */
 /*                                                                    */
 /* Die jeweiligen Zugriffsprozeduren testen aus Zeitgr乶den jeweils   */
 /* nicht mehr ob ein bestimmter Index tats刢hlich einem definierten   */
 /* Objekt entspricht !                                                */


/*---------------------------------------------------------------------*
 *       C _ G E T _ I N D E X _ F R O M _ I D E N T
 *---------------------------------------------------------------------*
 *  Funktion:
 *     Testet ob das Objekt IDENTIFIER im Objekt-Buffer definiert ist
 *     und gibt den entsprechenden Index innerhalb CAN_OBJ_BUF zur乧k.
 *
 *---------------------------------------------------------------------*
 *  Parameter:
 *
 *     identifier   :    Identifikation des gesuchten Objektes
 *
 *     Returnwert   :    0        -->   Das Objekt IDENTIFIER existiert
 *                                      nicht
 *                       1 .. 14 -->   Index des Objektes IDENTIFIER
 *
 *---------------------------------------------------------------------*/
   byte c_get_index_from_ident (unsigned long identifier)

{
   byte i, temp;

   temp = nbr_of_obj;
   for (i=1; i<=temp; i++) {
      if (can_obj_buf[i].identifier == identifier) return i;
   }
   return 0;
}



/*---------------------------------------------------------------------*
 *     C _ G E T _ I D E N T
 *---------------------------------------------------------------------*
 *  Funktion:
 *     Gibt den Identifier des Objektes mit dem INDEX innerhalb
 *     CAN_OBJ_BUF zur乧k.
 *
 *---------------------------------------------------------------------*
 *  Parameter:
 *
 *     index        :    Index des gesuchten Objektes(1..14)
 *
 *     Returnwert   :    Identifikation des gew乶schten Objektes
 *                       FFFFFFFFH      ->  Objekt existiert nicht
 *                                          oder 15. Objekt
 *---------------------------------------------------------------------*/
   unsigned long c_get_ident (byte index)

{
   if ((index == 0) || (index > nbr_of_obj)) return 0xffffffff;
   return can_obj_buf[index].identifier;
}


/*---------------------------------------------------------------------*
 *     C _ G E T _ R E C _ B I N D
 *---------------------------------------------------------------------*
 *  Funktion:
 *     Gibt den Index eines neu empfangenen und noch nicht von der
 *     Applikation gelesenen Objektes, das fest an den Task TASK_ID
 *     gebunden ist, zur乧k.
 *
 *---------------------------------------------------------------------*
 *  Parameter:
 *
 *     task_id   :    Task-Identifikation des Tasks an den das Objekt
 *                    gebunden ist
 *
 *     Returnwert   :    0        -->   Es existiert kein gew乶schtes Objekt
 *                       1 .. 15  -->   Index des Objektes
 *
 *---------------------------------------------------------------------*/

byte c_get_rec_bind (byte task_id)
{
   byte i, ind;

   for (i=0; i<=MAX_BIND_OBJ-1; i++) {
      ind = bind_index_list[i];
      if (ind != 0) {
         if (can_obj_buf[ind].task_bind == task_id) {
            if (!(can_obj_buf[ind].obj_read)) {
               return ind;
            }
         }
      }
   }
   return 0;
}



/*---------------------------------------------------------------------*
 *     C _ G E T _ O B J _ T Y P
 *---------------------------------------------------------------------*
 *  Funktion:
 *     Gibt den Objekttyp wie in C_DEFINE_OBJ definiert des Objektes
 *     INDEX zur乧k.
 *
 *---------------------------------------------------------------------*
 *  Parameter:
 *
 *     index        :    Index des Objektes innerhalb CAN_OBJ_BUF dessen
 *                       Typ gelesen werden soll
 *
 *     Returnwert   :    Objekttyp des Objektes INDEX
 *
 *---------------------------------------------------------------------*/

byte c_get_obj_typ (byte index)
{
   return can_obj_buf[index].obj_typ;
}



/*---------------------------------------------------------------------*
 *     C _ W R I T E _ D A T A
 *---------------------------------------------------------------------*
 *  Funktion:
 *     Schreiben von Daten aus dem Array ARR in das Objekt mit INDEX
 *     im Objekt-Buffer.
 *     Es werden soviele Datenbytes geschrieben wie DATA_LENGTH
 *     des entsprechenden Objektes angibt.
 *       Die Daten werden nur in das Objekt geschrieben, sie werden
 *     nicht gesendet.
 *
 *---------------------------------------------------------------------*
 *  Parameter:
 *
 *     index      :      Index des Objektes innerhalb OBJ_BUF in das
 *                       geschrieben werden soll
 *
 *     arr        :      Zu schreibende Daten
 *
 *---------------------------------------------------------------------*/

void c_write_data (byte index,
                   byte xdata *arr)
{
   byte temp;

   if (can_obj_buf[index].data_length > 0) {
      /* Der Returnwert der Funktion wird nicht ausgewertet */
     /* Nur f乺 interne Testzwecke                           */
      temp = c_write_obj (can_obj_buf[index].contr_adr, arr);
   }
}



/*---------------------------------------------------------------------*
 *     C _ R E A D _ D A T A
 *---------------------------------------------------------------------*
 *  Funktion:
 *     Lesen der Daten des Objektes INDEX im Objekt-Buffer. Es werden
 *     soviele Daten gelesen, wie DATA_LENGTH des entsprechenden
 *     Objektes angibt.
 *
 *---------------------------------------------------------------------*
 *  Parameter:
 *
 *     index       :  Index des Objektes in OBJ_BUF aus dem gelesen
 *                    werden soll.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -