一、
目录
- 一、
- 关键词
- 平台说明
- 一、Timer
- 1.1 配置
- 1.2Periodical Interrupt Timer (PIT)和High Resolution Timer (HRT)
- 二、Alarm 工作机制
- 三、Code
- 3.1创建一个15ms的runnable
- 3.2mapping到basic task
- 3.3生成代码
关键词
嵌入式、C语言、autosar、OS、BSW
平台说明
项目 | Value |
---|---|
OS | autosar OS |
autosar厂商 | vector , |
芯片厂商 | TI 英飞凌 |
编程语言 | C,C++ |
编译器 | HighTec (GCC) |
>>>>>回到总目录<<<<<<
一、Timer
不管何种单片机,其硬件肯定都会有晶振,它将为系统提供基本的时钟信号。autosar OS可以用这个基准时钟去触发alarms和schedule table。
1.1 配置
1.2Periodical Interrupt Timer (PIT)和High Resolution Timer (HRT)
见[AutoSar]工程中的cpuload陷阱(一)
二、Alarm 工作机制
1.在OS启动后,硬件中断会使TickTime增加,当System Counter == 设定的Alarm 的值的时候便会执行对应的alarm的动作;
2.alarm action包括:①激活一个task。②设置一个时间用于extended task。③调用一个回调函数。④增加OS计数值。
3.使能一个alram可以通过OS 启动或者另一个task去激活。
三、Code
3.1创建一个15ms的runnable
3.2mapping到basic task
3.3生成代码
FUNC(StatusType, OS_CODE) SetRelAlarm
(
AlarmType AlarmID,
TickType Increment,
TickType Cycle
)
在Rte_Start(void)中生成
(void)SetRelAlarm(Rte_Al_TE_CpApSWC1_RunnableSWC1_AglDet_15ms, RTE_MSEC_SystemTimer(0U) + (TickType)1U, RTE_MSEC_SystemTimer(15U)); /* PRQA S 3417, 1840 */ /* MD_Rte_Os, MD_Rte_Os */
在 Rte_Stop(void)中生成
(void)CancelAlarm(Rte_Al_TE_CpApSWC1_RunnableSWC1_AglDet_15ms); /* PRQA S 3417 */ /* MD_Rte_Os */
在Os_Alarm_Lcfg.c中生成
/*! Alarm configuration data: Rte_Al_TE_CpApSWC1_RunnableSWC1_AglDet_15ms */
CONST(Os_AlarmActivateTaskConfigType, OS_CONST) OsCfg_Alarm_Rte_Al_TE_CpApSWC1_RunnableSWC1_AglDet_15ms =
{
/* .Alarm = */
{
/* .Job = */
{
/* .Dyn = */ OS_ALARM_CASTDYN_ALARM_2_JOB(OsCfg_Alarm_Rte_Al_TE_CpApSWC1_RunnableSWC1_AglDet_15ms_Dyn),
/* .Counter = */ OS_COUNTER_CASTCONFIG_TIMERPFRT_2_COUNTER(OsCfg_Counter_SystemTimer),
/* .Callback = */ Os_AlarmActionActivateTask
},
/* .Autostart = */
{
/* .AlarmTime = */ 0u, /* 0.0 sec */
/* .Cycle = */ 0u, /* 0.0 sec */
/* .ApplicationModes = */ OS_APPMODE_NONE,
/* .AlarmMode = */ OS_ALARMMODE_ABSOLUTE
},
/* .AccessingApplications = */ (OS_APPID2MASK(OsApplication_Core3) | OS_APPID2MASK(SystemApplication_OsCore3) | OS_APPID2MASK(SystemApplication_OsCore4) | OS_APPID2MASK(SystemApplication_OsCore5)), /* PRQA S 0410 */ /* MD_MSR_Dir1.1 */
/* .OwnerApplication = */ &OsCfg_App_OsApplication_Core3
},
/* .Task = */ &OsCfg_Task_OsTask_core3_basic
};
OS_ALARM_CASTCONFIG_ALARMACTIVATETASK_2_ALARM(OsCfg_Alarm_Rte_Al_TE_CpApSWC1_RunnableSWC1_AglDet_15ms),
>>>>>回到总目录<<<<<<