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.

[参考译文] CC2642R:出现在“setBleUserConfig”中的异常(未对齐的访问)

Guru**** 2540720 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/932636/cc2642r-the-exception-unaligned-access-occurs-in-setbleuserconfig

器件型号:CC2642R
Thread 中讨论的其他器件:SYSBIOS

团队、

我的客户希望将 UNALIGN_TRP 设置为‘1’以检测无效的数据对齐。 但是,异常(未对齐访问)发生在“ble_user_config_stack.c”的“setBleUserConfig”中。

我能帮您避免生成未对齐的访问吗?

此致、
Nonaka

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

    你好,Nonaka,

    我将要求问题工程师进行评论。

    您能否提供以下详细信息:
    -基于哪个示例的是项目?
    -在 OOB 项目上进行了哪些修改?

    您能否提供所提出的确切错误消息? 谢谢!

    此致、

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

    您好!

    为了完成我的第一个答案、这似乎是因为 BLE 示例经过了大量优化(导致不对齐的代码)。 也许您可以在关闭优化的情况下尝试一下。

    让我们知道它是否提供了不同的结果:)

    此致、

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

    您好、Cl é ment、

    我在 SDK3.40中使用 SimplePeripheral 样本。 如下修改了 RTOS 配置“simple_peripheral_app.cfg”:
    /*
    *为无效数据对齐启用硬件异常生成。
    *
    *选择一项:
    *- 0 (默认值)
    *    禁用数据对齐的硬件异常
    *- 1.
    *    为数据对齐启用硬件异常
    *
    //m3Hwi.nvicCCR.UNALIGN_TRP = 0;
    m3Hwi.nvicCCR.UNALIGN_TRP = 1;

    构建示例并将其下载到我的 LP 中并执行它。 我尝试使用 EWARM 和 CCS。 结果几乎都是相同的。
    它始终会发生异常。

    ==== BLE_USER_CONFIG_STACT.c::setBleUserConfig ===

    for (int i = 0;i < userCfg->txPwrTbl->numTxPwrVals;i++)

      pTxPowerTblEntry[i]。PoUT            = RF_BLE_txPowerTable[i]。power;
      pTxPowerTblEntry[i]。txPwrVal  =(uint16_t)(rf_BLE_txPowerTable[i]。value.rawValue & 0xFFFF);
      }
    ===========

    182                pTxPowerTblEntry[i]。PoUT            = RF_BLE_txPowerTable[i]。power;
            $C$L661:
    000076f2:  EB030183          add.w    R1、R3、R3、LSL #2
    000076f6:  4461             添加      R1、R12
    000076f8:  F9916000          ldrb.w  R6、[R1]
    000076fc:  EB030243          add.w    R2、R3、R3、LSL #1
    00007700:  4442              添加      R2、R8
    00007702:  7016              strb      R6、[R2]
    183               pTxPowerTblEntry[i]。txPwrVal =(uint16_t)(rf_BLE_txPowerTable[i]。value.rawValue & 0xFFFF);
    00007704:  F811001           ldrh.w    R1、[R1、#1]
    180              for (int i = 0;i < userCfg->boardConfig->txPwrTbl->numTxPwrVals;i++)
    00007708:  1C5B              增加      了 R3、R3、#1
    ===========

    异常上下文、
    $addr、0x2000433c
    $type、ti.sysbios.family.arm.m3/hwi.ExcelContext
    threadType、ti.sysbios.BIOS.ThreadType_Task
    threadHandle、0x200033f8
    threadStack、0x20003448
    threadStackSize、4096
    R0、0x20003304
    r1、0x20001e30
    r2、0x20004464
    R3、0x0
    r4、0x20001dd8
    r5、0x1a22c
    r6、0xffffffec
    r7、0x2000221c
    r8、0x20004464
    R9、0x2000230c
    r10、0xffffffff
    r11、0xffffffff
    r12、0x20001e30
    SP、0x20004408
    LR、0x1002db95
    PC、0x7704
    PSR、0x21000000
    ICSR、0x400803
    MMFSR、0x0
    BFSR、0x0
    UFSR、0x100
    HFSR、0x40000000
    DFSR、0x1
    MMAR、0xe000ed34
    BFAR、0xe000ed38
    AFSR、0x0

    感谢您的支持。

    BR、
    Nonaka

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

    您好、Cl é ment、

    我尝试构建/下载非优化项目。 结果没有改变。

    --------  

    183                pTxPowerTblEntry[i]。txPwrVal         =(uint16_t)(rf_BLE_txPowerTable[i]。value.rawValue & 0xFFFF);
    00004bc8:  9805               LDR       r0、[R13、#0x14]
    00004bca:  4961               LDR       R1、[PC、#0x184]
    00004bcc:  EB000080           add.w     r0、r0、r0、LSL #2
    00004bd0:  5A0A               ldrh      R2、[R1、r0]
    00004bd2:  9805               LDR       r0、[R13、#0x14]
    00004bd4:  9903               LDR       R1、[R13、#0xc]
    00004bd6:  F36F421F           BFC       R2、#0x10、#0x10
    00004dda:  EB000040           add.w     r0、r0、r0、LSL #1
    00004bde:  1809               添加      了 R1、R1、r0
    00004be0:  F8A12001           strh.w    R2、[R1、#1]
    00004be4:  9805               LDR       r0、[R13、#0x14]
    00004be6:  1C40               加      r0、r0、#1
    00004be8:  9005               str       r0、[R13、#0x14]

    异常上下文、
    $addr、0x2000430c
    $type、ti.sysbios.family.arm.m3/hwi.ExcelContext
    threadType、ti.sysbios.BIOS.ThreadType_Task
    threadHandle、0x200033e4
    threadStack、0x20003434
    threadStackSize、4096
    R0、0x0
    r1、0x20001635
    r2、0x20004450
    R3、0x10006
    r4、0xffffffff
    r5、0xffffffff
    r6、0xffffffff
    r7、0xffffffff
    r8、0xffffffff
    r9、0xffffffff
    r10、0xffffffff
    r11、0xffffffff
    r12、0x0
    SP、0x200043d8
    LR、0x1002db95
    PC、0x4bd0
    PSR、0x21000200
    ICSR、0x400803
    MMFSR、0x0
    BFSR、0x0
    UFSR、0x100
    HFSR、0x40000000
    DFSR、0x1
    MMAR、0xe000ed34
    BFAR、0xe000ed38
    AFSR、0x0
    ------------

    BR、Nonaka

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

    你好,Nonaka,

    启用 UNALIGN_TRP 后、以下 pTxPowerTblEntry[i]。txPwrVal =(uint16_t)(rf_BLE_txPowerTable[i]。value.rawValue & 0xFFFF)将因结构的定义方式而遇到异常。

     pTxPowerTblEntry 存在问题、因为 txPwrVal_non_const_t 结构被定义为 packed_typedef_struct、所以它会禁用此数据结构末尾和下一个数据结构之间带有字节的结构填充、以消除无意义的字节。 要解决此问题、请将此结构(ble_user_config_stack.c::第80行)修改为以下内容:

    typedef 结构
    {
    int8 Pout;
    uint16 txPwrVal;
    }txPwrVal_non_const_t; 

    define packed_typedef_struct 的另一个变体是__attribute__((packed)。  RF_BLE_txPowerTable 存在问题、因为该结构也是紧凑的。 要解决此问题、请将此结构(RFCC26X2.h::第1044行)修改为以下内容:

    typedef 结构
    {
    int8_t power; //<人类可读的功率值、表示
    //<以 dBm 为单位的输出。
    
    RF_TxPowerTable_value;//<该功率级别的 PA 硬件配置。
    }RF_TxPowerTable_Entry; 

    这两个更改应该会使您在 ble_user_config_stack.c 中遇到异常:第187行、但是、packed_typedef_struct 和 __attribute__((packed))会在 simple_peripheral 中的多个位置使用。 请参阅下图以查找使用 packed_typedef_struct 的任何位置:

    如果在进行这些修改后发生其他与对齐相关的异常、我会看到结构是否使用以下 packed、packed_struct、packed_typedef_const_strt、packed_aligned 和 packed_aligned_typedef_struct 定义、因为_hal_types.h 中有不同的打包定义

    请告诉我解释是否需要澄清!

    此致、

    Jenny

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

    您好、Jenny、


    我对迟迟未作出答复表示歉意。
    我已确认,这项修改没有任何副作用。 我将要求我的客户根据您的建议修改标题。

    感谢您的支持。

    BR、Nonaka

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

    你好,Nonaka,

    我很高兴听到解决方案行之有效! 请告诉我是否有任何与此主题相关的其他问题。

    此致、

    Jenny