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.

[参考译文] CC2541:CC2541

Guru**** 2779905 points

Other Parts Discussed in Thread: CC2541

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/772228/cc2541-cc2541

器件型号:CC2541

大家好!
我使用 CC2541、并以 SimpleBLEPeripheral 示例为基础。
在项目中、我使用广播、观测器、节能和周期性事件。
从睡眠模式唤醒后,广播不再工作。 但我向函数 halSleep 添加了下一个循环:
while (1)

  HAL_SLEEP_SET_POWER_MODE();
  if (IRSensorObstoracleDetected ()))
    中断;
  /*如果未检测到障碍物,请在100ms 后再次进入睡眠状态*/
  sleeptimer = halsleepReadTimer();
  halSlepSetTimer( sleeptimer, HAL_SLEEP_MS_TO_32kHz(100));


我知道有些任务不会期望睡眠会很长。
但是、在进入睡眠模式之前、我必须停止哪些任务、或者在退出睡眠模式后需要重新初始化哪些任务?


感谢您的帮助!

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

    您所做的工作并不完全清楚、但您不应手动调用睡眠函数。 只要没有活动的任务、睡眠机制就会在任何情况下将器件置于睡眠状态。

    假设您正在进行广告、您希望睡眠一段时间、而不是进行广告。 然后、您要做的是禁用广播并设置 osal 计时器以稍后唤醒您、以便您可以重新启动广播。

    从技术上讲、如果没有 BLE 活动在进行中、您可以调用睡眠功能而不会产生不利影响、但如果堆栈处于活动状态、堆栈状态、无线电比较寄存器、无线电 Mac 计时器和睡眠计时器之间的同步可能会不同步、但情况将无法正常工作。

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

    感谢您的快速回复。
    我不是手动调用睡眠功能、而是在函数 halSleep 中添加了红外传感器对障碍物的检测、如果没有障碍物、则继续睡眠100ms。 我这样做是为了最大限度地减少功耗(无需执行完整的唤醒机制)。 但现在这一点不再重要了、我解决了这个问题。 我停止了广播、停止了发现并取消订阅周期计时器。 接下来、在 halSleep 函数中、我检查是否有下一个唤醒超时、如果没有、那么只有在这种情况下、我才会启用红外检测器。

    它看起来是这样的、

    相反:
    //只有在超时为零时才会输入 HAL_SLEEP_PM3
    halPwrMgtMode =(超时=0)? HAL_sleep_deep:HAL_sleep_timer;

    我补充:
    if (timeout =0)

    超时= HAL_SLEEP_MS_TO_32kHz (100);
    sleepDeep = 1;

    halPwrMgtMode = HAL_SLEEP_TIMER;

    然后我分析变量 sleepep

    while (1)

    HAL_SLEEP_SET_POWER_MODE();
    if (!slepDeep)
    中断;
    if (IRSensorObstoracleDetected ()))
    中断;
    /*如果未检测到障碍物,请在100ms 后再次进入睡眠状态*/
    sleeptimer = halsleepReadTimer();
    halSlepSetTimer( sleeptimer, HAL_SLEEP_MS_TO_32kHz(100));


    完全唤醒后、我将恢复广播、发现和周期性计时器。

    现在广告效果很好! 谢谢您!

    但发现功能仍然不起作用。
    我继续寻找这个问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Aslak、非常感谢!
    现在、我没有睡眠模式问题。