最新启动代码分析幻灯片

上传人:夏** 文档编号:571304546 上传时间:2024-08-09 格式:PPT 页数:25 大小:1.04MB
返回 下载 相关 举报
最新启动代码分析幻灯片_第1页
第1页 / 共25页
最新启动代码分析幻灯片_第2页
第2页 / 共25页
最新启动代码分析幻灯片_第3页
第3页 / 共25页
最新启动代码分析幻灯片_第4页
第4页 / 共25页
最新启动代码分析幻灯片_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《最新启动代码分析幻灯片》由会员分享,可在线阅读,更多相关《最新启动代码分析幻灯片(25页珍藏版)》请在金锄头文库上搜索。

1、启动代码分析启动代码分析C目标掌握嵌入式应用程序设计的基本知识掌握starup_stm32f10x_cl.s中常见汇编指令能分析starup_stm32f10x_cl.s启动代码CCCCCCC预备知识staticintc=0;全局(静态)初始化区p1=(char*)malloc(10);p2=(char*)malloc(20);分配得来得10和20字节的区域就在堆区。strcpy(p1,123456);1234560放在常量区,编译器可能会将它与p3所指向的123456优化成一个地方。ENTRY:伪操作指定程序的人口点AREA:伪操作用于定义一个代码段或者数据段DCD:用于分配一段字内存单元C

2、代码分析1栈的初始化:Stack_SizeEQU0x00000400AREASTACK,NOINIT,READWRITE,ALIGN=3Stack_MemSPACEStack_Size_initial_sp定义StackSize为0x00000400;定义栈,可初始化为0,8字节对齐分配0x00000400个连续字节,并初始化为0汇编代码地址标号C代码分析2堆的初始化:Heap_SizeEQU0x00000400AREAHEAP,NOINIT,READWRITE,ALIGN=3_heap_baseHeap_MemSPACEHeap_Size_heap_limit定义HeapSize为0x000

3、00400;定义堆,可初始化为0,8字节对齐分配0x00000400个连续字节,并初始化为0汇编代码地址标号C代码分析3PRESERVE8THUMB指定当前文件堆栈8字节对齐告诉汇编器下面是32为的Thumb指令,如果需要汇编器将插入位以保证对齐C代码分析4见见 STM3210X datasheet V10C.pdf 130页页;VectorTableMappedtoAddress0atResetAREARESET,DATA,READONLY/定义复位向量段,只读EXPORT_VectorsEXPORT_Vectors_EndEXPORT_Vectors_Size/定义一个可以在其他文件中使用

4、的全局标号,此处表示中断地址_VectorsDCD_initial_sp;TopofStack/给_initial_sp分配4字节32位的地址0x0C代码分析5DCDReset_Handler;ResetHandler/给标号ResetHandler分配地址为0x00000004DCDNMI_Handler;NMIHandler/给标号NMIHandler分配地址0x00000008DCDHardFault_Handler;HardFaultHandlerDCDMemManage_Handler;MPUFaultHandlerDCDBusFault_Handler;BusFaultHandle

5、rDCDUsageFault_Handler;UsageFaultHandlerDCD0;Reserved/这种形式就是保留地址,不给任何标号分配。C代码分析6DCDETH_WKUP_IRQHandler;EthernetWakeupthroughEXTIlineDCDCAN2_TX_IRQHandler;CAN2TXDCDCAN2_RX0_IRQHandler;CAN2RX0DCDCAN2_RX1_IRQHandler;CAN2RX1DCDCAN2_SCE_IRQHandler;CAN2SCEDCDOTG_FS_IRQHandler;USBOTGFS_Vectors_End_Vectors_

6、SizeEQU_Vectors_End-_VectorsC代码分析7中断向量表的转移AREA|.text|,CODE,READONLY/代码段定义;ResethandlerroutineReset_HandlerPROC/标记一个函数的开始EXPORTReset_HandlerWEAK/【WEAK】选项表示当所有的源文件都没有定义一个标号时,编译器也不给出错误信息,在多数情况下将该标号置为0,若该标号为B或BL指令引用,则将B或BL指令置为NOP操作;/EXPORT提示编译器标号可以为外部文件引用;C代码分析8IMPORT_main/通知编译器要使用的标号在其他文件LDRR0,=_main/使

7、用“”表示LDR目前是伪指令不是标准指令,这里是把_main的地址给R0;BXR0/BX是ARM指令集和THUMB指令集之间的程序的跳转ENDPC代码分析9;DummyExceptionHandlers(infiniteloopswhichcanbemodified)NMI_HandlerPROCEXPORTNMI_HandlerWEAKB.ENDPHardFault_HandlerPROCEXPORTHardFault_HandlerWEAKB.ENDPC代码分析10MemManage_HandlerPROCEXPORTMemManage_HandlerWEAKB.ENDP。CAN2_SCE

8、_IRQHandlerOTG_FS_IRQHandlerB.ENDPALIGNC代码分析11堆和栈的初始化;UserStackandHeapinitialization;*IF:DEF:_MICROLIB/DEF:X就是说X定义了则为真,否则为假EXPORT_initial_spEXPORT_heap_baseEXPORT_heap_limitELSEIMPORT_use_two_region_memoryEXPORT_user_initial_stackheapC代码分析12堆和栈的初始化_user_initial_stackheapLDRR0,=Heap_MemLDRR1,=(Stack_

9、Mem+Stack_Size)LDRR2,=(Heap_Mem+Heap_Size)LDRR3,=Stack_MemBXLRALIGNENDIFENDC启动配置从主闪存存储器启动:主闪存存储器被映射到启动空间(0x00000000),但仍然能够在它原有的地址(0x08000000)访问它,即闪存存储器的内容可以在两个地址区域访问,0x00000000或0x08000000。从系统存储器启动:系统存储器被映射到启动空间(0x00000000),但仍然能够在它原有的地址(互联型产品原有地址为0x1FFFB000,其它产品原有地址为0x1FFFF000)访问它。从内置SRAM启动:只能在0x20000000开始的地址区访问SRAM。C启动配置C谢谢大家结束语结束语谢谢大家聆听!谢谢大家聆听!25

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号