Thread 中讨论的其他器件:SYSBIOS
团队、
我的客户希望将 UNALIGN_TRP 设置为‘1’以检测无效的数据对齐。 但是,异常(未对齐访问)发生在“ble_user_config_stack.c”的“setBleUserConfig”中。
我能帮您避免生成未对齐的访问吗?
此致、
Nonaka
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.
您好、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