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.
您好!
我在针对 cc3200的 SDK 1.2.0中的 idle_profile 示例项目中发现了一个错误。 我不知道这是否会影响我、但我想您想知道这一点。
在文件 lp3p0_plat_ops.c 中,枚举 power_modes 类型(来自中间件/soc/cc_pm_ops.h)在 lp3p0_CAN_try_pm_state ()函数中被错误地测试为位掩码。 通过调用 main.c 中 TimerGPIOTask()中的 lp3p0_setup_power_policy()来设置变量 USER_SEL_power_mode,其中参数是 enum power_modes。
默认情况下、编译器会为枚举分配连续的整数值、因此枚举元素 power_policy_sleep、power_policy_standby、 power_policy_hibernate"的值为0、1和2、 两个示例。 当框架调用 lp3p0_CAN_try_pm_state 时、结果将是模式 e_pm_S1永远不会返回 true、因为 if (USER_SEL_POWER_MODE & POWER_POLICE_SLEEP)始终为零(因为 POWER_POLICE_SLEEP 为零)。
同样、未正确使用 e_pm_S3和 e_pm_S4的情况、尽管它们碰巧在编译器分别将1和2分配给枚举 power_policy_standby 和 power_policy_休眠 时正常工作。
如果目的是让应用为允许的功耗模式指定位掩码、那么解决方案可能是将位掩码值显式分配给 cc_pm_ops.h 中的 enum power_modes?
来自 cc3200-sdk\中间 件\soc \cc_pm_ops.h 的代码段:
enum power_modes{ power_policy_sleep、 power_policy_standby、 power_policy_hibernate" };
lp3p0_plat_ops.c 中的代码段:
// // //! \brief 此函数设置系统的电源策略 //! //! \param power_policy 是设备尝试获取 的最低功耗模式//! 进入 //! //! 返回无 // ////********* void lp3p0_setup_power_policy (int power_policy) { USER_SEL_POWER_MODE = POWER_POLICE_MODE; 返回; }
(笑声)
// // //! \brief 此功能检查系统是否可以进入较低功耗模式 //! //! \param 目标是低功耗模式、我们正在检查其特性 //! //! 如果系统可以进入目标状态,则返回 true,否则返回 false。 //// ************* bool lp3p0_CAN_try_pm_state (enum soc _pm target) { bool retval = false; switch (target){ 案例 e_pm_s0: 中断; 案例 e_pm_S1: if (USER_SEL_POWER_MODE 和 POWER_POLICE_SLEEP){ RetVal = true; } 中断; 案例 e_pm_S2: /*if (USER_SEL_POWER_MODE & POWER_POLICE_DEEPSLEEP){ RetVal = true; }*/ 中断; 案例 e_pm_S3: if (USER_SEL_POWER_MODE 和 POWER_POLICE_STANDBY){ RetVal = true; } 中断; 案例 e_pm_S4: if (USER_SEL_POWER_MODE 和 POWER_POLICE_HIBERNATE){ RetVal = true; } 中断; 默认值: 中断; } 返回评估; }
此致、
Kemeron