本帖最后由 damiaa 于 2023-9-3 18:55 编辑
【STM32WBA52CG】+6 SEQUENCER调度器
【NUCLEO-WBA52CG】+1开箱贴
【STM32WBA52CG】+2 STM32WBA Web Bluetooth试玩
【STM32WBA52CG】+3 STM32WBA 外设应用一 按键和点灯
【STM32WBA52CG】+4 外设应用二 串口使用
【STM32WBA52CG】+5 THREADX使用之后继续
看看STM32WBAA软件架构
发现STM32WBAA软件架构中有个调度器,据说这玩意还不是真正的操作系统 ,但可以简单的管理任务,很多嵌入式软件里面 用 到 这种。主要代码在stm32_seq.c stm32_seq.h utilities_conf.h中
管理任务的主要相关变量,其他的可以在代码中查看:
从下面的函数可以看出要用 到的全局变量和全局数组
void UTIL_SEQ_Init( void )
{
TaskSet = UTIL_SEQ_NO_BIT_SET; //当前需要执行的任务集 32位。
TaskMask = UTIL_SEQ_ALL_BIT_SET; //可以执行的任务集32位。
SuperMask = UTIL_SEQ_ALL_BIT_SET; //可以暂停的任务集32位。
EvtSet = UTIL_SEQ_NO_BIT_SET; //当前设置的事件集32位。
EvtWaited = UTIL_SEQ_NO_BIT_SET; //表示当前正等待的事件集32位。
CurrentTaskIdx = 0U; //32位。//正在执行的任务
(void)UTIL_SEQ_MEMSET8((uint8_t *)TaskCb, 0, sizeof(TaskCb));
for(uint32_t index = 0; index < UTIL_SEQ_CONF_PRIO_NBR; index++)//任务优先级
{
TaskPrio[index].priority = 0;
TaskPrio[index].round_robin = 0;
}
UTIL_SEQ_INIT_CRITICAL_SECTION( );
}
调度器功能简单描述:
每个任务都分配一个优先级,来确定任务在任务序列中的执行顺序。一个任务完成后,调度器会检查 TaskSet 和 TaskMask,选择下一个要执行的任务。如果没有任务需要执行,调度器进入休眠Idle状态,等待下一个事件的发生。
任务的执行 还可以指定延迟时间。
任务还可以等待事件的发生
任务可以按轮询方式执行,这样每个任务都可以执行到,任务有
临界区保护功能,以避免竞争条件和死锁。
具体的实现可以看stm32_seq.c相关代码。
调度器的主要api介绍:
SEQ初始化
void UTIL_SEQ_Init( void );
SEQ反初始化
void UTIL_SEQ_DeInit( void );
进入Idle状态
void UTIL_SEQ_Idle( void );
UTIL_SEQ_Idle调用前执行
void UTIL_SEQ_PreIdle( void );
调用 UTIL _ SEQ _ PreIdle ()之后,这个函数由关键部分之外的测序器调用,而不调用 UTIL _ SEQ _ Idle ()
void UTIL_SEQ_PostIdle( void );
SEQ运行
void UTIL_SEQ_Run( UTIL_SEQ_bm_t Mask_bm );
SEQ注册
void UTIL_SEQ_RegTask( UTIL_SEQ_bm_t TaskId_bm, uint32_t Flags, void (*Task)( void ) );
SEQ检查是否注册
uint32_t UTIL_SEQ_IsRegisteredTask( UTIL_SEQ_bm_t TaskId_bm );
任务请求执行
void UTIL_SEQ_SetTask( UTIL_SEQ_bm_t TaskId_bm , uint32_t Task_Prio );
检查是否可以调度
uint32_t UTIL_SEQ_IsSchedulableTask( UTIL_SEQ_bm_t TaskId_bm);
任务停止
void UTIL_SEQ_PauseTask( UTIL_SEQ_bm_t TaskId_bm );
检查任务是否停止
uint32_t UTIL_SEQ_IsPauseTask( UTIL_SEQ_bm_t TaskId_bm );
任务从停止状态转入可以运行
void UTIL_SEQ_ResumeTask( UTIL_SEQ_bm_t TaskId_bm );
设置事件
void UTIL_SEQ_SetEvt( UTIL_SEQ_bm_t EvtId_bm );
清除设置的事件
void UTIL_SEQ_ClrEvt( UTIL_SEQ_bm_t EvtId_bm );
等待事件
void UTIL_SEQ_WaitEvt( UTIL_SEQ_bm_t EvtId_bm );
函数返回等待事件是否挂起 * 仅当应用程序重载 UTIL _ SEQ _ EvtIdle ()时才有用
UTIL_SEQ_bm_t UTIL_SEQ_IsEvtPend( void );
循环直到等待事件
void UTIL_SEQ_EvtIdle( UTIL_SEQ_bm_t TaskId_bm, UTIL_SEQ_bm_t EvtWaited_bm );
读UTIL_SEQ_Run函数:
void UTIL_SEQ_Run( UTIL_SEQ_bm_t Mask_bm )
{
uint32_t counter;
UTIL_SEQ_bm_t current_task_set;
UTIL_SEQ_bm_t super_mask_backup;
UTIL_SEQ_bm_t local_taskset;
UTIL_SEQ_bm_t local_evtset;
UTIL_SEQ_bm_t local_taskmask;
UTIL_SEQ_bm_t local_evtwaited;
/* When this function is nested, the mask to be applied cannot be larger than the first call
* The mask is always getting smaller and smaller
* A copy is made of the mask set by UTIL_SEQ_Run() in case it is called again in the task
/* 当这个函数被嵌套时,要应用的掩码不能大于第一次调用
* 掩码总是变得越来越小
* 一个由 UTIL _ SEQ _ Run ()设置的掩码复制,以防在任务中再次调用 */
super_mask_backup = SuperMask;
SuperMask &= Mask_bm;
/*
* There are two independent mask to check: 有两个独立的掩码需要检查
* TaskMask that comes from UTIL_SEQ_PauseTask() / UTIL_SEQ_ResumeTask
*TaskMask掩码来自 UTIL _ SEQ _ PauseTask ()/UTIL _ SEQ _ ResumeTask
* SuperMask that comes from UTIL_SEQ_Run
* SuperMask掩码来自 UTIL _ SEQ _ Run 的 SuperMask
* If the waited event is there, exit from UTIL_SEQ_Run() to return to the waiting task
* 如果等待事件存在,退出 UTIL _ SEQ _ Run ()返回到 wait 任务
*/
local_taskset = TaskSet;
local_evtset = EvtSet;
local_taskmask = TaskMask;
local_evtwaited = EvtWaited;
//如果有任务要执行
while(((local_taskset & local_taskmask & SuperMask) != 0U) && ((local_evtset & local_evtwaited)==0U))
{
counter = 0U;
/* When a flag is set, the associated bit is set in TaskPrio[counter].priority mask depending
* on the priority parameter given from UTIL_SEQ_SetTask()
* The while loop is looking for a flag set from the highest priority maskr to the lower
* 设置标志时,相关位在 TaskPrio [ counter ]中设置。优先级掩码取决于从 UTIL _ SEQ _ SetTask () 给出的优先级参数 .下面的while 循环查找从最高优先级掩码到较低 的标志集
*/
while((TaskPrio[counter].priority & local_taskmask & SuperMask)== 0U)
{
counter++;
}
current_task_set = TaskPrio[counter].priority & local_taskmask & SuperMask;//查到后设置现行任务
/*
* The round_robin register is a mask of allowed flags to be evaluated.
* The concept is to make sure that on each round on UTIL_SEQ_Run(), if two same flags are always set,
* the sequencer does not run always only the first one.
* When a task has been executed, The flag is removed from the round_robin mask.
* If on the next UTIL_SEQ_RUN(), the two same flags are set again, the round_robin mask will mask out the first flag
* so that the second one can be executed.
* Note that the first flag is not removed from the list of pending task but just masked by the round_robin mask
* In the check below, the round_robin mask is reinitialize in case all pending tasks haven been executed at least once
* round _ robin 寄存器是被评估的允许标志的掩码。
* 这个概念是为了确保在 UTIL _ SEQ _ Run ()上的每一回合中,如果总是设置两个相同的标志,* 排序器并不总是只运行第一个标志。
* 当一个任务被执行时,标志将从 round _ robin 掩码中移除。
* 如果在下一个 UTIL _ SEQ _ RUN ()上,再次设置两个相同的标志,则 round _ robin 掩码将掩盖第一个标志
* ,以便可以执行第二个标志。注意,第一个标志没有从挂起任务列表中移除,只是被 round _ robin 掩码掩盖了。在下面的检查中,round _ robin 掩码被重新初始化,以防所有挂起的任务至少执行了一次
*/
if ((TaskPrio[counter].round_robin & current_task_set) == 0U)
{
TaskPrio[counter].round_robin = UTIL_SEQ_ALL_BIT_SET;
}
/* Read the flag index of the task to be executed
* Once the index is read, the associated task will be executed even though a higher priority stack is requested
* before task execution.
* 读取要执行的任务的标志索引 一旦读取了索引,即使在任务执行之前请求了更高的优先级堆栈,关联的任务也将被执行。*/
CurrentTaskIdx = (SEQ_BitPosition(current_task_set & TaskPrio[counter].round_robin));
/*
* remove from the roun_robin mask the task that has been selected to be executed
* 从 roun _ robin 掩码中删除要执行的任务
*/
TaskPrio[counter].round_robin &= ~(1U << CurrentTaskIdx);
UTIL_SEQ_ENTER_CRITICAL_SECTION( );
/* remove from the list or pending task the one that has been selected to be executed
*从列表或挂起的任务中删除已选择要执行的任务 */
TaskSet &= ~(1U << CurrentTaskIdx);
/* remove from all priority mask the task that has been selected to be executed从所有优先级屏蔽中删除已选择要执行的任务 */
for (counter = UTIL_SEQ_CONF_PRIO_NBR; counter != 0U; counter--)
{
TaskPrio[counter - 1U].priority &= ~(1U << CurrentTaskIdx);
}
UTIL_SEQ_EXIT_CRITICAL_SECTION( );
/* Execute the task 进入任务回调 函数执行任务*/
TaskCb[CurrentTaskIdx]( );
local_taskset = TaskSet;
local_evtset = EvtSet;
local_taskmask = TaskMask;
local_evtwaited = EvtWaited;
} //任务执行while循环结束
/* the set of CurrentTaskIdx to no task running allows to call WaitEvt in the Pre/Post ilde context CurrentTaskIdx 设置为无任务运行,允许在 Pre/Post ilde 上下文中调用 WaitEvt */
CurrentTaskIdx = UTIL_SEQ_NOTASKRUNNING;
/* if a waited event is present, ignore the IDLE sequence 如果存在等待事件,则忽略 IDLE 行为*/
if ((local_evtset & EvtWaited)== 0U)
{
UTIL_SEQ_PreIdle( );
UTIL_SEQ_ENTER_CRITICAL_SECTION_IDLE( );
local_taskset = TaskSet;
local_evtset = EvtSet;
local_taskmask = TaskMask;
if ((local_taskset & local_taskmask & SuperMask) == 0U)
{
if ((local_evtset & EvtWaited)== 0U)
{
UTIL_SEQ_Idle( );
}
}
UTIL_SEQ_EXIT_CRITICAL_SECTION_IDLE( );
UTIL_SEQ_PostIdle( );
}
/* restore the mask from UTIL_SEQ_Run() */
SuperMask = super_mask_backup;
return;
}
上面是调度器运行函数的实现部分,其他的可以从代码中了解。
在下面的文件中调用和使用它们:
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(39) : } UTIL_SEQ_Priority_t;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(54) : * UTIL_SEQ_ENTER_CRITICAL_SECTION. The redefinition of this macro will allow
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(58) : #ifndef UTIL_SEQ_ENTER_CRITICAL_SECTION_IDLE
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(59) : #define UTIL_SEQ_ENTER_CRITICAL_SECTION_IDLE( ) UTIL_SEQ_ENTER_CRITICAL_SECTION( )
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(65) : * UTIL_SEQ_ENTER_CRITICAL_SECTION_IDLE
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(67) : #ifndef UTIL_SEQ_EXIT_CRITICAL_SECTION_IDLE
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(68) : #define UTIL_SEQ_EXIT_CRITICAL_SECTION_IDLE( ) UTIL_SEQ_EXIT_CRITICAL_SECTION( )
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(74) : #define UTIL_SEQ_NOTASKRUNNING (0xFFFFFFFFU)
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(79) : #define UTIL_SEQ_NO_BIT_SET (0U)
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(84) : #define UTIL_SEQ_ALL_BIT_SET (~0U)
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(89) : #ifndef UTIL_SEQ_CONF_TASK_NBR
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(90) : #define UTIL_SEQ_CONF_TASK_NBR (32)
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(93) : #if UTIL_SEQ_CONF_TASK_NBR > 32
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(94) : #error "UTIL_SEQ_CONF_PRIO_NBR must be less of equal then 32"
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(100) : #ifndef UTIL_SEQ_CONF_PRIO_NBR
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(101) : #define UTIL_SEQ_CONF_PRIO_NBR (2)
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(107) : #ifndef UTIL_SEQ_MEMSET8
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(108) : #define UTIL_SEQ_MEMSET8( dest, value, size ) UTILS_MEMSET8( dest, value, size )
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(124) : static volatile UTIL_SEQ_bm_t TaskSet;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(129) : static volatile UTIL_SEQ_bm_t TaskMask = UTIL_SEQ_ALL_BIT_SET;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(134) : static UTIL_SEQ_bm_t SuperMask = UTIL_SEQ_ALL_BIT_SET;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(139) : static volatile UTIL_SEQ_bm_t EvtSet = UTIL_SEQ_NO_BIT_SET;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(144) : static volatile UTIL_SEQ_bm_t EvtWaited = UTIL_SEQ_NO_BIT_SET;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(154) : static void (*TaskCb[UTIL_SEQ_CONF_TASK_NBR])( void );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(159) : static volatile UTIL_SEQ_Priority_t TaskPrio[UTIL_SEQ_CONF_PRIO_NBR];
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(180) : void UTIL_SEQ_Init( void )
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(182) : TaskSet = UTIL_SEQ_NO_BIT_SET;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(183) : TaskMask = UTIL_SEQ_ALL_BIT_SET;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(184) : SuperMask = UTIL_SEQ_ALL_BIT_SET;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(185) : EvtSet = UTIL_SEQ_NO_BIT_SET;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(186) : EvtWaited = UTIL_SEQ_NO_BIT_SET;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(188) : (void)UTIL_SEQ_MEMSET8((uint8_t *)TaskCb, 0, sizeof(TaskCb));
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(189) : for(uint32_t index = 0; index < UTIL_SEQ_CONF_PRIO_NBR; index++)
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(194) : UTIL_SEQ_INIT_CRITICAL_SECTION( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(197) : void UTIL_SEQ_DeInit( void )
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(207) : void UTIL_SEQ_Run( UTIL_SEQ_bm_t Mask_bm )
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(210) : UTIL_SEQ_bm_t current_task_set;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(211) : UTIL_SEQ_bm_t super_mask_backup;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(212) : UTIL_SEQ_bm_t local_taskset;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(213) : UTIL_SEQ_bm_t local_evtset;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(214) : UTIL_SEQ_bm_t local_taskmask;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(215) : UTIL_SEQ_bm_t local_evtwaited;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(220) : * A copy is made of the mask set by UTIL_SEQ_Run() in case it is called again in the task
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(227) : * TaskMask that comes from UTIL_SEQ_PauseTask() / UTIL_SEQ_ResumeTask
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(228) : * SuperMask that comes from UTIL_SEQ_Run
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(229) : * If the waited event is there, exit from UTIL_SEQ_Run() to return to the
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(241) : * on the priority parameter given from UTIL_SEQ_SetTask()
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(253) : * The concept is to make sure that on each round on UTIL_SEQ_Run(), if two same flags are always set,
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(256) : * If on the next UTIL_SEQ_RUN(), the two same flags are set again, the round_robin mask will mask out the first flag
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(264) : TaskPrio[counter].round_robin = UTIL_SEQ_ALL_BIT_SET;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(279) : UTIL_SEQ_ENTER_CRITICAL_SECTION( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(283) : for (counter = UTIL_SEQ_CONF_PRIO_NBR; counter != 0U; counter--)
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(287) : UTIL_SEQ_EXIT_CRITICAL_SECTION( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(299) : CurrentTaskIdx = UTIL_SEQ_NOTASKRUNNING;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(303) : UTIL_SEQ_PreIdle( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(305) : UTIL_SEQ_ENTER_CRITICAL_SECTION_IDLE( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(313) : UTIL_SEQ_Idle( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(316) : UTIL_SEQ_EXIT_CRITICAL_SECTION_IDLE( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(318) : UTIL_SEQ_PostIdle( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(321) : /* restore the mask from UTIL_SEQ_Run() */
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(327) : void UTIL_SEQ_RegTask(UTIL_SEQ_bm_t TaskId_bm, uint32_t Flags, void (*Task)( void ))
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(330) : UTIL_SEQ_ENTER_CRITICAL_SECTION();
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(334) : UTIL_SEQ_EXIT_CRITICAL_SECTION();
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(339) : uint32_t UTIL_SEQ_IsRegisteredTask(UTIL_SEQ_bm_t TaskId_bm )
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(342) : UTIL_SEQ_ENTER_CRITICAL_SECTION();
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(349) : UTIL_SEQ_EXIT_CRITICAL_SECTION();
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(353) : void UTIL_SEQ_SetTask( UTIL_SEQ_bm_t TaskId_bm , uint32_t Task_Prio )
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(355) : UTIL_SEQ_ENTER_CRITICAL_SECTION( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(360) : UTIL_SEQ_EXIT_CRITICAL_SECTION( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(365) : uint32_t UTIL_SEQ_IsSchedulableTask( UTIL_SEQ_bm_t TaskId_bm)
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(368) : UTIL_SEQ_bm_t local_taskset;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(370) : UTIL_SEQ_ENTER_CRITICAL_SECTION();
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(375) : UTIL_SEQ_EXIT_CRITICAL_SECTION();
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(379) : void UTIL_SEQ_PauseTask( UTIL_SEQ_bm_t TaskId_bm )
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(381) : UTIL_SEQ_ENTER_CRITICAL_SECTION( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(385) : UTIL_SEQ_EXIT_CRITICAL_SECTION( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(390) : uint32_t UTIL_SEQ_IsPauseTask( UTIL_SEQ_bm_t TaskId_bm )
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(393) : UTIL_SEQ_ENTER_CRITICAL_SECTION( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(397) : UTIL_SEQ_EXIT_CRITICAL_SECTION( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(401) : void UTIL_SEQ_ResumeTask( UTIL_SEQ_bm_t TaskId_bm )
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(403) : UTIL_SEQ_ENTER_CRITICAL_SECTION( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(407) : UTIL_SEQ_EXIT_CRITICAL_SECTION( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(412) : void UTIL_SEQ_SetEvt( UTIL_SEQ_bm_t EvtId_bm )
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(414) : UTIL_SEQ_ENTER_CRITICAL_SECTION( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(418) : UTIL_SEQ_EXIT_CRITICAL_SECTION( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(423) : void UTIL_SEQ_ClrEvt( UTIL_SEQ_bm_t EvtId_bm )
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(425) : UTIL_SEQ_ENTER_CRITICAL_SECTION( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(429) : UTIL_SEQ_EXIT_CRITICAL_SECTION( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(434) : void UTIL_SEQ_WaitEvt(UTIL_SEQ_bm_t EvtId_bm)
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(436) : UTIL_SEQ_bm_t event_waited_id_backup;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(437) : UTIL_SEQ_bm_t current_task_idx;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(438) : UTIL_SEQ_bm_t wait_task_idx;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(441) : * may be overwritten in case there are nested call of UTIL_SEQ_Run()
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(444) : if(UTIL_SEQ_NOTASKRUNNING == CurrentTaskIdx)
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(467) : UTIL_SEQ_EvtIdle(wait_task_idx, EvtId_bm);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(471) : * Restore the CurrentTaskIdx that may have been modified by call of UTIL_SEQ_Run() from UTIL_SEQ_EvtIdle()
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(472) : * This is required so that a second call of UTIL_SEQ_WaitEvt() in the same process pass the correct current_task_id_bm
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(473) : * in the call of UTIL_SEQ_EvtIdle()
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(477) : UTIL_SEQ_ENTER_CRITICAL_SECTION( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(481) : UTIL_SEQ_EXIT_CRITICAL_SECTION( );
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(487) : UTIL_SEQ_bm_t UTIL_SEQ_IsEvtPend( void )
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(489) : UTIL_SEQ_bm_t local_evtwaited = EvtWaited;
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(493) : __WEAK void UTIL_SEQ_EvtIdle( UTIL_SEQ_bm_t TaskId_bm, UTIL_SEQ_bm_t EvtWaited_bm )
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(496) : UTIL_SEQ_Run(~TaskId_bm);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(500) : __WEAK void UTIL_SEQ_Idle( void )
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(505) : __WEAK void UTIL_SEQ_PreIdle( void )
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Utilities\sequencer\stm32_seq.c(513) : __WEAK void UTIL_SEQ_PostIdle( void )
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\System\Modules\MemoryManager\advanced_memory_manager.c(253) : UTIL_SEQ_INIT_CRITICAL_SECTION ();
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\System\Modules\MemoryManager\advanced_memory_manager.c(348) : UTIL_SEQ_ENTER_CRITICAL_SECTION ();
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\System\Modules\MemoryManager\advanced_memory_manager.c(390) : UTIL_SEQ_EXIT_CRITICAL_SECTION ();
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\System\Modules\MemoryManager\advanced_memory_manager.c(398) : UTIL_SEQ_ENTER_CRITICAL_SECTION ();
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\System\Modules\MemoryManager\advanced_memory_manager.c(469) : UTIL_SEQ_EXIT_CRITICAL_SECTION ();
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\System\Modules\MemoryManager\advanced_memory_manager.c(505) : UTIL_SEQ_ENTER_CRITICAL_SECTION ();
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\System\Modules\MemoryManager\advanced_memory_manager.c(559) : UTIL_SEQ_EXIT_CRITICAL_SECTION ();
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\System\Modules\ble_timer.c(58) : UTIL_SEQ_RegTask(1U << CFG_TASK_BLE_TIMER_BCKGND, UTIL_SEQ_RFU, BLE_TIMER_Background);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\System\Modules\ble_timer.c(129) : UTIL_SEQ_SetTask( 1U << CFG_TASK_BLE_TIMER_BCKGND, CFG_SEQ_PRIO_0);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\STM32_WPAN\Target\ll_sys_if.c(65) : UTIL_SEQ_RegTask( 1U << CFG_TASK_LINK_LAYER, UTIL_SEQ_RFU, ll_sys_bg_process);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\STM32_WPAN\Target\ll_sys_if.c(75) : UTIL_SEQ_SetTask(1U << CFG_TASK_LINK_LAYER, CFG_SEQ_PRIO_0);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\STM32_WPAN\Target\ll_sys_if.c(108) : UTIL_SEQ_RegTask( 1U << CFG_TASK_LINK_LAYER_TEMP_MEAS, UTIL_SEQ_RFU, request_temperature_measurement);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\STM32_WPAN\Target\ll_sys_if.c(118) : UTIL_SEQ_SetTask(1U << CFG_TASK_LINK_LAYER_TEMP_MEAS, CFG_SEQ_PRIO_0);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\STM32_WPAN\Target\host_stack_if.c(63) : UTIL_SEQ_SetTask( 1U << CFG_TASK_BLE_HOST, CFG_SEQ_PRIO_0);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\STM32_WPAN\App\p2p_server_app.c(207) : UTIL_SEQ_RegTask( 1U << CFG_TASK_SEND_NOTIF_ID, UTIL_SEQ_RFU, P2P_SERVER_Switch_c_SendNotification);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\STM32_WPAN\App\app_ble.c(247) : UTIL_SEQ_RegTask(1U << CFG_TASK_BLE_HOST, UTIL_SEQ_RFU, BleStack_Process_BG);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\STM32_WPAN\App\app_ble.c(248) : UTIL_SEQ_RegTask(1U << CFG_TASK_HCI_ASYNCH_EVT_ID, UTIL_SEQ_RFU, Ble_UserEvtRx);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\STM32_WPAN\App\app_ble.c(287) : UTIL_SEQ_RegTask(1<<CFG_TASK_ADV_CANCEL_ID, UTIL_SEQ_RFU, Adv_Cancel);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\STM32_WPAN\App\app_ble.c(1182) : UTIL_SEQ_SetTask(1U << CFG_TASK_HCI_ASYNCH_EVT_ID, CFG_SEQ_PRIO_0);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\STM32_WPAN\App\app_ble.c(1186) : UTIL_SEQ_SetTask(1U << CFG_TASK_BLE_HOST, CFG_SEQ_PRIO_0);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\STM32_WPAN\App\app_ble.c(1248) : UTIL_SEQ_SetEvt(1U << CFG_IDLEEVT_PROC_GAP_COMPLETE);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\STM32_WPAN\App\app_ble.c(1254) : UTIL_SEQ_WaitEvt(1U << CFG_IDLEEVT_PROC_GAP_COMPLETE);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\STM32_WPAN\App\app_ble.c(1287) : UTIL_SEQ_SetTask(1 << CFG_TASK_ADV_CANCEL_ID, CFG_SEQ_PRIO_0);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\STM32_WPAN\App\app_ble.c(1413) : UTIL_SEQ_SetTask(1U << CFG_TASK_HCI_ASYNCH_EVT_ID, CFG_SEQ_PRIO_0);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\STM32_WPAN\App\app_ble.c(1445) : UTIL_SEQ_SetTask( 1<<CFG_TASK_SEND_NOTIF_ID, CFG_SEQ_PRIO_0);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(209) : UTIL_SEQ_RegTask(1U << CFG_TASK_AMM_BCKGND, UTIL_SEQ_RFU, AMM_BackgroundProcess);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(215) : UTIL_SEQ_RegTask(1U << CFG_TASK_FLASH_MANAGER_BCKGND, UTIL_SEQ_RFU, FM_BackgroundProcess);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(227) : UTIL_SEQ_RegTask(1U << CFG_TASK_BPKA, UTIL_SEQ_RFU, BPKA_BG_Process);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(388) : UTIL_SEQ_RegTask(1U << CFG_TASK_HW_RNG, UTIL_SEQ_RFU, (void (*)(void))HW_RNG_Process);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(435) : UTIL_SEQ_RegTask(1U << TASK_BUTTON_1, UTIL_SEQ_RFU, APPE_Button1Action);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(436) : UTIL_SEQ_RegTask(1U << TASK_BUTTON_2, UTIL_SEQ_RFU, APPE_Button2Action);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(437) : UTIL_SEQ_RegTask(1U << TASK_BUTTON_3, UTIL_SEQ_RFU, APPE_Button3Action);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(463) : UTIL_SEQ_SetTask(1U << TASK_BUTTON_1, CFG_SEQ_PRIO_0);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(466) : UTIL_SEQ_SetTask(1U << TASK_BUTTON_2, CFG_SEQ_PRIO_0);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(469) : UTIL_SEQ_SetTask(1U << TASK_BUTTON_3, CFG_SEQ_PRIO_0);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(519) : UTIL_SEQ_SetTask(1U << TASK_BUTTON_1, CFG_SEQ_PRIO_0);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(527) : UTIL_SEQ_SetTask(1U << TASK_BUTTON_2, CFG_SEQ_PRIO_0);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(535) : UTIL_SEQ_SetTask(1U << TASK_BUTTON_3, CFG_SEQ_PRIO_0);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(543) : UTIL_SEQ_SetTask(1U << TASK_BUTTON_1, CFG_SEQ_PRIO_0);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(551) : UTIL_SEQ_SetTask(1U << TASK_BUTTON_2, CFG_SEQ_PRIO_0);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(559) : UTIL_SEQ_SetTask(1U << TASK_BUTTON_3, CFG_SEQ_PRIO_0);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(579) : UTIL_SEQ_Run(UTIL_SEQ_DEFAULT);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(585) : void UTIL_SEQ_Idle( void )
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(595) : void UTIL_SEQ_PreIdle( void )
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(617) : void UTIL_SEQ_PostIdle( void )
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(628) : UTIL_SEQ_SetTask(1U << CFG_TASK_BPKA, CFG_SEQ_PRIO_0);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(633) : UTIL_SEQ_SetTask(1U << CFG_TASK_HW_RNG, CFG_SEQ_PRIO_0);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(647) : UTIL_SEQ_SetTask(1U << CFG_TASK_AMM_BCKGND, CFG_SEQ_PRIO_0);
D:\AssessmentBoard\st\stm32wb52ba\STM32Cube_FW_WBA_V1.1.0\Projects\NUCLEO-WBA52CG\Applications\BLE\BLE_p2pServer\Core\Src\app_entry.c(653) : UTIL_SEQ_SetTask(1U << CFG_TASK_FLASH_MANAGER_BCKGND, CFG_SEQ_PRIO_0);
好先简单的介绍到这里,了解不够深入望见谅。