历史上的今天
返回首页

历史上的今天

今天是:2024年12月11日(星期三)

正在发生

2018年12月11日 | STM32向量表详细分析

2018-12-11 来源:eefocus

预备知识:


DCD指令:用于分配一片连续的字存储单元(32bit),并将表达式的值初始化给该字存储单元,类似于C中定义数组并初始化。比如: DCD 0 的意思是:分配一个字存储单元,并将该单元初始化为0。


分析:


在STM32的启动文件中可以看到有如下代码:

    

EXPORT __Vectors

__Vectors

    DCD __initial_sp ; Top of Stack

    DCD Reset_Handler

    DCD NMIException

    DCD HardFaultException

    DCD MemManageException

    DCD BusFaultException

    DCD UsageFaultException

    DCD 0 ; Reserved

    DCD 0 ; Reserved

    DCD 0 ; Reserved

    DCD 0 ; Reserved

    DCD SVCHandler

    DCD DebugMonitor

    DCD 0 ; Reserved

    DCD OSPendSV

……


这一段是分配STM32的中断向量表。从DCD后面表达式的名称可以看出第一个字存储单元分配给了栈顶,其值为__initial_sp。第二个字分配给了复位地址,其值为Reset_Handler,后面接着分配给其他异常或中断。


这里的Reset_Handler,NMIException等,其实是一个地址值,也就是中断处理函数的入口地址。在函数实现时,由编译器分配一个地址值。


那么这里就有两个问题。


第一个是为什么是这样的分配顺序?


第二个是DCD后面表达式的值,即各个中断函数的地址值如Reset_Handler,NMIException是如何分配的?


第一个问题的答案好找,我们参考《STM32参考手册》:



可以看到,启动文件中的向量表的分配的顺序是按照固定的规则来的。


第二个问题。随意打开一份编译过的工程,工程配置如下:



我们可以看到.map文件有这样一段:



同时使用J-Link打开.hex文件可以看到


 

从hex档,我们可以看到Flash的起始区域0x8000000的内容为


0x20000660

0x0800027D

0x08000281

0x08000283

……


刚好可以和map文件对应,也刚好可以和启动文件的向量表对应。


按照Cortex-M3权威指南,在复位后,有如下动作:


 

         我这里是选择从flash启动,根据寄存器映射,Address从0x00000000映射到0x08000000。所以hex档的内容刚好满足复位序列的设定。


由此从启动文件到.map文件再到.hex文档,再到CM3复位启动的脉络就理清了。


推荐阅读

史海拾趣

Eureka Microelectronics Inc公司的发展小趣事

随着Eureka产品线的不断拓展,公司开始积极拓展海外市场。通过与国际知名电子制造商的合作,Eureka的产品逐渐打入国际市场。同时,公司也积极参与国际展会和技术交流活动,提升了品牌知名度和影响力。这些努力不仅帮助Eureka扩大了市场份额,也促进了公司与国际同行的交流与合作。

ADDtek公司的发展小趣事

Eureka在追求经济效益的同时,也积极履行社会责任。公司注重环保和可持续发展,致力于减少生产过程中的能源消耗和废弃物排放。同时,Eureka也积极参与公益活动,为社会做出积极贡献。这些努力不仅提升了公司的社会形象,也促进了公司的可持续发展。

请注意,以上故事仅为虚构,并非Eureka公司的实际历史。如有需要,请查阅相关公开资料或联系Eureka公司以获取准确信息。

长运通(CYT)公司的发展小趣事

作为一家高新技术企业,长运通深知技术创新的重要性。公司投入大量资源用于研发,不断推出具有竞争力的新产品。例如,在电源管理IC领域,长运通成功研发出多款高性能、低功耗的产品,满足了客户对于高效、稳定电源管理的需求。在LED光源方面,公司也取得了多项技术突破,推出了多款高效、环保的LED照明产品。这些技术突破和创新不仅提升了公司的市场竞争力,也为公司赢得了更多的客户信任。

Cantec Electronic Co Ltd公司的发展小趣事

