城市直播房产教育博客汽车
投稿投诉
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

教程一文搞懂STM32启动文件

4月24日 红朱砂投稿
  本文启动文件位STM32G030的启动文件(。s为结尾的文件),其他型号单片机大同小异,可以直接参考。
  我们先来看下启动文件的,开头说明;;FileName:startupstm32g030xx。s;Author:MCDApplicationTDescription:STM32G030xxdevicesvectortableforMDKARMtoolchain。;Thismoduleperforms:;SettheinitialSP;SettheinitialPCResetHSetthevectortableentrieswiththeexceptionsISRBranchestomainintheClibrary(callsmain())。;AfterResettheCortexM0processorisinThreadmode,;priorityisPrivileged,andtheStackissettoMain。;UseConfigurationWizardinContextM;;Copyright(c)2019STMicroelectronics。Allrightsreserved。;;ThissoftwarecomponentislicensedbySTunderApacheLicense,Version2。0,;theLYLicense。YoumayobtainacopyoftheLicenseat:;opensource。orglicensesApache2。0;;;Amountofmemory(inbytes)allocatedforSThStackCoStackSize(inBytes)0x00xFFFFFFFF:8;h1、说明
  说明里除了版权的声明外主要说明了启动文件的主要功能:
  1)设置堆栈指针SPinitialsp。
  2)设置PC指针ResetHandler。
  3)设置中断向量表。
  4)配置系统时钟。
  5)配置外部SRAMSDRAM用于程序变量等数据存储(这是可选的)。
  6)跳转到C库中的main,最终会调用用户程序的main()函数。
  CortexM内核处理器复位或者上电后,处于线程模式,指令权限为最高级别的特权级别,堆栈设置为使用主堆栈MSP。2、启动流程
  单片机在复位或者重新上电之后,CPU首先将0X08000000位置存放的堆栈栈顶地址存放到SP中(MSP),当然这个的前提是我们的程序存储到了flash里。之后将0X08000004位置存放的向量地址放入PC程序计数器中。
  这时候CPU从PC寄存器指向的地址取出指令并执行,这个执行的程序是复位中断的服务程序ResetHandler。
  复位中断服务程序中调用了SystemInit()函数,这个函数的作用是配置系统时钟、配置FMC总线上的外部SRAMSDRAM。调用完SystemInit()函数之后,跳转到了C库中的main函数。这个时候任务就交给了C库中的main函数,main函数对用户的程序进行初始化操作,然后main函数会调用我们自己写的main函数执行程序。3、程序分析StackSizeEQU0x400AREASTACK,NOINIT,READWRITE,ALIGN3StackMemSPACEStackSizeinitialsp
  1)这里EQU是个伪指令,和我们C中的define比较像,编译器编译不会生成二进制代码。0X400表示栈的大小。
  2)AREASTACK,NOINIT,READWRITE,ALIGN3这句话表示,下面开始定义一个代码段或者数据段。此处是定义数据段。AREA后面的关键字表示这个段的属性。
  STACK:这个是代表这个数据段的名字,当然我们可以取任意名字。
  NOINIT:表示此数据段不需要填入初始数据。
  READWRITE:表示此段可读可写。
  ALIGN3:表示首地址按照2的3次方对齐,即按照8字节对齐(地址对8求余数等于0)。
  4)SPACE这行指令告诉编译器给STACK(前面命名的名称)段分配0x00000400字节的连续内存空间。
  5)initials表示了栈顶地址。initialsp只是一个标号,标号主要用于表示一片内存空间的某个位置,等价于C语言中的地址概念。地址仅仅表示存储空间的一个位置,从C语言的角度来看,变量的地址,数组的地址或是函数的入口地址在本质上并无区别。HeapSizeEQU0x200AREAHEAP,NOINIT,READWRITE,ALIGN3heapbaseHeapMemSPACEHeapSizeheaplimit
  6)这部分代码实现开辟堆(heap)空间,主要用于动态内存分配,也就是说用malloc,calloc,realloc等函数分配的变量空间是在堆上。这里和上面的类似,首先分配一片连续的内存空间这里的名字叫HEAP,即分配堆的空间,大小是0X200。heapbase表示堆的开始地址。heaplimit表示堆的结束地址(只是标号)。PRESERVE8THUMB;VectorTableMappedtoAddress0atResetAREARESET,DATA,READONLYEXPORTVectorsEXPORTVectorsEndEXPORTVectorsSize
  7)PRESERVE8指定当前文件保持堆栈八字节对齐。
  8)THUMB表示后面的指令是THUMB指令集,我们的内核使用的THUMB指令集。
  9)AREA定义一块代码段,只读,段名字是RESET。
  10)EXPORT语句将3个标号申明为可被外部引用,主要提供给链接器用于连接库文件或其他文件。VectorsDCDTopofStackDCDResetHResetHandlerDCDNMIHNMIHandlerDCDHardFaultHHardFaultHandler此处省略若干代码DCD0;ReservedDCDRTCTAMPIRQHRTCthroughEXTILineDCDFLASHIRQHFLASHDCDRCCIRQHRCCDCDEXTI01IRQHEXTILine0and1DCDEXTI23IRQHEXTILine2and3DCDEXTI415IRQHEXTILine4to15此处省略若干代码DCDI2C1IRQHI2C1DCDI2C2IRQHI2C2DCDSPI1IRQHSPI1DCDSPI2IRQHSPI2DCDUSART1IRQHUSART1此处省略若干代码
  11)我们可以看到这里就是我们的中断向量表了,DCD表示分配1个4字节的空间。每行DCD都会生成一个4字节的二进制代码。中断向量表存放的实际上是中断服务程序的入口地址。当异常(也即是中断事件)发生时,CPU的中断系统会将相应的入口地址赋值给PC程序计数器,之后就开始执行中断服务程序。这里地址定义到了代码断的最前面。具体的物理地址由链接器的配置参数(IROM1的地址)决定。我们的程序在Flash运行,中断向量表的起始地址是0x08000000。
  VectorsSizeEQUVectorsEndVectorsAREA。text,CODE,READONLY;ResethandlerroutineResetHandlerPROCEXPORTResetHandler〔WEAK〕IMPORTmainIMPORTSystemInitLDRR0,SystemInitBLXR0LDRR0,mainBXR0ENDP
  12)AREA定义一块代码段,只读,段名字是。text。READONLY表示只读。
  13)利用PROC、ENDP这一对伪指令把程序段分为若干个过程,使程序的结构加清晰。
  14)WEAK声明其他的同名标号优先于该标号被引用,就是说如果外面声明了的话会调用外面的。这个声明很重要,它让我们可以在C文件中任意地方放置中断服务程序,只要保证C函数的名字和向量表中的名字一致即可。
  15)IMPORT:伪指令用于通知编译器要使用的标号在其他的源文件中定义。但要在当前源文件中引用,而且无论当前源文件是否引用该标号,该标号均会被加入到当前源文件的符号表中。
  16)SystemInit函数,主要实现RCC相关寄存器复位和中断向量表位置设置。
  17)main标号表示CC标准实时库函数里的一个初始化子程序main的入口地址。该程序的一个主要作用是初始化堆栈(跳转userinitialstackheap标号进行初始化堆栈的,下面会讲到这个标号),并初始化映像文件,最后跳转到C程序中的main函数。这就解释了为何所有的C程序必须有一个main函数作为程序的起点。因为这是由CC标准实时库所规,并且不能更改。NMIHandlerPROCEXPORTNMIHandler〔WEAK〕省略若干EXPORTTIM14IRQHandler〔WEAK〕EXPORTTIM16IRQHandler〔WEAK〕EXPORTTIM17IRQHandler〔WEAK〕EXPORTI2C1IRQHandler〔WEAK〕EXPORTI2C2IRQHandler〔WEAK〕EXPORTSPI1IRQHandler〔WEAK〕EXPORTSPI2IRQHandler〔WEAK〕EXPORTUSART1IRQHandler〔WEAK〕EXPORTUSART2IRQHandler〔WEAK〕
  18)死循环,用户可以在此实现自己的中断服务程序。不过很少在这里实现中断服务程序,一般多是在其它的C文件里面重新写一个同样名字的中断服务程序,因为这里是WEEK弱定义的。如果没有在其它文件中写中断服务器程序,且使能了此中断,进入到这里后,会让程序卡在这个地方。IF:DEF:MICROLIBEXPORTinitialspEXPORTheapbaseEXPORTheaplimitELSEIMPORTusetworegionmemoryEXPORTuserinitialstackheapuserinitialstackheapLDRR0,HeapMemLDRR1,(StackMemStackSize)LDRR2,(HeapMemHeapSize)LDRR3,StackMemBXLRALIGNENDIFEND
  19)简单的汇编语言实现IF。ELSE语句。如果定义了MICROLIB,那么程序是不会执行ELSE分支的代码。MICROLIB在MDK的TargetOption里面设置。userinitialstackheap由main函数进行调用。
