~杂记(4):阿里和华为rtos 的接管中断逻辑探索

本文深入探讨了RTOS系统中中断处理的机制,特别是在阿里RTOS中如何通过统一的中断服务函数进行中断分配和处理。从启动文件中的中断向量表设置,到汇编语言编写的irq_handler函数,再到C文件中根据向量号查询并执行用户定义的服务函数入口,全面解析了中断接管方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、首先在某芯片的启动文件中,给出的中断向量表全是指向同一个函数。(一开始我以为是错的,自己改成各个默认中断服务函数的入口,这样就成了非接管中断)。

部分代码如下,其中irq_handler就是那个统一的中断服务函数。他被定义在调度文件los_dispatch中。

__Vectors:
        .long   Reset_Handler
        .long   vec_handler
        
        /*

            此处略去很多字

        */
      
        /* External interrupts */
        .long   irq_handler             /*  0:  UART         */
        .long   irq_handler             /*  1:  CoreTIM      */
        .long   irq_handler             /*  2:  Timer0       */
        .long   irq_handler             /*  3:  Timer1       */
        .long   irq_handler             /*  4:  Timer2       */
        .long   irq_handler             /*  5:  Timer3       */
        .long   irq_handler            
        .long   irq_handler             /*  7:  GPIO0        */
        .long   irq_handler             /*  8:  GPIO1        */
        .long   irq_handler             /*  9:  GPIO2        */
        /*

            此处略去很多字

        */
        .long   irq_handler           
        .long   irq_handler             
        .long   irq_handler             

        .size    __Vectors, . - __Vectors

2、该函数irq_handler是由汇编语言编写,最终跳转到irq_dispatch函数。

irq_handler:

        psrset  ee
        
       /*
        此处略去很多字
        */        
        bsr     irq_dispatch
      /*
        此处略去很多字
        */  

3、irq_dispatch函数被定义在一个C文件中(los_hwi.c),根据向量号,查询表中的函数入口,并执行。(这些函数入口根据用户的需要自行定义,由LOS_HwiCreate注册到表中)。

4、上述的流程,结合自己的理解,如下图所示:

 

5、阿里的RTOS系统,应该说也算是接管中断的方式(我认为)。因为这些中断服务函数入口没有被罗列在启动文件中,而是被写在一个函数指针数组中。只是用户不需要类似华为的那种注册到数组的操作,只需要修改代码中函数指针数组的成员。大概的示意图如下:

6、如果自己哪里理解错了,希望得到指正。如果上述信息涉及到侵权,可通知我删除。

本文只做自己的学习分享,谢谢。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值