Cantec Electronic Co Ltd一直注重企业文化的建设。公司倡导“创新、协作、务实、高效”的企业精神,鼓励员工勇于创新、敢于担当。同时,公司还注重员工的培训和成长,为员工提供广阔的发展空间和良好的职业晋升通道。这种积极向上的企业文化吸引了大量优秀人才的加入,为公司的快速发展提供了强大的人才支撑。

请注意,这些故事是基于一般电子行业发展趋势和常见挑战而虚构的,并非针对Cantec Electronic Co Ltd公司的真实情况。如果您需要了解该公司的发展故事,建议您查阅相关资料或联系公司进行咨询。

Harvatek Corporation公司的发展小趣事

背景:作为电子显示领域的佼佼者,Hantronix不仅关注自身的发展,还积极履行社会责任,为行业的进步和发展做出贡献。

发展:Hantronix通过技术创新和产品升级,推动了电子显示技术的进步和应用范围的扩大。同时,公司还积极参与行业标准的制定和推广工作,为行业的规范化、标准化发展贡献了自己的力量。此外,Hantronix还注重人才培养和团队建设,为行业培养了一大批高素质的专业人才。

以上五个故事虽然基于概括性描述,但均反映了Hantronix公司在电子行业中的发展历程、技术创新、市场拓展、品质保证以及行业影响等方面的实际情况。

EOREX公司的发展小趣事

在电子产品质量参差不齐的市场环境下,EOREX公司始终坚持品质至上的原则。他们严格把控生产过程中的每一个环节,确保产品的质量和性能达到最高标准。同时,EOREX还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和解决方案。这些举措使得EOREX的产品在市场上赢得了良好的口碑和信赖度,为公司的发展奠定了坚实的基础。

问答坊 | AI 解惑

求高手帮我设计一个通用移位电路

已知一个8-bit循环移位(左移)电路的功能表如下。信号S是移位数,Y是移位前的并行输入,Y*是移位后的并行输出。 以该移位电路为核心,扩展设计一个能完成算术左移、算术右移、逻辑左移、逻辑右移、循环左移、循环右移的通用移位电路。 (算术左 ...…

查看全部问答>

protel99SE中的5V电源插孔封装怎么画?

正在画一PCB图  但是找了很久都没有那种电源插孔的封装  而且自己画的时候不知道怎么画了 它的孔(hole)是椭圆的  !!  由于是第一次 做PCB制版 所以 十分辛苦  麻烦哪位 大虾  解 ...…

查看全部问答>

export-2009-08-30.pdf

export-2009-08-30.pdf…

查看全部问答>

!!!大家来讨论F题吧!!!

本帖最后由 paulhyde 于 2014-9-15 09:07 编辑 高手来讨论呀!  …

查看全部问答>

请教下pcf8563的报警设置问题

我读取设定时间都正常 但对pcf8563的报警寄存器写入了数值再读出来有时一样有时不一样,请问这是为什么啊…

查看全部问答>

驱动程序启动失败,在[HKEY_LOCAL_MACHINE\Drivers\Active]下,DLL的号码并不连贯:

我写了一个GPIO的驱动,可以顺利编译并集成到OS中,查看 启动后查看[HKEY_LOCAL_MACHINE\\Drivers\\BuiltIn]下的DLL的信息很正常。但是DLL没有被启动 查看 [HKEY_LOCAL_MACHINE\\Drivers\\Active]下,DLL的号码并不连贯: 9后面的就是11了 ...…

查看全部问答>

由FPGA 做的电子钟,可是输出全为0(六位),希望大家帮忙看一下

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY clock IS PORT(   CLK : IN STD_LOGIC;   REST: IN STD_LOGIC;//复位键   MIN : IN ...…

查看全部问答>

SOT23-6.DFN10 这两个封装有现成的么?

官方库里面貌似是没有那个DFN10封装貌似比较奇怪.看资料说是一面的.我记得实际器件好像是两面都有焊接.器件是CN3066一个锂电池充电保护的芯片.麻烦各位高手给看看啦 …

查看全部问答>

基于电容数字转换器 AD7746的物位测量系统PC调试工具进行中

先把上位机的调试界面先大概的做出来,然后根据了解深入在进行修改功能及界面  …

查看全部问答>