历史上的今天
返回首页

历史上的今天

今天是:2025年01月29日(星期三)

2021年01月29日 | STM32四行【跳转程序】引申出来的几条重要知识点

2021-01-29 来源:eefocus

1写在前面

上一篇文章《STM32 IAP应用编程几个要点》讲述的内容很多朋友都了解过,也都使用过ST官网提供的代码。但使用过的人有许多都没有深入了解,仅仅只是把代码下载到板卡中跑了一下而已(因为代码完全可以使用)。所以,很少有人研究其中细节的问题。

图片

先看一下上图中四行跳转代码,接下来将围绕这四行代码拓展相关的内容。


2STM32是如何实现程序跳转的?

上图四行代码中有几个定义没有贴出来,下面一并贴出来:

#define ApplicationAddress 0x8003000

typedef  void (*pFunction)(void);
pFunction Jump_To_Application;

uint32_t JumpAddress;

ApplicationAddress为0x8003000,代表应用程序起始地址为0x8003000。


1.JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4); 

JumpAddress代表跳转地址,基于应用程序起始地址偏移4(这个偏移4下面章节讲述)。这个地址就是应用程序的复位地址,你可以理解为程序跳转到了应用程序复位的地址。


2.Jump_To_Application = (pFunction) JumpAddress;

将跳转地址JumpAddress强制转换pFunction类型,你可以理解为编译器将其编译成一个函数。


3.__set_MSP(*(__IO uint32_t*) ApplicationAddress);

这里是将把应用程序起始地址设为栈顶指针(__set_MSP下面章节讲述)。


4.Jump_To_Application();

设置PC指针为复位地址,你可以理解为跳转到应用程序的函数。


这里是讲述的大概内容,细节内容请往下看,看完下面细节再回来看本节内容。


3复位向量表

上面讲述了ApplicationAddress + 4“偏移4”这个问题,其实这个“偏移4”就是向量表的偏移地址:复位向量(PC 初始值)。


拿Cortex-M3(STM32F1)为例(其它M0、M4类似),Cortex-M3权威手册(中文)表 7.6 上电后的向量表:

图片

是什么意思呢? 就是相对应用程序存储起始地址的一张向量表,而这张向量表就是按照这样的约定:偏移4的地址为复位向量(PC 初始值),也就是我们应用程序复位的地方。


同样,可以参看启动代码(以STM32F1为例):

图片

这里代码和Cortex-M3技术参考手册数据一一对应的关系。相信看了这两个地方的内容,大家能明白为什么会是ApplicationAddress + 4了。


4理解__set_MSP语句

1.拓展:MDK-ARM新功能

点看下图,放大,自己看截图代码(标记处):

用MDK-ARM V5.25及以上版本打开工程,可以看到在__set_MSP下面有一行下划线,什么意思呢?


这是MDK-ARM V5.25的新功能(现在,MDK-ARM V5.26就快要出来了)具有上下文帮助(F1)的关键字将用浅灰色下划线突出显示。


详细可以参看:

http://www2.keil.com/mdk5/525

(提示:公众号不支持外链接,请复制链接到浏览器下载)


这里推荐阅读我另外两篇文章:

1.MDK v5.25比较实用的功能

2.MDK-ARM V5.26预览版更新的几条重要内容


2.理解__set_MSP语句

上面讲述的内容是想引申出来:鼠标放在__set_MSP的位置,按F1,就可以直接进入帮助文档。


下面是详细内容截图:

图片

大概意思是:调用MSR指令设置主状态指针(MSP)的值。


物理上存在两个不同的堆栈指针(SP):

1.主堆栈指针(MSP),复位后的默认堆栈指针。在运行异常处理程序时也使用它。

2.进程堆栈指针(PSP),只能在线程模式下使用。



当引用R13堆栈指针(SP)时,由控制寄存器(CONTROL)的Bit[1]决定:

Bit[1]=0,用MSP;

Bit[1]=1,用PSP;

这里具体内容需要参看Cortex-M技术参考手册。


我的另外一篇文章《如何判断CPU是否正在执行中断函数》讲述了关于控制寄存器(CONTROL)的一种使用方法,可以参看我那一篇文章。


推荐阅读

史海拾趣

CALMIRCO公司的发展小趣事

随着电子行业的快速发展,市场竞争日益激烈,行业挑战也层出不穷。CALMIRCO公司始终保持敏锐的市场洞察力,积极应对各种挑战。在面对原材料价格波动、国际贸易摩擦等不利因素时,CALMIRCO公司及时调整战略,优化生产流程,降低成本,确保产品的竞争力。同时,公司还不断加大研发投入,推动技术创新和产业升级,以适应不断变化的市场需求。

这五个故事只是CALMIRCO公司在电子行业发展中众多精彩瞬间的缩影。正是这些不懈的努力和持续的创新,使得CALMIRCO公司在激烈的市场竞争中脱颖而出,成为电子行业的佼佼者。

ECI公司的发展小趣事

