打印

请教ARM汇编

[复制链接]
3369|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
itelectron|  楼主 | 2009-8-5 21:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
;******************************************************************************
;
; The vector table.
;
;******************************************************************************
        EXPORT  __Vectors
__Vectors
        DCD     StackMem + Stack            ; Top of Stack
        DCD     Reset_Handler               ; Reset Handler
        DCD     **R                       ; NMI Handler
        DCD     FaultISR                    ; Hard Fault Handler
        DCD     IntDefaultHandler           ; MPU Fault Handler
        DCD     IntDefaultHandler           ; Bus Fault Handler
        DCD     IntDefaultHandler           ; Usage Fault Handler
        DCD     0                           ; Reserved
        DCD     0                           ; Reserved
        DCD     0                           ; Reserved
        DCD     0                           ; Reserved
        DCD     IntDefaultHandler           ; SVCall Handler
        DCD     IntDefaultHandler           ; Debug Monitor Handler
        DCD     0                           ; Reserved
        DCD     IntDefaultHandler           ; PendSV Handler
        DCD     IntDefaultHandler           ; SysTick Handler
        DCD     IntDefaultHandler           ; GPIO Port A
        DCD     IntDefaultHandler           ; GPIO Port B
        DCD     IntDefaultHandler           ; GPIO Port C
        DCD     IntDefaultHandler           ; GPIO Port D
        DCD     IntDefaultHandler           ; GPIO Port E
        DCD     IntDefaultHandler           ; UART0
        DCD     IntDefaultHandler           ; UART1
        DCD     IntDefaultHandler           ; SSI
        DCD     IntDefaultHandler           ; I2C
        DCD     IntDefaultHandler           ; PWM Fault
        DCD     IntDefaultHandler           ; PWM Generator 0
        DCD     IntDefaultHandler           ; PWM Generator 1
        DCD     IntDefaultHandler           ; PWM Generator 2
        DCD     IntDefaultHandler           ; Quadrature Encoder
        DCD     IntDefaultHandler           ; ADC Sequence 0
        DCD     IntDefaultHandler           ; ADC Sequence 1
        DCD     IntDefaultHandler           ; ADC Sequence 2
        DCD     IntDefaultHandler           ; ADC Sequence 3
        DCD     IntDefaultHandler           ; Watchdog
        DCD     IntDefaultHandler           ; Timer 0A
        DCD     IntDefaultHandler           ; Timer 0B
        DCD     IntDefaultHandler           ; Timer 1A
        DCD     IntDefaultHandler           ; Timer 1B
        DCD     IntDefaultHandler           ; Timer 2A
        DCD     IntDefaultHandler           ; Timer 2B
        DCD     IntDefaultHandler           ; Comp 0
        DCD     IntDefaultHandler           ; Comp 1
        DCD     IntDefaultHandler           ; Comp 2
        DCD     IntDefaultHandler           ; System Control
        DCD     IntDefaultHandler           ; Flash Control

相关帖子

沙发
itelectron|  楼主 | 2009-8-5 21:32 | 只看该作者
DCD     IntDefaultHandler           ; Timer 1A
        DCD     IntDefaultHandler           ; Timer 1B
        DCD     IntDefaultHandler           ; Timer 2A
        DCD     IntDefaultHandler           ; Timer 2B
        DCD     IntDefaultHandler           ; Comp 0
        DCD     IntDefaultHandler           ; Comp 1
        DCD     IntDefaultHandler           ; Comp 2
        DCD     IntDefaultHandler           ; System Control
        DCD     IntDefaultHandler           ; Flash Control

使用特权

评论回复
板凳
itelectron|  楼主 | 2009-8-5 21:33 | 只看该作者
DCD     IntDefaultHandler   
   DCD     IntDefaultHandler   
   DCD     IntDefaultHandler   
   DCD     IntDefaultHandler   
   DCD     IntDefaultHandler   

怎么都定义同一个名字 ?????????

DCD     IntDefaultHandler ==  int  IntDefaultHandler  吗????

使用特权

评论回复
地板
Etual| | 2009-8-5 23:21 | 只看该作者
(1)同一个名字,是因为将所有没有用到的异常向量(包括中断)都指向一个统一的处理函数。
一般来说,就算你没有用到的中断,也必须做一个处理函数来收集这些可能跑飞的情况,一般
打印信息然后死机就OK了,当然你也可以做必要的处理,看项目需要了。

(2)
DCD     IntDefaultHandler ==  int  IntDefaultHandler  吗????
你可以这么理解,但是实际上又不一定是这么样。首先明确 DCD 用在 code 段还是 data 段
因为这个关键字在这些段都可以使用,DCD精确的行为是预留 4个字节的空间。
如果在code段,那么预留的刚好就是一条指令的空间了(ARM状态,暂时不考虑 thumb...)
如果在data段,那么就相当于定义了一个全局变量,并且初始化数值。
如果在bss段,那么相当于定义了一个没有初始化数值的全局变量

呃,也可以简单的理解为:
DCD     Reset_Handler               ; Reset Handler
在 __Vectors 段(注意,我没有说程序空间还是data空间,这个可以由连接器来最后决定的)
预留 4个自己的空间,空间的数值填写 Reset_Handler 这个处理函数的地址。
学过C应该知道吧?函数的名字本身就是这个函数的入口地址。汇编也是相同原理的。
大概就是这样。

使用特权

评论回复
5
itelectron|  楼主 | 2009-8-6 09:55 | 只看该作者
谢谢 回答的很详细!

使用特权

评论回复
6
arm4u| | 2009-8-6 15:14 | 只看该作者
那是先占着茅坑,什么时候有再什么时候拉。

使用特权

评论回复
7
barryyan| | 2009-8-6 15:19 | 只看该作者
受益匪浅

使用特权

评论回复
8
古道热肠| | 2009-8-7 11:59 | 只看该作者
向量中断

使用特权

评论回复
9
老树昏鸦| | 2009-8-8 00:34 | 只看该作者
一个代表地址的标号而已

使用特权

评论回复
10
gooogleman| | 2009-9-21 18:45 | 只看该作者
DCD     IntDefaultHandler   
   DCD     IntDefaultHandler   
   DCD     IntDefaultHandler   
   DCD     IntDefaultHandler   
   DCD     IntDefaultHandler   

怎么都定义同一个名字 ?????????

DCD     In ...
itelectron 发表于 2009-8-5 21:33


可以的,每个向量地址都是同一个,嘿嘿,可以的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

274

主题

2762

帖子

8

粉丝