欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > S32K在FreeRTOS下的外设中断异常问题

S32K在FreeRTOS下的外设中断异常问题

2025/2/21 3:16:51 来源:https://blog.csdn.net/floenrce/article/details/144536920  浏览:    关键词:S32K在FreeRTOS下的外设中断异常问题

一、问题:

1、在S32DS基于FreeRTOS进行S32K144的开发,SPI通过DMA进行传输

        在调用信号量接口时发现会进入下面的断言:

        configASSERT( ucCurrentPriority >= ucMaxSysCallPriority );

二、问题分析:

 1、通过断言处的注释可以看出:

如果某个中断服务函数(ISR)调用了 FreeRTOS 提供的中断安全 API,但该中断的优先级高于 configMAX_SYSCALL_INTERRUPT_PRIORITY,则会触发断言失败

中断安全的FreeRTOS API只能被优先级等于或低于configMAX_SYSCALL_INTERRUPT_PRIORITY 的中断调用

调用 FreeRTOS API 的中断不能保留默认的 优先级 0,因为 0 是最高优先级

2、由此得出结论:

        如果没有设置外设中断优先级,系统会将其中断优先级设置为默认优先级0

        可以通过 INT_SYS_GetPriority(IRQn_Type irqNumber) 函数查看中断优先级,可以看到默认优先级为0

        因为数字越小的优先级越高,而此时系统内核中断优先级设置为0x10,所以外设中断优先级高于系统内核中断优先级,系统内核无法抢占当前外设中断,导致系统出错

三、解决方法:

        1、在初始化外设驱动之前,先设置该外设的中断优先级,确保外设中断优先级低于系统内核中断优先级

使用接口:

        INT_SYS_SetPriority(IRQn_Type irqNumber, uint8_t priority)

        第一个参数为中断号,选择对应外设中断号即可

        第二个参数为中断优先级,设置时和 FEATURE_NVIC_PRIO_BITS 有关

示例:

0x02<(8-4) = 0x20,优先级数值大于系统内核中断优先级 0x10,优先级低于系统内核中断优先级

此文借鉴:

S32K在FreeRTOS下的外设中断设置

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词