发 帖  
原厂入驻New
[问答] 请问cc2541进入休眠的点在哪裡?
2020-8-28 11:27:11  79 CC2541
分享
hi 各位:
我這邊採用cc2541的advance remote device
我想找關於cc2541進入休眠的點在哪裡?
以及我該如何讓裝至進入休眠?

我已經找了好幾天,關於這個看到類似的幾個地方,不過不知道我是否有誤解?
在 hidadvremote_main.c 中
初始化設置時:

#if defined ( POWER_SAVING )
osal_pwrmgr_device( /*PWRMGR_ALWAYS_ON*/ PWRMGR_BATTERY );
#endif
在追下去:

void osal_pwrmgr_device( uint8 pwrmgr_device )
[
pwrmgr_attribute.pwrmgr_device = pwrmgr_device;


]
這一行是否告訴裝置可進入休眠?
那我要如何得知裝置會進入休眠?


另外詢問一下 CC2541 在 流程中是否採用輪巡方式來讓裝置從休眠進入等待模式?
找了好久找不到哪一個函式是一值在輪詢的(進入休眠一樣進入輪巡?)
0
2020-8-28 11:27:11   评论 分享淘帖
13 个讨论
hi lee:
  进入休眠的函数接口在:
void osal_pwrmgr_powerconserve( void )
[
//···············//
OSAL_SET_CPU_INTO_SLEEP( next );
]
如上红色字体 用宏定义封起来 其实就是调用void halSleep( uint32 osal_timeout ).在这函数中真正进入睡眠的指令HAL_SLEEP_SET_POWER_MODE()。
脱出低消费其中之一就是原代码设置的定时器:
<span style="color:#000000;">
void halSleepSetTimer( uint32 sleepTimer, uint32 timeout )
[
HAL_SLEEP_TIMER_DISABLE_INT();
<span style="color:#000000;">
// compute sleep timer compare value
sleepTimer += timeout;
<span style="color:#000000;">
// subtract the processing time spent in function halSleep()
sleepTimer -= HAL_SLEEP_ADJ_TICKS;
<span style="color:#000000;">
// set sleep timer compare; ST0 must be written last
ST2 = ((uint8 *)&sleepTimer)[UINT32_NDX2];
ST1 = ((uint8 *)&sleepTimer)[UINT32_NDX1];
ST0 = ((uint8 *)&sleepTimer)[UINT32_NDX0];
<span style="color:#000000;">
HAL_SLEEP_TIMER_CLEAR_INT();
HAL_SLEEP_TIMER_ENABLE_INT();
<span style="color:#000000;">
return;
]
这也是我这俩天刚看的,不知道理解的对不对,希望对你有帮助

2020-8-28 11:34:31 评论

举报

Jaionm 发表于 2020-8-28 11:46
hi lee:
  进入休眠的函数接口在:
void osal_pwrmgr_powerconserve( void )

T_MAC 说的很好 :)

记得要define POWER_SAVING, 在IAR 工程选项里面的 preprocessor 里.
骑猪去天山 发表于 2020-8-28 11:55
T_MAC 说的很好 :)

记得要define POWER_SAVING, 在IAR 工程选项里面的 preprocessor 里.

非常感謝 T_MAC 協助
也感謝 Yan 幫忙,不過 define POWER_SAVING 這是甚麼意思呢? 而在 IAR 工程选项里面的 preprocessor 里 這是在哪邊要做甚麼更改?




不好意思,對這真的還有很大需要摸索,還是很感謝各位先進的協助!!!


另外  在CC2541 中 是否有函數是 一值再輪詢狀態的呢?(無視 低消費(睡眠)模式)
2020-8-28 11:52:10 评论

举报

mikee 发表于 2020-8-28 12:04
非常感謝 T_MAC 協助
也感謝 Yan 幫忙,不過 define POWER_SAVING 這是甚麼意思呢? 而在 IAR 工程选项里面的 preprocessor 里 這是在哪邊要做甚麼更改?

yan的意思就是在osal_run_system函数中如下代码,宏定义POWER_SAVING  控制低消费代码能否执行到。
#if defined( POWER_SAVING )
else // Complete pass through all task events with no activity?
[
osal_pwrmgr_powerconserve(); // Put the processor/system into sleep
]
另外:
void osal_start_system( void )
[
#if !defined ( ZBIT ) && !defined ( UBIT )
for(;;) // Forever Loop
#endif
[
osal_run_system();
]
]
如上for死循环,就是一直轮训查找event。
2020-8-28 12:10:21 评论

