6课、开源嵌入式RTOS内核分析.ppt

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 由于那些虚拟内存区域来源各不相同,Linux使用vm_area_struct中指向一组虚拟内存处理过程的指针来抽象此接口 为进程创建新的虚拟内存区域或处理页面不在物理内存中的情况下,Linux内核重复使用进程的vm_area_struct数据结构集合 当进程请求分配虚拟内存时,Linux并不直接分配物理内存 ARM-Linux进程的虚存空间 * ARM的中断向量表 地址 异常类型 进入时的模式 进入时I的状态 进入时F的状态 0x0000 0000 复位 管理 禁止 禁止 0x0000 0004 未定义指令 未定义 I F 0x0000 0008 软件中断(SWI) 管理 禁止 F 0x0000 000C 预取中止(指令) 中止 I F 0x0000 0010 数据中止 中止 I F 0x0000 0014 保留 保留 — — 0x0000 0018 IRQ 中断 禁止 F 0x0000 001C FIQ 快中断 禁止 禁止 注:表中的I和F表示不对CPSR的该位有影响。 * U-boot的中断向量表设置 _start: b reset ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort ldr pc, _data_abort ldr pc, _not_used ldr pc, _irq ldr pc, _fiq * ARM的中断堆栈设置 中断向量表 自由空间 SVC堆栈 IRQ堆栈 0x00 0x20 FIQ堆栈 R13_svc R13_irq R13_fiq ARM的独立中断堆栈模式 代码段 数据段 用户堆栈 R13 中断1堆栈 用户堆栈 中断2堆栈 ESP X86任务、中断共享堆栈模式 中断嵌套情况 * ARM是将中断控制器集成在CPU内部的,由外设产生的中断请求都由芯片上的中断控制器汇总成一个IRQ中断请求 中断控制器向CPU提供一个中断请求寄存器和一个中断控制寄存器 GPIO是一个通用的可编程的I/O接口,其接口寄存器中的每一位都可以分别在程序的控制下设置用于输入或者输出 ARM-Linux的外部中断响应和处理 * 在Linux中,每一个中断控制器都由struct hw_interrut_type数据结构表示: struct hw_interrupt_type { const char * typename; unsigned int (*startup)(unsigned int irq); void (*shutdown)(unsigned int irq); void (*enable)(unsigned int irq); void (*ack)(unsigned int irq); void (*end)(unsigned int irq); void (*set_affinity)(unsiged int irq,unsigned long mask); }; ARM-Linux的中断响应和处理 * 每一个中断请求线都有一个struct irqdesc 数据结构表示: 具体中断处理程序则在数据结构 struct irqaction typedef struct { unsigned int status; /* IRQ status */ hw_irq_controller *handler; struct irqaction *action; /*IRQ action list */ unsigned int depth; /* nested irq disables */ spinlock_t lock; }_cacheline_aligned irq_desc_t; ARM-Linux的中断响应和处理 * 三个数据结构的相互关系如图 : ARM-Linux的中断响应和处理 * ARM-Linux的中断初始化 执行函数trap_init() 安装中断向量表到虚拟地址0处: ARM-Linux的中断响应和处理 .LCvectors: swi SYS_ERROR0 b __real_stubs_start + (vector_undefinstr - __stubs_start) ldr pc, __real_stubs_start + (.LCvswi - __stubs_start) b __real_stubs_start + (vector_prefetch - __stub

您可能关注的文档

文档评论(0)

精品家园 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档