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.

[参考译文] RTOS/CC1310:加密驱动程序:Error[Pe070]:不允许不完整类型

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/579010/rtos-cc1310-crypto-driver-error-pe070-incomplete-type-is-not-allowed

器件型号:CC1310

工具/软件:TI-RTOS

大家好、我正在使用 TI RTOS tirtos_cc13xx_cc26xx_2_21_00_06。

  在 Crypto 驱动程序代码中、我添加了折页:

#include "bsp\Board.h"
#include "Crypto.HPP"
#include "crypto\CryptoCC26XX.h"

编译器给出错误:

构建配置:TestDetectorDebugPortStack - AddOn5x5
正在更新生成树...
执行预编译操作
crypto.cpp
错误[PE070]:不允许不完整类型 C:\ti_tirtos_cc13xx_cc26xx_2_21_00_06\products\tidrivers_cc13xx_cc26xx_2_21_00_04\packages/ti\drivers\crypto\CryptoCC26XX.h 524
运行 C/C++编译器时出错

错误总数:1.
警告总数:0

问题出在这里 CryptoCC26XX 第524行:  

/*!
*@CryptoCC26XX 事务简介
*
*此结构定义了常规加密事务的性质。 操作
*客户端必须使用特定对象、例如 CryptoCC26XX_AESCM_Transaction。
*在调用交易时,所有交易都必须采用这种通用类型
函数。 所有事务的第一个数据必须包含一个类型字段、用于指示
要执行的事务类型。
*
typedef struct CryptoCC26XX_Transaction{
CryptoCC26XX_Operation opType;/*!<加密操作的类型*/
CryptoCC26XX_Mode 模式;/*!<当前事务的模式*/
uint8_t data[];/*!<指向事务其余部分(transac. specific)的空指针*/
}CryptoCC26XX_Transaction;

我可以更改结构:

typedef struct CryptoCC26XX_Transaction{
CryptoCC26XX_Operation opType;/*!<加密操作的类型*/
CryptoCC26XX_Mode 模式;/*!<当前事务的模式*/
uint8_t* 数据;/*!<指向事务的其余部分(transac. specific)的空指针*/
}CryptoCC26XX_Transaction;

问:解决问题的正确方法是什么?

BR

