TASK(OsTask_100_7_5ms) /* PRQA S 3408, 1503 */ /* MD_Rte_3408, MD_MSR_14.1 */
{
EventMaskType ev;
for(;;)
{
(void)WaitEvent(Rte_Ev_Cyclic_OsTask_100_7_5ms_7500_100000us | Rte_Ev_Run_TDC_TDC_Runnable); /* PRQA S 3417 */ /* MD_Rte_Os */
(void)GetEvent(OsTask_100_7_5ms, &ev); /* PRQA S 3417 */ /* MD_Rte_Os */
(void)ClearEvent(ev & (Rte_Ev_Cyclic_OsTask_100_7_5ms_7500_100000us | Rte_Ev_Run_TDC_TDC_Runnable)); /* PRQA S 3417 */ /* MD_Rte_Os */
if ((ev & Rte_Ev_Cyclic_OsTask_100_7_5ms_7500_100000us) != (EventMaskType)0)
{
/* call runnable */
DiagDTCTriggerPeriod100ms_Runnable();
/* call runnable */
DiagManufactureMode100msPeriodRunnable();
/* call runnable */
VCPWLS_SG_Tx_Runnable();
/* call runnable */
DTC_Adpr_100msRunnable();
/* call runnable */
Task_100_7_5ms_Offset_Runnable();
}
if ((ev & Rte_Ev_Run_TDC_TDC_Runnable) != (EventMaskType)0)
{
/* call runnable */
TDC_Runnable();
}
}
} /* PRQA S 6010, 6030, 6050, 6080 */ /* MD_MSR_STPTH, MD_MSR_STCYC, MD_MSR_STCAL, MD_MSR_STMIF */
这段代码是一个AUTOSAR任务(OsTask_100_7_5ms),用于周期性地执行一些可运行项(runnable)。
代码的主要逻辑如下:
1. 首先,定义了一个名为ev的变量,用于存储任务的事件掩码。
2. 接下来,使用一个无限循环for(;;),表示任务将一直执行以下操作。
3. 在循环中,首先调用WaitEvent函数等待两个事件的发生:Rte_Ev_Cyclic_OsTask_100_7_5ms_7500_100000us和Rte_Ev_Run_TDC_TDC_Runnable。这里使用了位掩码来表示事件,通过按位或操作将两个事件合并为一个事件掩码。
4. 然后,调用GetEvent函数获取任务的事件状态,并将其存储在ev变量中。,事件的状态存储在ev变量中,所以需要对比ev变量和原来的宏定义,宏定义定义为1.
5. 接着,调用ClearEvent函数清除已经发生的事件,使用按位与操作将已发生的事件从ev变量中清除。
6. 接下来,通过检查ev变量中的事件掩码,判断哪些事件已经触发。
- 如果ev中的事件掩码与Rte_Ev_Cyclic_OsTask_100_7_5ms_7500_100000us不为零,表示Rte_Ev_Cyclic_OsTask_100_7_5ms_7500_100000us事件已经触发。在这种情况下,会依次调用一系列可运行项(runnable)。
- 如果ev中的事件掩码与Rte_Ev_Run_TDC_TDC_Runnable不为零,表示Rte_Ev_Run_TDC_TDC_Runnable事件已经触发。在这种情况下,会调用TDC_Runnable可运行项。
7. 循环会继续执行,等待下一次事件触发。
总体来说,这段代码表示一个周期性任务,在等待指定的事件发生后,根据事件的触发情况执行相应的可运行项。这种任务的设计可以用于实现周期性的任务调度和事件驱动的逻辑。