zoukankan      html  css  js  c++  java
  • 【bootloader】关于2440+WinCE5.0,2440init.s文件代码问题

          作者:gooogleman 日期 2011.09.08

         刚才一个小伙子在论坛提问如下:

    我在学习2440+WinCE5.0系统,正在看中断相关的。 
    在文件2440init.s里找到如下代码 

        AREA    Init,CODE,READONLY 

        ENTRY  
        ;1)The code, which converts to Big-endian, should be in little endian code. 
        ;2)The following little endian code will be compiled in Big-Endian mode.  
        ;  The code byte order should be changed as the memory bus width. 
        ;3)The pseudo instruction,DCD can't be used here because the linker generates error. 
        ASSERT  :DEF:ENDIAN_CHANGE 
        b   ResetHandler    ; 0x00 Reset 
        b   .               ; 0x04 Undefined 
        b   .               ; 0x08 Supervisor 
        b   .               ; 0x0c Prefetch Abort 
        b   .               ; 0x10 Data Abort 
        b   .               ; 0x14 Reserved 
        b   .               ; 0x18 IRQ 
        b   .               ; 0x1c FIQ 

    地址0x04-0x1C均无有效跳转代码,是否意味着这些异常没有使用?但是在后面又看到如下些代码,很疑惑。上面那段代码存在flash里而下面这段是在RAM里?请知道的朋友讲解一下。 


            AREA RamData, DATA, READWRITE 

            ^   _ISR_STARTADDRESS 
    HandleReset     #   4  
    HandleUndef     #   4 
    HandleSWI       #   4 
    HandlePabort    #   4 
    HandleDabort    #   4 
    HandleReserved  #   4 
    HandleIRQ       #   4 
    HandleFIQ       #   4


    --------------------我做了如下回答:

    根据我的理解,上面的 
    b   ResetHandler    ; 0x00 Reset  
        b   .               ; 0x04 Undefined  
        b   .               ; 0x08 Supervisor  
        b   .               ; 0x0c Prefetch Abort  
        b   .               ; 0x10 Data Abort  
        b   .               ; 0x14 Reserved  
        b   .               ; 0x18 IRQ  
        b   .               ; 0x1c FIQ  
    还在内部SRAM 

    并且这时候代码刚启动,如果发生复位以外的中断都是没有任何意义,甚至是不可取的,所以发生干脆让 ARM 死循环了,b. 

    而下面的 

            AREA RamData, DATA, READWRITE  

            ^   _ISR_STARTADDRESS  
    HandleReset     #   4   
    HandleUndef     #   4  
    HandleSWI       #   4  
    HandlePabort    #   4  
    HandleDabort    #   4  
    HandleReserved  #   4  
    HandleIRQ       #   4  
    HandleFIQ       #   4 
    已经是外部内存的 一些中断向量了吧,这时候代码已经在外部内存跑,会发生我们要的中断了,所以必须分配好。 
    这两个环境已经不一样了。 
    _ISR_STARTADDRESS 指向的地址肯定是外部物理内存的了。 

    __________________________
    庆祝淘宝店铺三周年,特发起团购活动店铺http://gooogleman.taobao.com/所有开发板OK2440/TE2440/TE6410/OK6410/tiny6410/real6410/real210全部团购价销售,欲知详情,请加团购QQ群:27100460
    2011-09-08,08:35:54
  • 相关阅读:
    Django的是如何工作的
    Robot Framework自动化测试(五)--- 开发系统关键字
    Swarm 如何存储数据?- 每天5分钟玩转 Docker 容器技术(103)
    如何滚动更新 Service?- 每天5分钟玩转 Docker 容器技术(102)
    Service 之间如何通信?- 每天5分钟玩转 Docker 容器技术(101)
    神奇的 routing mesh
    如何访问 Service?- 每天5分钟玩转 Docker 容器技术(99)
    Swarm 如何实现 Failover?- 每天5分钟玩转 Docker 容器技术(98)
    如何实现 Service 伸缩?- 每天5分钟玩转 Docker 容器技术(97)
    运行第一个 Service
  • 原文地址:https://www.cnblogs.com/gooogleman/p/2170486.html
Copyright © 2011-2022 走看看