举报

Jaionm 发表于 2020-8-28 12:22
yan的意思就是在osal_run_system函数中如下代码,宏定义POWER_SAVING  控制低消费代码能否执行到。
#if defined( POWER_SAVING )
else // Complete pass through all task events with no activity?

T_MAC 感謝您的回覆


由於我之前測試的時候,我在

for(;;) // Forever Loop
#endif
[
osal_run_system();

P2_0=~P2_0 <===TP4

]


中 加入了 對於  P2_0=~P2_0 這個程式碼   (p2_0 接外部LED)

發現她好像沒有正確的做切換,因此判斷好像只有跑一次?
2020-8-28 12:29:49 评论

举报

Jaionm 发表于 2020-8-28 12:22
yan的意思就是在osal_run_system函数中如下代码,宏定义POWER_SAVING  控制低消费代码能否执行到。
#if defined( POWER_SAVING )
else // Complete pass through all task events with no activity?

另外詢問
由於我在 code中找不到POWER_SAVING的定義,那代表他不會進入休眠嗎?
2020-8-28 12:46:53 评论

举报

Hi lee,
看下面两图, POWER_SAVING 定义 :)


骑猪去天山 发表于 2020-8-28 13:17
Hi lee,
看下面两图, POWER_SAVING 定义 :)

YAN 您好,感謝如此淺顯易懂的教學。

我看了一下我的 POWER SAVING中 原本已經有在裡面了?這樣算是已經有加入對於POWER SAVING的定義了嗎
2020-8-28 13:10:26 评论

举报

mikee 发表于 2020-8-28 13:22
YAN 您好,感謝如此淺顯易懂的教學。

我看了一下我的 POWER SAVING中 原本已經有在裡面了?這樣算是已經有加入對於POWER SAVING的定義了嗎

Hi lee,
是的, 这样就已经定义了.
mikee 发表于 2020-8-28 12:41
T_MAC 感謝您的回覆

Hi lee,
关于 P2_0=~P2_0 <===TP4,
这个很难讲, 因为osal_run_system(); 里面有可能会处理很多事件, 时间上是无法确定的. 必然会影响到 后面的代码.
而且你这样写的话应该看不到非常明显的现象, 要看到LED 明显变化的话最好是隔一段时间再做切换.
骑猪去天山 发表于 2020-8-28 13:47
Hi lee,
关于 P2_0=~P2_0 &amp;lt;===TP4,
这个很难讲, 因为osal_run_system(); 里面有可能会处理很多事件, 时间上是无法确定的. 必然会影响到 后面的代码.

你好
我使用CC2541 Keyfob,燒錄Keyfobdemo
preprocessor已經有定義POWER_SAVING

但有辦法在Keyfob_Main.c的HAL_BOARD_INIT();之前延遲或睡眠一秒嗎???
使用HalSleep(2000);
但好像沒有醒來
要使用甚麼讓他wake up嗎?
2020-8-28 13:55:33 评论

举报

wuzh303 发表于 2020-8-28 14:07
你好
我使用CC2541 Keyfob,燒錄Keyfobdemo
preprocessor已經有定義POWER_SAVING

hi wun,
你这样就是进入PM3了, 只能用IO口通过中断唤醒, 比如说按键.
骑猪去天山 发表于 2020-8-28 14:14
hi wun,
你这样就是进入PM3了, 只能用IO口通过中断唤醒, 比如说按键.

TI的大牛们,你们好!
<span/>我用串口打印跟踪SimpleBLEPeripheral程序流程,根据串口打印信息,SimpleBLEPeripheral进入了 OSAL_SET_CPU_INTO_SLEEP( next )函数,但是这个时候我用SimpleBLECentral程序和SimpleBLEPeripheral通信依然可以成功,SimpleBLEPeripheral不是进入了OSAL_SET_CPU_INTO_SLEEP函数后就进入低功耗模式了吗?为什么还能和SimpleBLECentral通信呢?
辛苦您们了。
2020-8-28 14:12:42 评论

举报

只有小组成员才能发言,加入小组>>

1449个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表