Topic

FAQ
Login Register
mesh_switch工程的keys scan问题
Jun 26, 2023 10:50

/

A

/A

telink support team:

目前是用的是8258, mesh_switch工程。

1. mcu的sleep是使用的哪一种模式? suspend or deepsleep with retention or deepsleep without retention?

2. wake up之后,代码是从enter sleep的下一行开始执行,还是从固件的最开始处执行(重新执行一遍main()包括初始化)? 因为在初始化过程中有调用如下代码,所以看起来是重新执行了一遍初始化。但是我的理解是wake up后应该从进入sleep的地方继续执行的,reset之后才是重新执行。 想确认一下这个问题。 从而有另一个问题是,为什么在初始化的地方调用了下面对wake up的判断? 

#if (PM_DEEPSLEEP_RETENTION_ENABLE)

if( pm_is_MCU_deepRetentionWakeup() )

{

user_init_deepRetn ();

}

else

#endif

{

user_init();

}

3. 有没有文档介绍mesh_switch工程的 按键扫描和sleep之间是如果工作的,按键消抖是怎样实现的?  因为代码中没有说明,看起来有些不太理解这个过程。其实按照你们的工程修改IO口就可以,但是还是想理解清楚matrix按键的获取过程,然后再修改,那样更清楚明了。

4.  在proc_ui()中, 这个周期time的作用是? 因为看到按键的长按的判断是通过soft timer来实现的,所以不知道这里这个周期time的作用。

if (!clock_time_exceed (tick_scan, scan_io_interval_us))

{ return; }

tick_scan = clock_time();


2 replies
TL_Soyo Jun 27, 2023 10:16
0
/A

user_init_deepRetn ();你好,

  1.休眠底层会根据休眠时长切换suspend 和 deepsleep with retention的,短时间休眠为suspend

  2.deepsleep 相关的休眠都会重新走main函数之后进入user_init_deepRetn ();

  3.关于按键扫描可以在wiki中下载ble sdk的handbook了解,也能获取到更多关于休眠的资料。

  4.软定时和轮询都同时生效的,请自行查看代码理解。

youngbo830 [Author] Jun 28, 2023 15:13
0
/A

你好,

proc_ui()函数中的这个4ms轮询,始终没有理解到是起到什么样的作用。 我目前的理解是:当按键按下后,会从main执行,在init中会进行key scan,然后会执行到这里,因为没有超过4ms,所以这里直接return。 还有其他的理解吗?


另外,关于消抖:在key_debounce_filter()中有这样的语句,这个语句是否就是用于判断两次是否相同的消抖操作呢?  这个的理解是否与cur = (pre ^tmp)? last :tmp;这样的语句等效? 因为实在没有理解到这个消抖是具体算法,所以这里咨询。 在这个filter函数中,matrix_differ,key_matrix_same_as_last_cnt两个变量没有看到在工程的其他地方使用,此函数中只是赋值,也没有使用,请问下这两个变量的作用是?

mtrx_cur[i] = ( ~mtrx_last[i] & (mtrx_pre[i] & mtrx_tmp) ) | ( mtrx_last[i] & (mtrx_pre[i] | mtrx_tmp) );


我看了文档,没有找到相关的内容。我是想理解清楚,然后再进行自己工程的修改。 十分感谢!