11210|14

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于STM32中断向量表【如此的向量表】还是第一次见识 [复制链接]

KEIL :
下面是STM32的:
Stack_Size       EQU     0x00000400

                 AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem        SPACE   Stack_Size
__initial_sp
Heap_Size        EQU     0x00000200
                 AREA    HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem         SPACE   Heap_Size
__heap_limit
                AREA    RESET, DATA, READONLY
                 EXPORT  __Vectors
                      
__Vectors        DCD  __initial_sp              ; Top of Stack
                 DCD  Reset_Handler
                 DCD  NMIException

下面是ARM7/9 的:

Vectors
                B           InitReset           ; reset
undefvec
                B           undefvec            ; Undefined Instruction

很明显,STM32复位后PC =0 指向的 是 __initial_sp

IAR:
#pragma location = "INTVEC"
// STM32F10x Vector Table entries 
const intvec_elem __vector_table[] =
{
  { .__ptr = __sfe( "CSTACK" ) },
//  __program_start,
  ResetISR,//    

我想好多初学STM32的人都与偶有相同的疑惑,请香板主说说
  { .__ptr = __sfe( "CSTACK" ) },
或__initial_sp 究竟是如何的代码,而且它如何跳到
  ResetISR 或Reset_Handler去运行 我得函数?

此帖出自stm32/stm8论坛

最新回复

                                 这样就好了,其实就这么简单的事情!非的搞的很复杂似的。“Reset SequenceAfter the processor exits reset, it will read two words from memory:Address 0x00000000: Starting value of R13 (the stack pointer)Address 0x00000004: Reset vector (the starting address of program execution; LSBshould be set to 1 to indicate Thumb state)”谢谢楼上的各位关注!   详情 回复 发表于 2008-6-28 13:04
点赞 关注
 

回复
举报

87

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

这个问题牵扯到Cortex-M3的实现

你如果要使用STM32,直接按照这个方式做就可以了。

如果你要搞清楚它的原理,请参考ARM的Cortex-M3技术参考手册:http://infocenter.arm.com/help/topic/com.arm.doc.ddi0337e/DDI0337E_cortex_m3_r1p1_trm.pdf
此帖出自stm32/stm8论坛
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

很正常啊

LZ什么都说对了,除了这句

"很明显,STM32复位后PC =0"

哪里很明显了?
此帖出自stm32/stm8论坛
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

4
 

这一句: STM32与ARM 的PC 复位一样.

下面是ARM7/9 的:

Vectors
                B           InitReset           ; reset
undefvec
                B           undefvec            ; Undefined Instruction

很明显,STM32复位后PC =0 指向的 是 __initial_sp
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

5
 

Reference manual PAGE -32

"
After this startup delay has elapsed, the CPU starts code execution from the boot memory,
located at the bottom of the memory address space starting from 0x0000 0000. "
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

6
 

楼主犯了一个主观的错误,STM32的核心与ARM7/9都不一样

所以你用ARM7/9向量表的构造去解释STM32,得到的结论也是错的。请看Cortex-M3技术参考手册的5.2节,那里有详细说明,这个文件的链接在2楼。


5楼引用的那段话的意思是:在启动延时过后,CPU开始从Boot memory执行代码,(Boot memory)在存储地址空间从0x0000 0000开始的底端。不是你理解的CPU从0x0000 0000开始执行代码。
此帖出自stm32/stm8论坛
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

7
 

中断向量

#pragma location = "INTVEC"
// STM32F10x Vector Table entries 
const intvec_elem __vector_table[] =
{
  { .__ptr = __sfe( "CSTACK" ) },
//  __program_start,
  ResetISR,//    

请问高手能不讲解一下这是什么意思
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

8
 

这个要看一下编译器的help

大概就是把向量表load到flash的一个位置(flash启动)
一般是0x08000000

系统reset以后,会跳到向量表中的__program_start,
至于怎么跳到这一步,跟核有关了。不知道汇编代码中有没有。

我也是刚开始学,不知道对不对,呵呵
此帖出自stm32/stm8论坛
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

9
 

这其中也有关于 堆栈如何设置的问题!


所以 我曾说过 如何用 纯汇编来写 STM32 的程序! 

因为只有汇编才能 体现 CPU的工作 机制!
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

10
 

ARM7/ARM9 都有大陆纯汇编的例子。

唯独 CORTEX-M3 就 遮遮掩掩的!
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

11
 

reset

Reset Sequence
After the processor exits reset, it will read two words from memory:
Address 0x00000000: Starting value of R13 (the stack pointer)
Address 0x00000004: Reset vector (the starting address of program execution; LSB
should be set to 1 to indicate Thumb state)
此帖出自stm32/stm8论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

12
 

M3和ARM7/9的Vector的设置有很大的区别

M3的Vector只是指针,第一个是指向stack的,第二个是指向复位程序的地址,后面的也都是一些程序的地址
而ARM7/9的Vector都是跳转指令
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

13
 

M3 的向量和80x86的很类似啊

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

99

帖子

0

TA的资源

一粒金砂(初级)

14
 

m3 地址0是主堆栈的初始值,04是复位后向量地址

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

15
 

等了这么天,终于有人说到点上了!

这样就好了,其实就这么简单的事情!非的搞的很复杂似的。

“Reset Sequence
After the processor exits reset, it will read two words from memory:
Address 0x00000000: Starting value of R13 (the stack pointer)
Address 0x00000004: Reset vector (the starting address of program execution; LSB
should be set to 1 to indicate Thumb state)

谢谢楼上的各位关注!
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表