投诉 评论 转载

紫砂紫砂是一种炻器,是一种介于陶器与瓷器之间的陶瓷制品,其特点是结构致密,接近瓷化,强度较大,颗粒细小,断口为贝壳状或石状,但不具有瓷胎的半透明性。宜兴紫砂器胎质具有这种特性,而且……华为发布会重新定档12月9日,华为nova10SE华为WAT由于一些大家都知道的原因,大部分的手机厂商发布会都延期举办了。而数码博主厂长是关同学透露道,原定于12月2日举行的华为新品发布会,将于12月9日下午两点举行。不过,在此前关于这……写给祖国妈妈的一封信亲爱的祖国妈妈:您好!再过五个月,您将迎来70岁的生日,作为您16亿儿女中的一员,我的内心已经迫不及待的道出了对您的赞美和声声祝福。祖国妈妈,您是一位美丽多姿……冬日,远山,乱思天冷了,出门都是困难症。于是就万分感慨,人到中年,就愈加想念年轻时候的无惧无畏,脚上能穿上几百块钱的鞋子了,却想念起赤脚走过的泥路。那个曾经在小村里的孩子,在进城大潮的怂……赤壁造句用赤壁造句大全31、孙刘两家利用了辅车相依的关系,从而取得了赤壁之战的胜利。32、三國周郎赤壁。亂石穿空,驚濤拍岸,卷起千堆雪。江山如畫,壹時多少豪傑。33、周瑜将计就计,使蒋干……为什么大组织都不就地提拔原因很权谋没做过领导的人,很多时候不理解,为什么,体制内或是大的组织通常不会在一个部门内,或是一个地方就地挑拨,从原有的工作人员中晋升,而是提拔也是换单位或是换岗位晋升,其实这有多个原因……养分不良儿童易患高血压养分不良儿童易患高血压(养分不良儿童易患高血压)巴西圣保罗联邦大学进行的一项研讨表明,岁前的儿童养分不良成年后最轻易患高血压。圣保罗联邦大学在该市南区贫民区挑选了名……两队拼至双加时,恩比德申京犯满离场,青年火箭赢得胜利北京时间12月5日,休斯顿火箭对阵费城76队,两队拼至双加时,最终比分为123:132,76人队在前,火箭队取胜。火箭申京和恩比德分别犯满离场,哈登伤后归队。76人球星恩……莴苣病毒病的防治措施莴苣病毒病是莴苣上常见的重要病害之一,主要危害莴苣、生菜、菠菜、豌豆等蔬菜作物,以蚜虫和种子传毒为主,在春、秋季蚜虫重发季节发生较为普遍。发病严重时造成植株矮化,生长衰弱,甚至……云南大理洱海的月亮洱海月大理的苍山洱海就像一对相恋情人,相依相伴,莽茫苍山将路过的云拦?成雨或雪,消融的雨雪注入洱海,天长日久形成面积达250平方公里的高原湖泊。碧波荡漾的洱海映下苍山的巍巍身影,更显……总结准妈妈错误胎教的种类每个妈妈都希望自己的宝宝聪明再聪明一点,因此把宝宝的智力开发提前到了胎儿时代,然而胎教真的会得到想象中的效果吗?纠正关于胎教的几个错误观念拍打胎教?有人建议,……教程一文搞懂STM32启动文件本文启动文件位STM32G030的启动文件(。s为结尾的文件),其他型号单片机大同小异,可以直接参考。我们先来看下启动文件的,开头说明;;FileName:startup……
走进黎巴嫩最有钱的区域,奢侈品应有尽有,小国文化影响力惊人OnexPlayer壹号掌机mini版线上新品发布会圆满成功原神雷电将军与钟离联手,打出刀刀真伤效果?可惜只能打两套人间最难是清醒肿瘤患者到底忌不忌口?海鲜鸡肉香肠等10个最纠结的食物许家印,终究失去恒大总部,重组传来新消息仙剑奇侠传被严重低估的秒杀神技夺魂,原来当年我们不会玩冬奥单板滑雪男子障碍追逐我国选手无人出战,奥地利选手险胜夺金高新技术企业,本月申报别忘记这项税收优惠苹果进军中国智能家居领域官网上线近30个产品金铲铲之战S611月18日平衡调整解读,不合理的地方获得改善冬季洗澡不再担心忽冷忽热!美的新品燃气热水器智能即开即热十一假期乡村游与自驾游热度高暴力逼迁可能触犯了的刑法条款有这些破坏名誉权的法律责任是什么?李自成登基武英殿为什么只一天就烧城而走呢?南昌小肉串是哪个部位南昌小肉串是什么肉喝饮料的讲究,为了健康你必须得了解!智能门锁的使用方法诺基亚十年河东十年河西个健康好习惯你有几个带着麦兜去旅游电脑吸引了我30而已陈屿,缺乏共情沟通,才是失败婚姻的关键

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找