关闭

lk中中断的处理flow

301人阅读 评论(0) 收藏 举报
分类:
在li的crt0.s 中会定义中断的入口。例如如果是irq中断会调用arm_irq
_start:
b reset
b arm_undefined
b arm_syscall
b arm_prefetch_abort
b arm_data_abort
b arm_reserved
b arm_irq
b arm_fiq

在exception.s 中可见会调用platform_irq
FUNCTION(arm_irq)
/* XXX only deals with interrupting supervisor mode */
/* call into higher level code */
mov r0, sp /* iframe */
bl platform_irq
cmp     r0, #0
blne    thread_preempt



在Interrupts.c 中可以看platform_irq的实现
enum handler_return platform_irq(struct arm_iframe *frame)
{
// get the current vector
unsigned int vector = *REG32(PIC_CURRENT_NUM);
if (vector == 0xffffffff)
return INT_NO_RESCHEDULE;


// dprintf("platform_irq: spsr 0x%x, pc 0x%x, currthread %p, vector %d\n", frame->spsr, frame->pc, current_thread, vector);


// deliver the interrupt
enum handler_return ret; 


ret = INT_NO_RESCHEDULE;
if (int_handler_table[vector].handler)
ret = int_handler_table[vector].handler(int_handler_table[vector].arg);


// dprintf("platform_irq: exit %d\n", ret);


return ret;
}


首先读取寄存器得到当前的irq number vector
然后看看init_handler_table中这个vector 中是否有对应的callbac
如果有的话,就调用这个callback


当platform_irq 返回是会根据当前的返回值来决定是否要进行
thread 切换


而handler中的callback 是调用register_int_handler 来添加的
void register_int_handler(unsigned int vector, int_handler handler, void *arg)
{
if (vector >= PIC_MAX_INT)
panic("register_int_handler: vector out of range %d\n", vector);


enter_critical_section();


int_handler_table[vector].handler = handler;
int_handler_table[vector].arg = arg;


exit_critical_section();
}


例如timer的中断处理函数就是platform_tick
void platform_init_timer(void)
{
register_int_handler(INT_PIT, &platform_tick, NULL);
}
0
0
查看评论

Lucas-Kanade Optical Flow in python

import numpy as np import cv2 cap = cv2.VideoCapture('slow.flv') # params for ShiTomasi corner detection feature_params = dict( maxCorners =...
  • vola9527
  • vola9527
  • 2014-07-29 10:34
  • 1382

LK OpticalFlow+OpenCV3

* File: opticalFlow.cpp * Brief: lk光流法做运动目标检测 #include "stdafx.h" #include #include #include #include #include #include u...
  • u011344545
  • u011344545
  • 2016-12-12 22:14
  • 536

sdcc man阅读笔记(六)——中断

sdcc中,中断程序使用的关键字和keil一样: void timer_isr (void) __interrupt (1) __using (1) { ... } interrupt指定中断号,using指定register bank。中断程序可以写在任意一个源文件里,但在包含main程序的源...
  • adam_embedded
  • adam_embedded
  • 2015-04-30 10:21
  • 818

(转)Android bootloader(LK)启动流程

转自:http://blog.csdn.net/jmq_0000/article/details/7378348 LK是什么            LK 是 Little Kernel 它是 ...
  • wangbin344
  • wangbin344
  • 2016-08-05 13:41
  • 1046

MTK lk源码解析5( lk 阶段aboot.c 解析)

http://blog.csdn.net/xichangbao/article/details/51484610 现在开始分析关键函数aboot_init(),岔开一句lk在分区表的名称即为aboot。 aboot_init()。 void aboot_init(const...
  • ffmxnjm
  • ffmxnjm
  • 2017-04-18 17:24
  • 311

[opencv] lk光流法小结

本文记录了LK光流法的原理和opencv的使用实例。 一、理论部分 参考:http://www.cnblogs.com/andyanut/p/5893168.html 二、在opencv中的使用 void cvCalcOpticalFlowPyrLK( ...
  • SMUEvian
  • SMUEvian
  • 2017-05-17 21:22
  • 720

目标跟踪之LK光流法

LK光流与金字塔LK优化
  • robin1987z
  • robin1987z
  • 2015-10-21 14:55
  • 1411

光流(optical flow)和openCV中实现

转载请注明出处!!!http://blog.csdn.net/zhonghuan1992 光流(optical flow)和openCV中实现 光流的概念:        是Gibson在1950年首先提出来的。它是空间运动物体在观察成像平...
  • u013035103
  • u013035103
  • 2014-08-12 03:45
  • 14378

CPU对中断处理的流程 - idt

CPU对中断处理的流程 我们首先必须了解CPU在接收到中断信号时会做什么。没办法,操作系统必须了解硬件的机制,不配合硬件就寸步难行。现在我们假定内核已被初始化,CPU在保护模式下运行。   CPU执行完一条指令后,下一条指令的逻辑地址存放在cs和eip这对寄存器中。在执行新指令前,控制单元...
  • JK198310
  • JK198310
  • 2013-09-12 19:05
  • 2810

光流optical flow基本原理与实现

光流(optical flow)是什么呢?名字很专业,感觉很陌生,但本质上,我们是最熟悉不过的了。因为这种视觉现象我们每天都在经历。从本质上说,光流就是你在这个运动着的世界里感觉到的明显的视觉运动(呵呵,相对论,没有绝对的静止,也没有绝对的运动)。例如,当你坐在火车上,然后往窗外看。你可以看到树、地...
  • xbinworld
  • xbinworld
  • 2016-02-10 21:53
  • 3621
    个人资料
    • 访问:313920次
    • 积分:14062
    • 等级:
    • 排名:第1060名
    • 原创:1131篇
    • 转载:0篇
    • 译文:11篇
    • 评论:9条
    最新评论