Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1483704
  • 博文数量: 204
  • 博客积分: 4013
  • 博客等级: 中校
  • 技术积分: 4030
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-29 06:34
文章分类

全部博文(204)

文章存档

2012年(204)

分类: 嵌入式

2012-03-08 02:47:12

今天在做裸机调试,源代码加进了ucos-ii,编译也没什么错误,网友提供的代码,还是自己他自己写的精简版OS,不过我的板子是mini2440的,所以改了改代码,ADS编译器通过了,但是在超级终端显示:Dummy_isr error,interrupt number: 0. INTMSK=oxbffffeff
网上搜索资料解决方法如下:
把mmu.c和mmu.h加到工程中,接着在主函数中调用MMU_Init(),还要在Main.c中加上头文件#include "mmu.h",再此编译,提示错误,原来是mmu.c中好些函数没有调用,加进2440slib.s,编译通过。
***********************************分析***********************************************
仿真的时候,程序是运行在sdram里面的,也就是0x3000_0000处开始运行,而中断向量表通过仿真器已经放在了0x3000_0000处,打开mmu是为了把0x3000_0000地址处的值映射到0x0的地方,因为中断向量表是保存在0x0开始的地方,当中断发生时的第一时间,CPU会去0x0地方查中断向量表看是发生了什么中断,是reset还是IRQ还是FIQ还是取数据终止或取指令终止,按键外部中断是IRQ中断,然后CPU会去IRQ开始的地方找到你的中断服务函数,这个时候轮到了你的中断服务函数运行的时间了,所以不打开MMU就不会进入中断服务函数
     还有一种方法就是烧写一个简单的小程序到nandflash的block0,这个小程序要包含中断向量表,当你上电的时候block0的东西被CPU复制到了叫作stepping stone的地方,他的地址也是0,这个时候你仿真你的程序,不打开mmu也是可以找到中断服务函数了,因为你有中断向量表了.
阅读(2328) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~