中断系统分析

更新时间:
2024-03-14
下载文档

中断系统分析

中断向量表

在 SylixOS 中,系统默认存在一张大小为 256(可以手动配置)的中断向量表,中断向量表用于管理 SylixOS 中的每一个中断向量。该向量表存在于 k_globalvar.h 文件中,其定义格式如下所示:

LW_CLASS_INTDESC          _K_idescTable[LW_CFG_MAX_INTER_SRC];
LW_SPINLOCK_DEFINE        (_K_slVectorTable);

_K_idescTable 是大小为 256 的数组,数组元素为 256 个中断向量;K_slVectorTable 是一个自旋锁,用于控制对中断向量表的互斥访问。

_K_idescTable 的类型为 LW_CLASS_INTDESC ,该类型是 SylixOS 的中断向量表结构,其详细描述如下:

#include <SylixOS.h>
typedef struct {
      LW_LIST_LINE_HEADER     IDESC_plineAction;    /*  判断中断服务函数列表         */
        ULONG                 IDESC_ulFlag;         /*  中断向量选项               */
        LW_SPINLOCK_DEFINE   (IDESC_slLock);       /*  自旋锁                    */
} LW_CLASS_INTDESC;
typedef LW_CLASS_INTDESC     *PLW_CLASS_INTDESC;
  • IDESC_plineAction:用于管理中断服务函数的链表,通常情况下,一个中断号对应一个中断服务函数,该链表内只有一个成员;但在某些特殊情况下,一个中断号可以对应多个中断服务函数,则该链表有多个成员。
  • IDESC_ulFlag:中断向量选项。
  • IDESC_slLock:中断向量自旋锁。

中断向量选项如下表所示。

宏名含义
LW_IRQ_FLAG_QUEUE支持单向量,多服务
LW_IRQ_FLAG_PREEMPTIVE允许中断抢占
LW_IRQ_FLAG_SAMPLE_RAND可用作系统随机数种子
LW_IRQ_FLAG_GJB7714支持 GJB7714 国军标体系

中断描述符

在 SylixOS 中,一个中断服务函数对应一个中断描述符结构,SylixOS 将该中断描述符结构加入到中断向量表对应的表项中。如果一个中断向量对应多个中断服务函数,则这些中断服务函数对应的中断描述符就组成了一个链表,并由中断向量表对应的表项来进行管理(即 9.5.1 小节所讲的中断向量表项内的 IDESC_plineAction 成员)。中断描述符结构如下所示:

#include <SylixOS.h>
typedef struct {
LW_LIST_LINE           IACT_plineManage;        /*  管理链表                 */
INT64                  IACT_iIntCnt[LW_CFG_MAX_PROCESSORS]; 
PINT_SVR_ROUTINE       ACT_pfuncIsr;           /*  中断服务函数               */
VOIDFUNCPTR            IACT_pfuncClear;        /*  中断清理函数               */
PVOID                  IACT_pvArg;             /*  中断服务函数参数            */
CHAR                   IACT_cInterName[LW_CFG_OBJECT_NAME_SIZE];
} LW_CLASS_INTACT;                             /*  中断描述符                 */
typedef LW_CLASS_INTACT  *PLW_CLASS_INTACT;
  • IACT_plineManage:管理链表,用于将中断描述符加入到中断向量表表项。
  • IACT_iIntCnt:中断计数器,每一次中断该数值加 1。
  • IACT_pfuncIsr:中断服务函数。
  • IACT_pfuncClear:中断清理函数。
  • IACT_pvArg:中断服务函数参数。
  • IACT_cInterName:中断服务函数名称。
文档内容是否对您有所帮助?
有帮助
没帮助