AUTOSAR OS中斷和異常
分享文章到朋友圈或點在看,加微信cloud2sunshine領(lǐng)取豐厚AUTOSAR學習資料!
中斷和異常
中斷
在EB中可以將具有給定中斷級別和排隊優(yōu)先級的所有ISR分配給單個線程 當使用EB的Os時,中斷應由此Os處理,因此Mcal_EnableALlInterrupts和Mcal_DisableALlInterrupts函數(shù)被重定向到Os的 EnableAllInterrupts和DisableALlInterrupts函數(shù)。在AUTOSAR OS 規(guī)范中定義了一類中斷和二類中斷。EB中的中斷Level的優(yōu)先級順序如下圖1:
圖1 中斷LEVEL的優(yōu)先級
而在Microsar OS中,則擴展了中斷的類型,見下圖2的中斷優(yōu)先級排序:
圖2 中斷LEVEL的優(yōu)先級
其中,類別0 ISR,具有最小的中斷延遲時間,尤其是在SC2或SC4系統(tǒng)中。這是OS標準的擴展。例如在OS內(nèi)核切換任務堆棧時使用類別0 ISR。
那么類別1中斷和類別2中斷的區(qū)別是什么?
類別1:內(nèi)部不允許OS API的調(diào)用,不支持中斷的嵌套,但是支持內(nèi)聯(lián)匯編的方式實現(xiàn)嵌套。
類別2: 允許OS API的調(diào)用,支持中斷的嵌套。
異常
在SC3和SC4系統(tǒng)中,MICROSAR OS為內(nèi)存保護錯誤和SYSCALL / TRAP指令定義OS異常處理程序,應用程序無法配置操作系統(tǒng)使用的異常源。即配置工具中不支持配置異常源和相應的屬性。自未分配的異常源的異常請求由OS處理,并通過調(diào)用PanicHook()或ProtectionHook去分析或處理這些異常。
下面給出代碼,您細品:
/*ProtectionHook函數(shù)定義處:通過宏定義隱藏實現(xiàn)細節(jié)*/
#if (OS_USE_APPLICATIONS == STD_ON)
#define PROTECTIONHOOK(_x) \
do { \
if( Os_Sys.hooks->ProtectionHook != NULL ) { \
Os_Sys.hooks->ProtectionHook(_x); \
} \
} while(0)
#endif
/*函數(shù)定義:打印錯誤信息(return PRO_KILLAPPL出來告訴內(nèi)核殺死這該死的APP)*/
ProtectionReturnType ProtectionHook( StatusType FatalError ) {
printf("## ProtectionHook\n");
return PRO_KILLAPPL;
}
/*ProtectionHook函數(shù)被調(diào)用處:進行堆棧指針檢查,一不開心就ProtectionHook了*/
Void StackFaultReport(OsTaskVarType *pcbPtr)
{
if( pcbPtr != currPcbPtr )
{
if( (op & OP_CHAIN_TASK) && ( currPcbPtr == Os_Sys.chainedPcbPtr ) ) {
/* #2 */
Os_TaskRunningToReady(currPcbPtr);
}
/*
* Swap context
*/
assert(pcbPtr!=NULL);
Os_ResourceReleaseInternal();
#if (OS_STACK_MONITORING == 1)
if( !Os_StackIsEndmarkOk(currPcbPtr) ) {
#if ( OS_SC1 == STD_ON) || ( OS_SC2 == STD_ON )
/** @req OS068 */
ShutdownOS(E_OS_STACKFAULT);
#else
/** @req OS396
* If a stack fault is detected by stack monitoring AND the configured scalability
* class is 3 or 4, the Operating System module shall call the ProtectionHook() with
* the status E_OS_STACKFAULT.
* */
PROTECTIONHOOK(E_OS_STACKFAULT);
#endif
}
#endif
OS_DEBUG(D_TASK,"Swapping to: %s\n",pcbPtr->constPtr->name);
Os_TaskSwapContext(currPcbPtr,pcbPtr);
}
}
OS-Protection -Timing Protection
免責聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!