Leonid

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Leonid、
    您不能有一个具有未定义长度数组的结构类型。 您必须像以前那样使用指针、或者如果在编译时知道大小、您可以使用固定大小的数组:
    #define array_size 10
    typedef 结构... {
    (笑声)
    uint8_t data[array_size];
    }CryptoCC26XX_Transaction
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    就是 Sasha、

    但这是 TI 加密驱动程序代码(请参阅 上一个 TI RTOS 版本的第521行 CryptoCC26XX.h)

    BR

    Leonid

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不熟悉该代码、但我认为代码依赖于使用启用"灵活数组成员"C99功能 en.wikipedia.org/.../Flexible_array_member的选项进行编译。 您使用的是哪种编译器? 可能有一种方法可以打开 C99功能。
    我将尝试找出这是否是错误、或者我们在使用 C99兼容编译器的某个位置记录这种情况。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我只是注意到您可能正在编译 C++代码。 您能否发布完整的编译器命令行?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Sasha、感谢您的回答。

    1.我在 IAR 编译器选项选项卡上选择 VLA 选项:

    编译器命令行如下所示:


    crypto.cpp
    iccarm.exe C:\projects\Vision \堵塞\platform\ccc13xx\drivers\Crypto\crypto.cpp -D chip=1350 -D debug -D using _flash_isr_table -D debug_port_debug_mode=0 -D number_UART_Channels=2 -D
    rf_debug_mode=1 -D rf_table_test=1 -D EVB_configuration=0 -D ADDON_configuration=1 -D ST3_configuration=2 -D Board_configuration=ST3_configuration -D _1ms_timeout=1 -D
    USE_TP_4_DEBUG=0 -D logger_enable=0 -D assert_debug=0 -D DRIVERLIB_NOROM -D NO_crypto=0 -D NO_assert=1 -D Number_crypto_channels -D FORCE_VDD_VOLT=1 -D
    USE_ANTENSION_分集=1 --preproces=cl C:\Projects\Vision\unitTests\ST\List\-o C:\Projects\Vision \Jing\unitTests\ST\Obj\--no_cse --no_unroll --no_inline --no_code_MOTION --no_tbaa --no_unja--un_unjiaging
    --no_scheduling --debug --endian=little --cpu=Cortex-M3 -f C:\projects\Vision \Jing\unitTests/configPkg/compiler.opt.defs --diag_suppress=Pa050 -IC:/ti/tirtos_cc13xx_cc26xx_2_21_00_06/products/cc13xxware_2_04_03_17272
    -dewarm --debug --silent -e --fpu=None --dlib_config C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.2\arm\inc\DLib_Config_Normal.h -i C:\projects\Vision \Clocking\unitTests。\\-i C:\projects\Vision \Cling\unitTests
    ..\-I C:\Projects\Vision \Cling\UnitTests\..\Include\-I C:\Projects\Vision \Cling\UnitTests\..\Platform\cC13xx\-I C:\Projects\Vision \Cling\UnitTests\..\Platform\cc13xx\driverLib\-I C:\UnitTests\unitTests\\platform\unitTests\\unitProjects\\uning\unitTests\cming\unitTests\cming\unitTests\cming\union\un
    cc13xx\driverLib\inc\-I C:\projects\Vision \Debug\unitTests\..\platform\ccc13xx\drivers\-I C:\projects\Vision \Cling\unitTests\..\appUtils\-I C:\Projects\Vision \Cling\unitTests\.\appUs\nc\Vision \vertils\-Port 测试项目
    卡纸\unitTests\..\..\..\..\..\..\..\..\..\tirtos_cc13xx_cc26xx_2_21_00_06\products\tidrivers_cc13xx_cc26xx_2_21_00_04\packages\ti\drivers\-i C:\projects\Vision \ti\unitTests\tis\tos_c26xx_2_00_04\packets\tos\tos_c13xx\tos_04.\tos\rts\ccs_c13xx\rts\ccs_\cc13xx\rts\ccs_00_\ccs\rts\ccs_
    cc13xxware_2_04_03_17272\driverlib\-on --EEC++
    错误[PE070]:不允许不完整类型 C:\ti_tirtos_cc13xx_cc26xx_2_21_00_06\products\tidrivers_cc13xx_cc26xx_2_21_00_04\packages/ti\drivers\crypto\CryptoCC26XX.h 524
    运行 C/C++编译器时出错

    完成。 1个错误、0个警告

    此处 是不带 VLA 选项的编译器命令行:
    crypto.cpp
    iccarm.exe C:\projects\Vision \堵塞\platform\ccc13xx\drivers\Crypto\crypto.cpp -D chip=1350 -D debug -D using _flash_isr_table -D debug_port_debug_mode=0 -D number_UART_Channels=2 -D
    rf_debug_mode=1 -D rf_table_test=1 -D EVB_configuration=0 -D ADDON_configuration=1 -D ST3_configuration=2 -D Board_configuration=ST3_configuration -D _1ms_timeout=1 -D
    USE_TP_4_DEBUG=0 -D logger_enable=0 -D assert_debug=0 -D DRIVERLIB_NOROM -D NO_crypto=0 -D NO_assert=1 -D Number_crypto_channels -D FORCE_VDD_VOLT=1 -D
    USE_ANTENSION_分集=1 --preproces=cl C:\Projects\Vision\unitTests\ST\List\-o C:\Projects\Vision \Jing\unitTests\ST\Obj\--no_cse --no_unroll --no_inline --no_code_MOTION --no_tbaa --no_unja--un_unjiaging
    --no_scheduling --debug --endian=little --cpu=Cortex-M3 -f C:\projects\Vision \Jing\unitTests/configPkg/compiler.opt.defs --diag_suppress=Pa050 -IC:/ti/tirtos_cc13xx_cc26xx_2_21_00_06/products/cc13xxware_2_04_03_17272
    -dewarm --debug --silent -e --fpu=None --dlib_config C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.2\arm\inc\DLib_Config_Normal.h -i C:\projects\Vision \Clocking\unitTests。\\-i C:\projects\Vision \Cling\unitTests
    ..\-I C:\Projects\Vision \Cling\UnitTests\..\Include\-I C:\Projects\Vision \Cling\UnitTests\..\Platform\cC13xx\-I C:\Projects\Vision \Cling\UnitTests\..\Platform\cc13xx\driverLib\-I C:\UnitTests\unitTests\\platform\unitTests\\unitProjects\\uning\unitTests\cming\unitTests\cming\unitTests\cming\union\un
    cc13xx\driverLib\inc\-I C:\projects\Vision \Debug\unitTests\..\platform\ccc13xx\drivers\-I C:\projects\Vision \Cling\unitTests\..\appUtils\-I C:\Projects\Vision \Cling\unitTests\.\appUs\nc\Vision \vertils\-Port 测试项目
    卡纸\unitTests\..\..\..\..\..\..\..\..\..\tirtos_cc13xx_cc26xx_2_21_00_06\products\tidrivers_cc13xx_cc26xx_2_21_00_04\packages\ti\drivers\-i C:\projects\Vision \ti\unitTests\tis\tos_c26xx_2_00_04\packets\tos\tos_c13xx\tos_04.\tos\rts\ccs_c13xx\rts\ccs_\cc13xx\rts\ccs_00_\ccs\rts\ccs_
    cc13xxware_2_04_03_17272\driverlib\-on --EEC++
    错误[PE070]:不允许不完整类型 C:\ti_tirtos_cc13xx_cc26xx_2_21_00_06\products\tidrivers_cc13xx_cc26xx_2_21_00_04\packages/ti\drivers\crypto\CryptoCC26XX.h 524
    运行 C/C++编译器时出错

    完成。 1个错误、0个警告

    我没有看到任何区别。

    2.结构看起来像 灵活的阵列成员(来自 Wikipedia,免费的百科全书):

    Flexible array member[1] 是   在 C 编程语言的 C99标准中引入的一项功能 (特别是在§6.7.2.1节、第16项、第103页中)。[2] 它是的成员, struct是一个没有给定维度的数组, 它应该是此类的最后一个成员 struct,如以下示例所示:

    struct double_vector_st{
    size_t length;
    双数组[];//灵活数组成员应为最后
    一个}; 

    在以前的 C 语言标准中、通常声明零大小的数组成员而不是灵活的数组成员。  GCC 编译器明确接受零大小数组用于此类目的。[3]

    C++ 没有灵活的数组成员。

    BR

    Leonid

      

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Sasha、
    结构看起来像灵活的阵列成员。

    来自 Wikipedia 的免费百科全书
    Flexible array member[1]是 C 编程语言的 C99标准中引入的一项功能(尤其是在§6.7.2.1节、第16项、第103页中)。[2]它是结构的成员、这是一个没有给定维度的数组、 它应该是此类结构的最后一个成员、如以下示例所示:
    struct double_vector_st{
    size_t length;
    double array[];//灵活数组成员应为最后一个
    };
    GCC 编译器明确接受零大小数组用于此类目的。[3]
    C++没有灵活的数组成员。

    电源
    我在 IAR 编译器语言选项卡中选择允许 VLA 选项。 结果相同-误差。
    BR
    Leonid
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    IAR C++编译器允许使用灵活的数组成员、但从-EEC++选项可以看到、您使用的是 C++的扩展嵌入式版本。 您能否切换到标准 C++、但确保在项目选项的语言一致性下选择"Standard with IAR Extensions"?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Sasha、  

    感谢您的回答。

    在此处为命令行:


    crypto.cpp
    iccarm.exe C:\projects\Vision \堵塞\platform\ccc13xx\drivers\Crypto\crypto.cpp -D chip=1350 -D debug -D using _flash_isr_table -D debug_port_debug_mode=0 -D number_UART_Channels=2 -D
    rf_debug_mode=1 -D rf_table_test=1 -D EVB_configuration=0 -D ADDON_configuration=1 -D ST3_configuration=2 -D Board_configuration=ST3_configuration -D _1ms_timeout=1 -D
    USE_TP_4_DEBUG=0 -D logger_enable=0 -D assert_debug=0 -D DRIVERLIB_NOROM -D NO_crypto=0 -D NO_assert=1 -D Number_crypto_channels -D FORCE_VDD_VOLT=1 -D
    USE_ANTENSION_分集=1 --preproces=cl C:\Projects\Vision\unitTests\ST\List\-o C:\Projects\Vision \Jing\unitTests\ST\Obj\--no_cse --no_unroll --no_inline --no_code_MOTION --no_tbaa --no_unja--un_unjiaging
    --no_scheduling --debug --endian=little --cpu=Cortex-M3 -f C:\projects\Vision \Jing\unitTests/configPkg/compiler.opt.defs --diag_suppress=Pa050 -IC:/ti/tirtos_cc13xx_cc26xx_2_21_00_06/products/cc13xxware_2_04_03_17272
    -dewarm --debug --silent -e --fpu=None --dlib_config C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.2\arm\inc\DLib_Config_Normal.h -i C:\projects\Vision \Clocking\unitTests。\\-i C:\projects\Vision \Cling\unitTests
    ..\-I C:\Projects\Vision \Cling\UnitTests\..\Include\-I C:\Projects\Vision \Cling\UnitTests\..\Platform\cC13xx\-I C:\Projects\Vision \Cling\UnitTests\..\Platform\cc13xx\driverLib\-I C:\UnitTests\unitTests\\platform\unitTests\\unitProjects\\uning\unitTests\cming\unitTests\cming\unitTests\cming\union\un
    cc13xx\driverLib\inc\-I C:\projects\Vision \Debug\unitTests\..\platform\ccc13xx\drivers\-I C:\projects\Vision \Cling\unitTests\..\appUtils\-I C:\Projects\Vision \Cling\unitTests\.\appUs\nc\Vision \vertils\-Port 测试项目
    卡纸\unitTests\..\..\..\..\..\..\..\..\..\tirtos_cc13xx_cc26xx_2_21_00_06\products\tidrivers_cc13xx_cc26xx_2_21_00_04\packages\ti\drivers\-i C:\projects\Vision \ti\unitTests\tis\tos_c26xx_2_00_04\packets\tos\tos_c13xx\tos_04.\tos\rts\ccs_c13xx\rts\ccs_\cc13xx\rts\ccs_00_\ccs\rts\ccs_
    cc13xxware_2_04_03_17272\driverlib\-on -c++
    错误[PE070]:不允许不完整类型 C:\ti_tirtos_cc13xx_cc26xx_2_21_00_06\products\tidrivers_cc13xx_cc26xx_2_21_00_04\packages/ti\drivers\crypto\CryptoCC26XX.h 524
    运行 C/C++编译器时出错

    完成。 1个错误、0个警告

    BR

    Leonid

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Leonid、
    我刚才意识到您使用的是嵌入式工作平台7.2、当时我正在查看7.80的文档并使用该版本进行测试。 您可以升级吗? 您可以通过查看 EWARM 开发指南.pdf 来了解哪个版本的 EW 支持该功能。 查找"EC++和 C++语言扩展"部分、如果您在其中有以下项目符号、则支持相关功能:

    ●允许将没有大小或大小为0的数组指定为结构的最后一个成员。
    例如:
    typedef 结构

    int i;
    char ir[0];//零长度数组
    };

    typedef 结构

    int i;
    char ir[];//零长度数组
    };
    注意:如果您在未首先启用语言扩展的情况下使用这些结构中的任何一个,则会发出错误。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Sasha、

    感谢您的回答。

    我使用 的是 IAR 7.40.3。

    我尝试了 IAR 评估版本7.80。

    它在工作。

    BR

    Leonid。