您的位置:程序门 -> 硬件/嵌入开发 -> 片机/工控



高分求助!!(答好了给全分)


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


高分求助!!(答好了给全分)
发表于:2007-06-14 19:23:06 楼主
1.中断问题
今天小弟我看到了中断这一章了,   但是到现在还搞不清楚swi的一些地方,   特请教各位高手,   谢谢!

问题就是在加载中断这个地方

      unsigned   install_handler(unsigned   routine,   unsigned   *vector)
{
      vec   =   (routine   -   (unsigned)vector   -8   )   > > 2;//问题1:我知道这里是要求出定义的中断的地址偏移量,   但是减去0x08就可以了,   但是为什么还要减去8,   而且还要向右移两位??
      if(vec   &   0xff000000)
      {
            //greater   than   32mbytes
            return   ;  
      }
      vec   =   0xea000000   ¦   vec;   //问题2:这里得到了偏移的地址后为什么要跟0xea000000相或??
      *vector   =   vec;
      return     (old_vec);
}

2.arm问题
今天拿自己写好的程序拷到另一台机子上去运行,   但是运行不通过,   提示不能打开一个.o文件,感觉是原来的路径和现在的路径可能不一样而出错的,   但是不知道在哪里改正过来。

还有个问题就是:在asm和c混用的时候,为什么总是要从asm先运行起来才能转入c语言,能不能先从c开始,然后转入asm呢??

3.例子运行不了了
装了ads之后,每个例子都可以运行,但是过了一段时间,自己做了点小程序之后,有个例子运行不了了,(swi)这个例子,但是我没有改动什么地方,可能是设置的问题造成的。问题是:进入axd调试后,按直接运行,但是没有运行到main()函数里,直接到最后的swi就停止了。
请问各位高手这是怎么回事?
发表于:2007-06-15 13:29:551楼 得分:0
你没有bootload   吗?
发表于:2007-06-18 20:58:412楼 得分:0
你的描述不够清楚

问题1可能是依赖硬件的

问题2   通常arm需要你提供一个汇编的模块来进行处理器的初始化,虽然有些工具可帮你
做到,但通常都仍需要这一步,所以总是从一个asm开始,然后转入c
发表于:2007-12-07 13:54:083楼 得分:0
你应该描述
arm芯片型号、开发环境、开发平台之类的详细信息
这样有利于解决问题

1、与硬件寄存器相关,无论是-8还是> 2都是因为其硬件寄存器每个bit对应的值含义有关系,
可以翻资料看看。
2、vec       =       0xea000000       |       vec;     //这里0xea000000段基址,vec是偏移地址,两者之和才是真正的物理地址
如果不懂,可以查看微机原理或者任何一本arm书籍里关于   寻址方面的资料。
3、可以这样理解,汇编语言运行,是给c语言搭建平台,当然汇编得先运行。
4、可能是swi刚好中断,软中断后程序停止,不进入main()。
发表于:2007-12-08 09:07:234楼 得分:0
帮顶
发表于:2007-12-14 13:37:145楼 得分:0
1.vec       =       (routine       -       (unsigned)vector       -8       )       >   >   2;应该是求中断号,swi有多个中断。
vec       =       0xea000000       |       vec;       //问题2:这里得到了偏移的地址后为什么要跟0xea000000相或??  
这个是arm的硬件决定的,我也不是很清楚,只是看过,没记住。中断的入口是在后面而不在0x00000000

2.把o文件全删再编译整个工程,而不是修改过的文件,make
arm的每个程序必须有个入口,是arm伪指令做的,c能做到?没有必要花太多的时间在bootload上,主要要学习实践。

3.这个太多可能了,仿真不是好的学习方法,我学习开发板半年也没有学到什么。主要要做项目。
发表于:2007-12-15 16:57:056楼 得分:0
正在学习中。。。


快速检索

最新资讯
热门点击