[ST NUCLEO-WBA52CG] 3 - BLE中的sequencer -- UTIL_SEQ_RegTask()函数的作用
<div class='showpostmsg'><p>在生成的BLE工程里能看到很多地方出现了 <em>UTIL_SEQ_RegTask</em><em>() </em>函数。通过跳转的功能,可以发现其是STM32提供的一个库函数,出现在 <em>Utilities </em>文件夹中,是sequencer下的函数。那么sequencer是做什么的呢?</p><p> </p>
<p>sequencer提供了一种类似于前后台架构中,对后台程序的一系列管理函数。Sequencer本质是一个while循环,在这个循环中通过判断标志位来确定是否要执行某个函数。</p>
<p>在这个文件里包含以下主要函数:</p>
<ul>
<li>UTIL_SEQ_Idle() 当sequencer中没有要执行的函数时,进入idle状态,也就是调用该函数,这个函数处于临界区,也就是禁用中断的状态。</li>
<li>UTIL_SEQ_PreIdle() 这个函数在 <em>UT</em><em>IL_SEQ_Idle()</em> 之前,但是它没在临界区</li>
<li>UTIL_SEQ_PostIdle() 同理这个函数在<em>UTIL_SEQ_Idle()</em> 之后,也是没在临界区</li>
<li>UTIL_SEQ_Run() 为while循环,并在该循环中执行用户注册进去的程序</li>
<li>UTIL_SEQ_RegTask() 通过该函数将程序注册到sequencer的while循环中</li>
<li>UTIL_SEQ_SetTask() 设置注册函数的标志位,是的某个注册函数开始执行</li>
<li>UTIL_SEQ_PauseTask() 暂停一个程序,此时通过 UTIL_SEQ_SetTask() 设置了标志位之后,也不执行</li>
<li>UTIL_SEQ_ResumeTask() 恢复一个程序</li>
<li>UTIL_SEQ_WaitEvt() 设置某个程序等待一个事件,类似于OS里的信号量</li>
<li>UTIL_SEQ_SetEvt() 设置事件</li>
<li>UTIL_SEQ_IsEvtPend() 判断是否在等待事件</li>
</ul>
<p>Sequencer虽然提供的功能有点像OS的功能,但它只是一个while循环,其执行结构如下图所示,这个结构其实就是<em>UTIL_SEQ_Run()</em> 的内容。</p>
<p></p>
<p>Sequencer最多注册32个函数,因为其使用一个uint32_t 的数据保存标志位,其中每个位能够指代一个函数。</p>
<p><strong>总结</strong></p>
<p>在sequencer里见到最多的是UTIL_SEQ_RegTask() 函数,这个函数的作用就是将一个函数注册到后台中等待执行。通过调用UTIL_SEQ_SetTask() 函数,可以控制已经注册的函数开始执行。</p>
<p>下面的附件为ST对sequencer介绍的PPT。</p>
<div></div>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>在sequencer里见到最多的是UTIL_SEQ_RegTask() 函数,这个函数的作用就是将一个函数注册到后台中等待执行。通过调用UTIL_SEQ_SetTask() 函数,可以控制已经注册的函数开始执行。</p>
<p>学习了</p>
页:
[1]