AUTOSAR OS中斷和異常
分享文章到朋友圈或點(diǎn)在看,加微信cloud2sunshine領(lǐng)取豐厚AUTOSAR學(xué)習(xí)資料!
中斷和異常
中斷
在EB中可以將具有給定中斷級(jí)別和排隊(duì)優(yōu)先級(jí)的所有ISR分配給單個(gè)線程 當(dāng)使用EB的Os時(shí),中斷應(yīng)由此Os處理,因此Mcal_EnableALlInterrupts和Mcal_DisableALlInterrupts函數(shù)被重定向到Os的 EnableAllInterrupts和DisableALlInterrupts函數(shù)。在AUTOSAR OS 規(guī)范中定義了一類中斷和二類中斷。EB中的中斷Level的優(yōu)先級(jí)順序如下圖1:
圖1 中斷LEVEL的優(yōu)先級(jí)
而在Microsar OS中,則擴(kuò)展了中斷的類型,見(jiàn)下圖2的中斷優(yōu)先級(jí)排序:
圖2 中斷LEVEL的優(yōu)先級(jí)
其中,類別0 ISR,具有最小的中斷延遲時(shí)間,尤其是在SC2或SC4系統(tǒng)中。這是OS標(biāo)準(zhǔn)的擴(kuò)展。例如在OS內(nèi)核切換任務(wù)堆棧時(shí)使用類別0 ISR。
那么類別1中斷和類別2中斷的區(qū)別是什么?
類別1:內(nèi)部不允許OS API的調(diào)用,不支持中斷的嵌套,但是支持內(nèi)聯(lián)匯編的方式實(shí)現(xiàn)嵌套。
類別2: 允許OS API的調(diào)用,支持中斷的嵌套。
異常
在SC3和SC4系統(tǒng)中,MICROSAR OS為內(nèi)存保護(hù)錯(cuò)誤和SYSCALL / TRAP指令定義OS異常處理程序,應(yīng)用程序無(wú)法配置操作系統(tǒng)使用的異常源。即配置工具中不支持配置異常源和相應(yīng)的屬性。自未分配的異常源的異常請(qǐng)求由OS處理,并通過(guò)調(diào)用PanicHook()或ProtectionHook去分析或處理這些異常。
下面給出代碼,您細(xì)品:
/*ProtectionHook函數(shù)定義處:通過(guò)宏定義隱藏實(shí)現(xiàn)細(xì)節(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ù)定義:打印錯(cuò)誤信息(return PRO_KILLAPPL出來(lái)告訴內(nèi)核殺死這該死的APP)*/
ProtectionReturnType ProtectionHook( StatusType FatalError ) {
printf("## ProtectionHook\n");
return PRO_KILLAPPL;
}
/*ProtectionHook函數(shù)被調(diào)用處:進(jìn)行堆棧指針檢查,一不開(kāi)心就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);
}
}
AUTOSAR ASILD級(jí)別安全軟件模塊的安全機(jī)制介紹
基于Autosar軟件的功能安全開(kāi)發(fā)的介紹
AUTOSAR模式管理經(jīng)驗(yàn)總結(jié)
使用AURIX TOM模塊生成交流電機(jī)的PWM驅(qū)動(dòng)
OS-Protection -Timing Protection
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!