ECI公司深知品质对于企业生存的重要性。因此,公司建立了严格的质量管理体系,从原材料的采购到生产流程的每一个环节都进行严格的质量控制。此外,ECI还引入了国际先进的质量检测设备和技术,确保产品的每一个细节都符合高品质的要求。正是这种对品质的坚持和追求,让ECI公司在竞争激烈的电子行业中脱颖而出。

HDK(北陆电气)公司的发展小趣事

面对日益激烈的市场竞争,ECI公司积极开拓国际市场。公司成立了专门的国际市场部,负责海外市场的调研、开发和推广。通过深入了解不同国家和地区的市场需求和文化差异,ECI公司成功推出了符合当地消费者需求的电子产品。同时,公司还与多家国际知名企业建立了长期稳定的合作关系,进一步扩大了市场份额。

启攀微电子(Chiphomer)公司的发展小趣事

在技术创新方面,启攀微电子一直致力于提升产品的性能和可靠性。公司拥有一支技术骨干团队,他们拥有丰富的芯片设计开发和批量生产的经验。通过不断的技术创新和优化,公司成功推出了多款高性能、低成本的芯片产品,并在通讯、智能家电及个人消费类等高速成长的电子信息领域取得了广泛的应用。同时,公司还积极拓展海外市场,成功将产品打入韩国等国家和地区,进一步提升了公司的国际影响力。

安普康(AMPCOM)公司的发展小趣事

随着业务的不断发展,安普康开始积极寻求市场拓展和战略合作的机会。公司在香港市场取得了显著的成绩后,决定进一步拓展内地市场。通过设立深圳安普康科技有限公司等分支机构,安普康逐步在内地市场建立了完善的销售网络和服务体系。同时,公司还与多家知名企业建立了长期合作关系,共同开拓市场、分享资源。这些合作不仅提升了安普康的市场地位,也为其未来的发展奠定了坚实的基础。

A1 PROS公司的发展小趣事

进入2004年,A1 PROS开始着手研发彩色CCD传感器。经过两年的不懈努力,公司在2005年成功开发出3 IC彩色CCD传感器。这一创新产品不仅色彩还原度更高,而且功耗更低、稳定性更强,迅速受到市场的欢迎。随着彩色CCD传感器的推出,A1 PROS的产品线更加丰富,市场竞争力也进一步提升。

问答坊 | AI 解惑

我的DSP之路-关于中段向量的一些心得与问题

中断向量表的编写 .ref _bad_trap  ; 这个标号外部没有定义,为什么还用.ref,而不是用..global? .ref _c_int0 ; entry point to the code .sect "vectors" ;自定义 ...…

查看全部问答>

关于谐振电路的品质因素(Q值)

许多电子初学者对于谐振电路的品质因素(Q值)理解的不是很透彻,近日在网上发现这篇文章,讲得比较详细.   在研究各种谐振电路时,常常涉及到电路的品质因素Q值的问题,那末什么是Q值呢?下面我们作详细的论述。   图1是一串 ...…

查看全部问答>

今天是5月最后一天,新的6月即将来临

希望各位工控坛友,多提问题,多回答问题,我们一起成长!…

查看全部问答>

定制的ce5,如何掉中文的哪个小面板

ce5中调用软输入面板双拼,但是输入中文时,软面板显示,同时中文小面板也显示,如何去掉这个小面板呢, 谢谢,在线…

查看全部问答>

人才,你在哪儿??

昔日,未行桃李之事,今遇一通达之事,却无良才平复此役,苦求未果!心中不甚纷扰,叹,吾,何以解?唉!唉!.......…

查看全部问答>

WinCe Wifi配置

大家好, 关于wifi的配置, 下面黑体部分: g_dwOutput & INTF_BSSID == 0????为什么啊?望高人指教! 部分打印信息: In flags used       = [0x7fffffff] dwOutput 打印信息   =  [0x000fffff] ...…

查看全部问答>

CCeCommandBar的工具条的问题

CCeCommandBar的工具条怎么设置才能够使得按钮可以有下压的状态,以表示当前正在进行某项操作。 谢谢…

查看全部问答>

RTX嵌入在Lotus的问题

在Lotus代理中的Initialize中这样写道Dim objRTXCApi As RTXClient.RTXAPI 但objRTXApi出错,定义不了objRTXCApi,在VB中只要添加应用就可以了,请问在Lotus该怎样声明objRTXApi?请高人帮忙解决!谢谢…

查看全部问答>

主题:庭审Sitara, 你是怎样启动的?

TI的Sitara系列ARM器件提供了丰富多彩的启动模式, 可以说东邪西毒南帝北丐,你能想到的启动方式, 它基本上都有了.那么就让我们拷问一下Sitara, 究竟你是怎么实现这么多的启动的? 手段合不合** 是否损害了最广大的人民群众的根本利益?Sitara:尊敬的各 ...…

查看全部问答>

远程水位监测系统

关键词:远程水位监测系统、河道水位监测系统、水库水位监测系统、远程水位监控系统、地下水位监测系统 一 概述 济南惠驰电子科技有限公司基于移动通讯网络开发的水位远程监测系统,支持用户通过手机即可远程无线查看高位水池、水塔的具体水位值 ...…

查看全部问答>