您好!
我尝试使用 TI BLE5堆栈和定制射频堆栈来运行 DMM、由于向后兼容性的原因、这两者必须是 Contiki 射频堆栈的一个端口、如以下位置所示:
- https://github.com/contiki-ng/contiki-ng/tree/develop/arch/cpu/simplelink-cc13xx-cc26xx/rf
- https://github.com/contiki-ng/contiki-ng/tree/develop/arch/cpu/simplelink-cc13xx-cc26xx/rf-settings/cc13x2
(不使用 Contiki 蓝牙堆栈)
将 TI BLE5 和 Contiki RF 与 DMM 集成(作为 BLE 堆栈和自定义 PROP 堆栈)后、当另一个"抑制"时、每个堆栈都工作:
- 如果 BLE GPT 将所有全局优先级设置为高于 PROP、则 BLE 按预期工作、
- 如果 PROP GPT 将所有全局优先级设置为高于 BLE、则 PROP 按预期工作。
可悲的是,情况并非如此,当这些优先级 混合时,堆栈之间必须存在一些"干扰"问题。 尽管如此、就目前而言、我尝试使用 DMM 应用程序状态 +策略功能来解决此问题、但它对我没有预期的效果。
为了简化测试、我 按如下方式设置 DMM 配置:
dmm.stackRoles = ["blePeripheral","custom1"]; dmm.applicationState0 = "DMMPOLICY_ANY"; dmm.numCustomActivities = 0; dmm.policyArray[0].$name = "ti_dmm_policy_dmm_policy1"; dmm.policyArray[0].custom1.$name = "ti_dmm_policy_stack_dmm_stack_custom1"; dmm.policyArray[0].custom1.appliedActivity = ["DMMPOLICY_APPLIED_ACTIVITY_ALL"]; dmm.policyArray[0].custom1.weight = 10; dmm.policyArray[0].blePeripheral.$name = "ti_dmm_policy_stack_dmm_stack_ble1"; dmm.policyArray[0].blePeripheral.appliedActivity = ["DMMPOLICY_APPLIED_ACTIVITY_ALL"];
BLE GPT 取自 SimpleLink 示例、并设置为:
StackActivity activityBLE_bleLpropH[ACTIVITY_NUM_BLE*PRIORITY_NUM] =
{
DMM_GLOBAL_PRIORITY(DMM_BLE_CONNECTION, DMM_StackPNormal, 70),
DMM_GLOBAL_PRIORITY(DMM_BLE_CONNECTION, DMM_StackPHigh, 170),
DMM_GLOBAL_PRIORITY(DMM_BLE_CONNECTION, DMM_StackPUrgent, 230),
DMM_GLOBAL_PRIORITY(DMM_BLE_CON_EST, DMM_StackPNormal, 70),
DMM_GLOBAL_PRIORITY(DMM_BLE_CON_EST, DMM_StackPHigh, 200),
DMM_GLOBAL_PRIORITY(DMM_BLE_CON_EST, DMM_StackPUrgent, 220),
DMM_GLOBAL_PRIORITY(DMM_BLE_BROADCASTING, DMM_StackPNormal, 60),
DMM_GLOBAL_PRIORITY(DMM_BLE_BROADCASTING, DMM_StackPHigh, 160),
DMM_GLOBAL_PRIORITY(DMM_BLE_BROADCASTING, DMM_StackPUrgent, 210),
DMM_GLOBAL_PRIORITY(DMM_BLE_OBSERVING, DMM_StackPNormal, 60),
DMM_GLOBAL_PRIORITY(DMM_BLE_OBSERVING, DMM_StackPHigh, 60),
DMM_GLOBAL_PRIORITY(DMM_BLE_OBSERVING, DMM_StackPUrgent, 85),
};
PROP GPT 仅简化为一项活动:
StackActivity activityPROP_bleLpropH[ACTIVITY_NUM_PROP*PRIORITY_NUM] =
{
DMM_GLOBAL_PRIORITY(DMM_PROP_ACTIVITY, DMM_StackPNormal, 40),
DMM_GLOBAL_PRIORITY(DMM_PROP_ACTIVITY, DMM_StackPHigh, 40),
DMM_GLOBAL_PRIORITY(DMM_PROP_ACTIVITY, DMM_StackPUrgent, 40),
};
根据我对 DMM 工作原理的理解、这会使 PROP 的优先级设置为40 + 10 = 50、这些优先级都低于 BLE 优先级、因此它应使 BLE 正常工作。 这就是实际发生的情况。 到目前为止、一切都很好。 然而:
- 当我将 策略1中的自定义1权重从10更 改为200 (PROP 现在应将所有优先级设置为240、这都高于 BLE)时、PROP 仍然不起作用、但 BLE 仍然起作用(这不是我在此类配置中所期望的)。
- 当我将 策略1中的自定义1权重设置为10、但将 DMM_PROP_ACTIVE 优先级从40更改为240 (PROP 具有高于 BLE 的 GPT 中定义的所有优先级)时、PROP 正常工作、但 BLE 无效(符合预期)。
所以 我认为 DMM 的工作方式不是我认为的、我的问题是:它在这里是如何实际工作的?