This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28388D:如何使用 VCU 库生成端点 CRC

Guru**** 2529560 points
Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/942597/tms320f28388d-how-to-use-vcu-library-to-generate-endat-crc

器件型号:TMS320F28388D
主题中讨论的其他器件:C2000WARE

我在 VCU 库中遇到了麻烦,很遗憾

我的端数据大小为27,CRC 大小为5

我应该如何设计例程?

我将程序称为流动图

流畅的设计,如何解决此问题以获得正确的程序

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是端数据交换

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    根据  endat doc,如果我的输入数据是 01_01_1100_0000_0110_0110_0000_000 (从 左 到 右为27bit,),

    我的 CRC 是3

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    • 有人能帮助我这个可怜的男孩吗

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    一位专家应该很快就会回来。 谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您需要设置 crc.nMsgBits、crc.dataSize 的值、还需要指定多项式 crc.polynomial 和多项式大小 crc.polSize。您能否与我分享您对正在处理的数据所做的更改和设置。

    谢谢

    Aravindhan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是我的更改

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是我的更改

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    顺便说一下,我能问"数据大小"的含义是什么,根据我提供的端图,我应该如何设置数据大小的数量

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    数据大小是我们希望一次运行 CRC 的数据(这是要处理的内部 CRC 引擎数据大小)  -请参阅 C2000WARE - C2000Ware_3_03_00_00\libraries\DSP\VCU\c28\docs -页码74 -第7节中的用户指南、这将为您提供一个好主意。 如果您需要进一步的帮助、请告诉我。

    谢谢

    Aravindhan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是,我认为我需要进一步的帮助,谢谢

     ?、如上所述、,如果我想运行 endat crc5,、我设置的 crc.datasize 编号,应为5 μ s

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是,我认为我需要进一步的帮助,谢谢

    如上所 述、,如果我想运行 endat crc5,我应该设置的 crc.datasize 编号,是5或8?

    • 我是否需要编写自己的 CRC5lookuptable?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的 crc5 poly 是0x0B

    这是我的 main.c

    我应该如何解决它

    //########################################################################################################################
    //! \file /2838x_vcrc_config_poly/vcrc_configpoly.c
    //!
    //! 针对 可配置多项式和数据大小(VCRC 和 C)的简要演示代码
    //!
    //! 日期  :2020年4月9日
    //!
    //! 此示例展示了如何操作
    //! -#使用 VCRC 支持的可配置多项式和数据大小
    //
    // 组:            c2000
    // 目标系列:    F2838x
    //
    //########################################################################################################################
    //$TI 发行版:C28x VCU 库 V2.20.00.00美元
    //$Release Date:2020年5月26日$
    //版权所有:版权所有(C) 2019德州仪器(TI)公司-
    //            http://www.ti.com/ 保留所有权利$
    //########################################################################################################################

    //
    //包括
    //
    #include
    #include "vcu2_types.h"
    #include "vcu2_crc.h"
    #include "vcrc_configpoly.h"
    #include "vcrc_configpoly_example.h"
    #include "dsp_examples_setup.h"
    #include "crctable0x7.h"
    #include "crctable0x7efined.h"
    #include "crctable0x8005.h"
    #include "crctable0x1021.h"
    #include "crctable0x8005efined.h"
    #include "crctable0x1021rebed.h"
    #include "crctable0x04c11db7.h"
    #include "crctable0x1edc6f41.h"
    #include "crctable0x04c11db7ex反射.h"
    #include "crctable0x1edc6f41ref反射.h"
    #include "dsp_examples_setup.h"


    //
    //定义
    //
    #define CRC_INIT_4 0x0
    #define CRC_INIT_5 0x1f
    #define CRC_INIT_8 0x0
    #define CRC_INIT_16 0x0
    #define CRC_INIT_CRC16MODBUS 0xFFFF
    #define CRC_INIT_CRC32 0xFFFFFFFF
    #define polynomial _4 0x0003
    #define polynomial _5 0x0B
    #define polynomial _8 0x0007
    #define polynomial _17 0x1685B
    #define polynomial _16_P2 0x1021
    #define polynomial _16_P1 0x8005
    #define polynomial _32_P1 0x04C11DB7
    #define polynomial _32_P2 0x1EDC6F41
    #define NO_NO_TO_TESTS 22.
    #define NBYTES1 128
    #define NWORDS1 NBYTES1/2

    //
    //全局变量
    //

    uint32_t TestOutput[no_of _tests];
    uint32_t goldenOutput[no_for_tests];
    uint16_t pass、失败;

    CRC_Obj CRC;
    crc_handlecrc;

    //位置数据从F开始01 01_1100_0000_0110_0110_0000_000 (27个)、crc=3/0x5c06、0x6000、
    位置数据从H开始000 μ 27个0000_0110_0110_0000_0011_10_10 (μ A)
    #pragma DATA_SECTION (testInput、"testInput")
    uint16_t testInput[NWORDS1]={
       0x5c06、0x6000、
    };

    #pragma DATA_SECTION (TestOutput、"TestOutput")

    MAIN ()

       //本地
       int16_t 索引= 0;

       //
       //设置系统计时
       //
       dsp_example_setupSysCtrl();

       //
       //注-
       //多项式大小- 1位的大小-通过编程值0x0来指示
       //多项式大小- 32位的大小-通过编程0x1F 的值来指示
       // Datasize 是指计算 CRC 的积分单位
       //数据大小- 1位的大小-通过编程值0x0来指示
       //数据大小-通过编程0x7值来指示8位的大小
       //在 VCRCSIZE 寄存器- PSIZE 和 DSIZE 字段中设置它们
       //在 asm 文件中实现的函数_crc_runConfigPolyBytes 和_crc_runConfigPolyBits 中设置
       // vcrc_configpoly_asm.asm
       //要计算 CRC 的报文总大小由2个元素 MsgBytes 和 MsgBits 指定
       //如果消息的大小以字节为单位,则将 crc.nMsgBytes 的值设置为消息的大小
       //并调用函数- crc_runConfigPolyBytes
       //如果消息的大小不能以字节为单位指定,则将 crc.nMsgBits 的值设置为大小
       //以位为单位的消息,并调用函数-_crc_runConfigPolyBits

       //
       //示例1和2 -针对不同 Msg 大小的按字节4位 CRC 计算->分别为128和7字节

       //步骤1:初始化 CRC 对象
       CRC.seedValue     = CRC_INIT_5;                       //输入用于 CRC 计算的种子值
       crc.nMsgBytes     = 4;                                //输入要计算 CRC 的字节数
       crc.nMsgBits      = 0;                                //输入用于 CRC 计算的位数
       crc.parity        = crc_parit_odd;                  //根据奇偶校验值选择先计算低字节(8位)的 CRC、或先计算高字节的 CRC
       crc.crcResult     = 0;                                //CRC 结果将存储在该位置
       crc.pMsgBuffer    = 0;                                //指向消息缓冲区的指针
       crc.polynomial    = polynomial _5;                     //用户多项式
       crc.PolySize      = size_5_bits;                      //polynomial size
       crc.dataSize      = size_8_bits;                      //data size
       crc.反射     = 0;                                //计算是从 LSB 还是 MSB 完成,如果 crc.反射= 1,则数据字节将在 CRC 计算之前翻转
       CRC.init          =(void (*)(void *)) crc_init16Bit;  //通过上下文保存和上下文恢复调用初始化 CRC 例程
                           取函数的地址,并将其传入的参数由实体改为地址 μ s
       CRC.run           =(void (*)(void *)) crc_run4BitENDATTableLookupC; //函数地址赋值,并没有运行

       //步骤2:初始化句柄
       handleCRC =&CRC;


           crc.nMsgBits  = 27;                                      //添加数据位数以计算 CRC
           crc.nMsgBytes = 0;                                      //对于位模式测试、我们可以保持 MsgBytes = 0、因为它不是必需的
           crc.pMsgBuffer = testInput;                               //指向 test 输入

           //步骤1:使用 C 例程计算黄金值
           CRC.run =(void (*)(void *)) crc_run4BitENDATBitTableLookupC_Generic;//函数地址赋值,并没有运行
           CRC.run(handleCRC);//这里运行的run函数时,run函数已经变为CRC_run4BitENDATBitTableLookupC_Generic
           goldenOutput[index]=(uint16_t) crc.crcResult;

           //步骤2:使用 VCRC 汇编代码运行 CRC 模块
           CRC.run =(void (*)(void *)) crc_runConfigPolyBytes;
           CRC.run(handleCRC);
           TestOutput[index++]=(uint16_t) crc.crcResult;




    //    //自检
    //    pass = 0;
    //    失败= 0;
    //
    //    for (index = 0;index < no_of _tests;index ++){
    //       if (TestOutput[index]=goldenOutput[index]){
    //           pass ++;
    //       }else{
    //           失败++;
    //       }
    //    }
    //
    //    ////如果任一示例失败-代码将在错误函数中永久循环
    //    if (pass!= no_of _tests){
    //       error();
    //    }















    传入CRC结构体地址 μ s
    void crc_run4BitENDATTableLookupC (crc_handle hndCRC)

       int16_t i、j;
       uint16_t 数据;
       uint16_t 奇偶       校验=(uint16_t) hndcrc->奇偶校验;
       uint16_t 累加  器= hndcrc->pedValue;
       uint16_t *pInputVector =(uint16_t *) hndcrc->pMsgBuffer;
       uint16_t poly = 0x000b;
       uint16_t PolySize = 5;

       //假设消息字节被打包成16位字
       //计算从高字节或低字节开始
       //内存排列如下:
       //地址|_lb_|_hb__|
       // 0x0000 |_D0L_|_D0H_|
       // 0x0001 |_D1L_|_D1H_|
       // 0x0002 |_D2L_|_D2H_|
       // 0x0003 |_D3L_|_D3H_|
       // 0x0004 |_D4L_|_D4H_|
       //...

       Poly <<=(8 - PolySize);

       for (i = 0;i < ndcrc->nMsgBytes;i++、奇偶校验++){
           //__byte 选择字中的低字节(0)或高字节(1)
           //枚举奇偶校验提供的初始选择
           //表索引是根据累加器的高字节计算得出的
           //与输入矢量中每个字的低字节和高字节异或
           数据=(uint16_t)__byte (((int *) pInputVector、奇偶校验);
           累加器^=数据;
           对于(j = 0;j < 8;j++){
               累加器<<= 1;
               if (累加器& 0x0100){
                   累加器^= poly;
               }
           }
           累加器&= 0x00FF;
       }
       //保存 CRC 结果
       ndcrc->crcResult =(uint32_t)累加器>>(8 -多尺寸);

    void crc_run4BitENDATBitTableLookupC_Generic (crc_handle hndCRC)

       int16_t i;
       uint16_t 数据;

       uint16_t 奇偶       校验=(uint16_t) hndcrc->奇偶校验;
       uint16_t 累加  器= hndcrc->pedValue;
       uint16_t *pInputVector =(uint16_t *) hndcrc->pMsgBuffer;

       uint16_t poly = 0x0003;
       uint32_t NumOfBits = ndCRC->nMsgBits;
       uint16_t bitPlace = 7;
       uint16_t newWordNext = 1;

       //假设消息字节被打包成16位字
       //计算从高字节或低字节开始
       //内存排列如下:
       //地址|_lb_|_hb__|
       // 0x0000 |_D0L_|_D0H_|
       // 0x0001 |_D1L_|_D1H_|
       // 0x0002 |_D2L_|_D2H_|
       // 0x0003 |_D3L_|_D3H_|
       // 0x0004 |_D4L_|_D4H_|
       //...

       for (i = 0;i < NumOfBits;i++){
           //__byte 选择字中的低字节(0)或高字节(1)
           //枚举奇偶校验提供的初始选择
           //表索引是根据累加器的高字节计算得出的
           //与输入矢量中每个字的低字节和高字节异或
           if (newWordNext){
               数据=(uint16_t)__byte (((int *) pInputVector、奇偶校验);
               奇偶校验++;
               newWordNext = 0;
               if ((NumberOfBits - I)<= 8){
                   bitPlace = NumOfBits - I - 1;
               }
           }
           累加器<<= 1;
           if (((累加器& 0x0010)>>4)!=(((数据&(1< >bitPlace
               累加器^= poly;
           }
           累加器&= 0x00F;
           如果(!bitPlace){
               newWordNext = 1;
               bitPlace = 7;
           }否则{
               BitPlace ----;
           }
       }
       //保存 CRC 结果
       ndcrc->crcResult =(uint32_t)累加器;


    空错误(空)

       ESTOP0; //测试失败!! 停下来!
       适用于(;);


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、我认为我需要进一步的帮助

    这是我的 mian.c

    ,上述内容、我说过 μ s 如何修复它以纠正端点 CRC

     //########################################################################################################################
    //! \file /2838x_vcrc_config_poly/vcrc_configpoly.c
    //!
    //! 针对 可配置多项式和数据大小(VCRC 和 C)的简要演示代码
    //!
    //! 日期  :2020年4月9日
    //!
    //! 此示例展示了如何操作
    //! -#使用 VCRC 支持的可配置多项式和数据大小
    //
    // 组:            c2000
    // 目标系列:    F2838x
    //
    //########################################################################################################################
    //$TI 发行版:C28x VCU 库 V2.20.00.00美元
    //$Release Date:2020年5月26日$
    //版权所有:版权所有(C) 2019德州仪器(TI)公司-
    //            http://www.ti.com/ 保留所有权利$
    //########################################################################################################################

    //
    //包括
    //
    #include
    #include "vcu2_types.h"
    #include "vcu2_crc.h"
    #include "vcrc_configpoly.h"
    #include "vcrc_configpoly_example.h"
    #include "dsp_examples_setup.h"
    #include "crctable0x7.h"
    #include "crctable0x7efined.h"
    #include "crctable0x8005.h"
    #include "crctable0x1021.h"
    #include "crctable0x8005efined.h"
    #include "crctable0x1021rebed.h"
    #include "crctable0x04c11db7.h"
    #include "crctable0x1edc6f41.h"
    #include "crctable0x04c11db7ex反射.h"
    #include "crctable0x1edc6f41ref反射.h"
    #include "dsp_examples_setup.h"


    //
    //定义
    //
    #define CRC_INIT_4 0x0
    #define CRC_INIT_5 0x1f
    #define CRC_INIT_8 0x0
    #define CRC_INIT_16 0x0
    #define CRC_INIT_CRC16MODBUS 0xFFFF
    #define CRC_INIT_CRC32 0xFFFFFFFF
    #define polynomial _4 0x0003
    #define polynomial _5 0x0B
    #define polynomial _8 0x0007
    #define polynomial _17 0x1685B
    #define polynomial _16_P2 0x1021
    #define polynomial _16_P1 0x8005
    #define polynomial _32_P1 0x04C11DB7
    #define polynomial _32_P2 0x1EDC6F41
    #define NO_NO_TO_TESTS 22.
    #define NBYTES1 128
    #define NWORDS1 NBYTES1/2

    //
    //全局变量
    //

    uint32_t TestOutput[no_of _tests];
    uint32_t goldenOutput[no_for_tests];
    uint16_t pass、失败;

    CRC_Obj CRC;
    crc_handlecrc;

    //位置数据从F开始01 01_1100_0000_0110_0110_0000_000 (27个)、crc=3/0x5c06、0x6000、
    位置数据从H开始000 μ 27个0000_0110_0110_0000_0011_10_10 (μ A)
    #pragma DATA_SECTION (testInput、"testInput")
    uint16_t testInput[NWORDS1]={
       0x5c06、0x6000、
    };

    #pragma DATA_SECTION (TestOutput、"TestOutput")

    MAIN ()

       //本地
       int16_t 索引= 0;

       //
       //设置系统计时
       //
       dsp_example_setupSysCtrl();

       //
       //注-
       //多项式大小- 1位的大小-通过编程值0x0来指示
       //多项式大小- 32位的大小-通过编程0x1F 的值来指示
       // Datasize 是指计算 CRC 的积分单位
       //数据大小- 1位的大小-通过编程值0x0来指示
       //数据大小-通过编程0x7值来指示8位的大小
       //在 VCRCSIZE 寄存器- PSIZE 和 DSIZE 字段中设置它们
       //在 asm 文件中实现的函数_crc_runConfigPolyBytes 和_crc_runConfigPolyBits 中设置
       // vcrc_configpoly_asm.asm
       //要计算 CRC 的报文总大小由2个元素 MsgBytes 和 MsgBits 指定
       //如果消息的大小以字节为单位,则将 crc.nMsgBytes 的值设置为消息的大小
       //并调用函数- crc_runConfigPolyBytes
       //如果消息的大小不能以字节为单位指定,则将 crc.nMsgBits 的值设置为大小
       //以位为单位的消息,并调用函数-_crc_runConfigPolyBits

       //
       //示例1和2 -针对不同 Msg 大小的按字节4位 CRC 计算->分别为128和7字节

       //步骤1:初始化 CRC 对象
       CRC.seedValue     = CRC_INIT_5;                       //输入用于 CRC 计算的种子值
       crc.nMsgBytes     = 4;                                //输入要计算 CRC 的字节数
       crc.nMsgBits      = 0;                                //输入用于 CRC 计算的位数
       crc.parity        = crc_parit_odd;                  //根据奇偶校验值选择先计算低字节(8位)的 CRC、或先计算高字节的 CRC
       crc.crcResult     = 0;                                //CRC 结果将存储在该位置
       crc.pMsgBuffer    = 0;                                //指向消息缓冲区的指针
       crc.polynomial    = polynomial _5;                     //用户多项式
       crc.PolySize      = size_5_bits;                      //polynomial size
       crc.dataSize      = size_8_bits;                      //data size
       crc.反射     = 0;                                //计算是从 LSB 还是 MSB 完成,如果 crc.反射= 1,则数据字节将在 CRC 计算之前翻转
       CRC.init          =(void (*)(void *)) crc_init16Bit;  //通过上下文保存和上下文恢复调用初始化 CRC 例程
                           取函数的地址,并将其传入的参数由实体改为地址 μ s
       CRC.run           =(void (*)(void *)) crc_run4BitENDATTableLookupC; //函数地址赋值,并没有运行

       //步骤2:初始化句柄
       handleCRC =&CRC;


           crc.nMsgBits  = 27;                                      //添加数据位数以计算 CRC
           crc.nMsgBytes = 0;                                      //对于位模式测试、我们可以保持 MsgBytes = 0、因为它不是必需的
           crc.pMsgBuffer = testInput;                               //指向 test 输入

           //步骤1:使用 C 例程计算黄金值
           CRC.run =(void (*)(void *)) crc_run4BitENDATBitTableLookupC_Generic;//函数地址赋值,并没有运行
           CRC.run(handleCRC);//这里运行的run函数时,run函数已经变为CRC_run4BitENDATBitTableLookupC_Generic
           goldenOutput[index]=(uint16_t) crc.crcResult;

           //步骤2:使用 VCRC 汇编代码运行 CRC 模块
           CRC.run =(void (*)(void *)) crc_runConfigPolyBytes;
           CRC.run(handleCRC);
           TestOutput[index++]=(uint16_t) crc.crcResult;




    //    //自检
    //    pass = 0;
    //    失败= 0;
    //
    //    for (index = 0;index < no_of _tests;index ++){
    //       if (TestOutput[index]=goldenOutput[index]){
    //           pass ++;
    //       }else{
    //           失败++;
    //       }
    //    }
    //
    //    ////如果任一示例失败-代码将在错误函数中永久循环
    //    if (pass!= no_of _tests){
    //       error();
    //    }















    传入CRC结构体地址 μ s
    void crc_run4BitENDATTableLookupC (crc_handle hndCRC)

       int16_t i、j;
       uint16_t 数据;
       uint16_t 奇偶       校验=(uint16_t) hndcrc->奇偶校验;
       uint16_t 累加  器= hndcrc->pedValue;
       uint16_t *pInputVector =(uint16_t *) hndcrc->pMsgBuffer;
       uint16_t poly = 0x000b;
       uint16_t PolySize = 5;

       //假设消息字节被打包成16位字
       //计算从高字节或低字节开始
       //内存排列如下:
       //地址|_lb_|_hb__|
       // 0x0000 |_D0L_|_D0H_|
       // 0x0001 |_D1L_|_D1H_|
       // 0x0002 |_D2L_|_D2H_|
       // 0x0003 |_D3L_|_D3H_|
       // 0x0004 |_D4L_|_D4H_|
       //...

       Poly <<=(8 - PolySize);

       for (i = 0;i < ndcrc->nMsgBytes;i++、奇偶校验++){
           //__byte 选择字中的低字节(0)或高字节(1)
           //枚举奇偶校验提供的初始选择
           //表索引是根据累加器的高字节计算得出的
           //与输入矢量中每个字的低字节和高字节异或
           数据=(uint16_t)__byte (((int *) pInputVector、奇偶校验);
           累加器^=数据;
           对于(j = 0;j < 8;j++){
               累加器<<= 1;
               if (累加器& 0x0100){
                   累加器^= poly;
               }
           }
           累加器&= 0x00FF;
       }
       //保存 CRC 结果
       ndcrc->crcResult =(uint32_t)累加器>>(8 -多尺寸);

    void crc_run4BitENDATBitTableLookupC_Generic (crc_handle hndCRC)

       int16_t i;
       uint16_t 数据;

       uint16_t 奇偶       校验=(uint16_t) hndcrc->奇偶校验;
       uint16_t 累加  器= hndcrc->pedValue;
       uint16_t *pInputVector =(uint16_t *) hndcrc->pMsgBuffer;

       uint16_t poly = 0x0003;
       uint32_t NumOfBits = ndCRC->nMsgBits;
       uint16_t bitPlace = 7;
       uint16_t newWordNext = 1;

       //假设消息字节被打包成16位字
       //计算从高字节或低字节开始
       //内存排列如下:
       //地址|_lb_|_hb__|
       // 0x0000 |_D0L_|_D0H_|
       // 0x0001 |_D1L_|_D1H_|
       // 0x0002 |_D2L_|_D2H_|
       // 0x0003 |_D3L_|_D3H_|
       // 0x0004 |_D4L_|_D4H_|
       //...

       for (i = 0;i < NumOfBits;i++){
           //__byte 选择字中的低字节(0)或高字节(1)
           //枚举奇偶校验提供的初始选择
           //表索引是根据累加器的高字节计算得出的
           //与输入矢量中每个字的低字节和高字节异或
           if (newWordNext){
               数据=(uint16_t)__byte (((int *) pInputVector、奇偶校验);
               奇偶校验++;
               newWordNext = 0;
               if ((NumberOfBits - I)<= 8){
                   bitPlace = NumOfBits - I - 1;
               }
           }
           累加器<<= 1;
           if (((累加器& 0x0010)>>4)!=(((数据&(1< >bitPlace
               累加器^= poly;
           }
           累加器&= 0x00F;
           如果(!bitPlace){
               newWordNext = 1;
               bitPlace = 7;
           }否则{
               BitPlace ----;
           }
       }
       //保存 CRC 结果
       ndcrc->crcResult =(uint32_t)累加器;


    空错误(空)

       ESTOP0; //测试失败!! 停下来!
       适用于(;);


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我是否可以认为这个问题已得到解决? 请告诉我。

    谢谢

    Aravindhan