ffmpeg中断 无异常信息_AUTOSAR OS 中断和异常

中断和异常

中断

92e02052a065fd53ec177b4529b1a45a.png

在EB中可以将具有给定中断级别和排队优先级的所有ISR分配给单个线程 当使用EB的Os时,中断应由此Os处理,因此Mcal_EnableALlInterrupts和Mcal_DisableALlInterrupts函数被重定向到Os的 EnableAllInterrupts和DisableALlInterrupts函数。 在AUTOSAR OS 规范中定义了一类中断和二类中断。EB中的中断Level的优先级顺序如下图1:

1eb8de788c5ed7cbc266417d74771c14.png
图1 中断LEVEL的优先级

而在Microsar OS中,则扩展了中断的类型,见下图2的中断优先级排序:

cb2c463b631c2d52fcf90744eacdbb21.png
图2 中断LEVEL的优先级

其中,类别0 ISR,具有最小的中断延迟时间,尤其是在SC2或SC4系统中。 这是OS标准的扩展。例如在OS内核切换任务堆栈时使用类别0 ISR。

那么类别1中断和类别2中断的区别是什么?
类别1:内部不允许OS API的调用,不支持中断的嵌套,但是支持内联汇编的方式实现嵌套。
类别2: 允许OS API的调用,支持中断的嵌套。

异常

在SC3和SC4系统中,MICROSAR OS为内存保护错误和SYSCALL / TRAP指令定义OS异常处理程序,应用程序无法配置操作系统使用的异常源。即配置工具中不支持配置异常源和相应的属性。 自未分配的异常源的异常请求由OS处理,并通过调用PanicHook()或ProtectionHook去分析或处理这些异常。

下面给出代码,您细品:

/*ProtectionHook函数定义处:
通过宏定义隐藏实现细节*/
#if	(OS_USE_APPLICATIONS == STD_ON)
#define PROTECTIONHOOK(_x) 
	do { 
		if( Os_Sys.hooks->ProtectionHook != NULL ) { 
			Os_Sys.hooks->ProtectionHook(_x); 
		} 
    } while(0)

#endif


 /*函数定义:打印错误信息(return PRO_KILLAPPL出来告诉内核杀死这该死的APP)*/
ProtectionReturnType ProtectionHook( StatusType FatalError ) {
	printf("## ProtectionHookn");
	return PRO_KILLAPPL;
}
/*ProtectionHook函数被调用处:进行堆栈指针检查,一不开心就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: %sn",pcbPtr->constPtr->name);
		Os_TaskSwapContext(currPcbPtr,pcbPtr);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值