1998|1

274

帖子

8

TA的资源

纯净的硅(初级)

楼主
 

[ST NUCLEO-WBA52CG] 3 - BLE中的sequencer -- UTIL_SEQ_RegTask()函数的作用 [复制链接]

在生成的BLE工程里能看到很多地方出现了 UTIL_SEQ_RegTask() 函数。通过跳转的功能,可以发现其是STM32提供的一个库函数,出现在 Utilities 文件夹中,是sequencer下的函数。那么sequencer是做什么的呢?

 

sequencer提供了一种类似于前后台架构中,对后台程序的一系列管理函数。Sequencer本质是一个while循环,在这个循环中通过判断标志位来确定是否要执行某个函数。

在这个文件里包含以下主要函数:

  • UTIL_SEQ_Idle() 当sequencer中没有要执行的函数时,进入idle状态,也就是调用该函数,这个函数处于临界区,也就是禁用中断的状态。
  • UTIL_SEQ_PreIdle() 这个函数在 UTIL_SEQ_Idle() 之前,但是它没在临界区
  • UTIL_SEQ_PostIdle() 同理这个函数在UTIL_SEQ_Idle() 之后,也是没在临界区
  • UTIL_SEQ_Run() 为while循环,并在该循环中执行用户注册进去的程序
  • UTIL_SEQ_RegTask() 通过该函数将程序注册到sequencer的while循环中
  • UTIL_SEQ_SetTask() 设置注册函数的标志位,是的某个注册函数开始执行
  • UTIL_SEQ_PauseTask() 暂停一个程序,此时通过 UTIL_SEQ_SetTask() 设置了标志位之后,也不执行
  • UTIL_SEQ_ResumeTask() 恢复一个程序
  • UTIL_SEQ_WaitEvt() 设置某个程序等待一个事件,类似于OS里的信号量
  • UTIL_SEQ_SetEvt() 设置事件
  • UTIL_SEQ_IsEvtPend() 判断是否在等待事件

Sequencer虽然提供的功能有点像OS的功能,但它只是一个while循环,其执行结构如下图所示,这个结构其实就是UTIL_SEQ_Run() 的内容。

Sequencer最多注册32个函数,因为其使用一个uint32_t 的数据保存标志位,其中每个位能够指代一个函数。

总结

在sequencer里见到最多的是UTIL_SEQ_RegTask() 函数,这个函数的作用就是将一个函数注册到后台中等待执行。通过调用UTIL_SEQ_SetTask() 函数,可以控制已经注册的函数开始执行。

下面的附件为ST对sequencer介绍的PPT。

STM32WB_BLE_SW_Sequencer.pptx (550.65 KB, 下载次数: 22)
此帖出自RF/无线论坛

最新回复

在sequencer里见到最多的是UTIL_SEQ_RegTask() 函数,这个函数的作用就是将一个函数注册到后台中等待执行。通过调用UTIL_SEQ_SetTask() 函数,可以控制已经注册的函数开始执行。 学习了   详情 回复 发表于 2023-8-18 06:56
点赞 关注
 

回复
举报

6968

帖子

11

TA的资源

版主

沙发
 

在sequencer里见到最多的是UTIL_SEQ_RegTask() 函数,这个函数的作用就是将一个函数注册到后台中等待执行。通过调用UTIL_SEQ_SetTask() 函数,可以控制已经注册的函数开始执行。

学习了

此帖出自RF/无线论坛
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表