野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8551|回复: 2

STM32、ARM存储系统的问题

[复制链接]
发表于 2016-5-27 17:34:56 | 显示全部楼层 |阅读模式
最近在看ARM Cortex-M3权威指南。看到第七章向量表、第六章存储系统已阅,结合之前的理解积累后,有几个问题想弄明白或者确定一下:
ST公司在生成芯片的时候有一段BOOTLOADER程序固化在FLASH的一个地址段里面。这个BOOTLOADER程序主要用于串口下载程序的时候工作,这么理解对不对?
程序是下载到0x08000000开始的位置,运行时候stm32可以通过boot0、boot1引脚的配置
将flash映射到0x0000 0000处。ARM内核运行的时候需要将一些变量加载到RAM,设置堆栈,等操作后交由系统或者Main函数入口处。那么这个启动程序在FLASH的哪里?,下载的程序完成后启动文件在哪里?


回复

使用道具 举报

发表于 2016-5-28 09:35:41 | 显示全部楼层
1、这个BOOTLOADER在芯片出厂前已经固化在FLASH中,作用是引导ISP下载

2、程序是从0X08地址开始执行的,系统启动后会从0地址处开始执行程序,这个0地址就是0X08,或者你可以把这个0地址看作是相对0X08地址的偏移。其实能这样做实际是ST运用了一种叫存储器重映射的技术,把一个物理内存地址给了两个地址,一个是0x08,一个是0x00,最好的理解就是把0x0看作是相对0x08的偏移。所以程序还是从0地址开始启动。

3、变量的加载,堆栈的设置这个由C库函数_main函数来完成,这个函数由编译器自动生成,_main函数最后会调用C文件的main函数,从而开始执行主程序。_main函数在启动文件的复位程序中被调用,这个复位程序除了调用_main函数之外,还有调用一个叫SystemInit的函数,主要作用是配置系统时钟,如果是F103系列,系统时钟就被配置成72M,如果是F429系列就配置成180M。
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-6-3 11:12:27 | 显示全部楼层
fire 发表于 2016-5-28 09:35
1、这个BOOTLOADER在芯片出厂前已经固化在FLASH中,作用是引导ISP下载

2、程序是从0X08地址开始执行的, ...

表7.6 上电后的向量表
地址 异常编号 值(32 位整数)
0x0000_0000 ‐ MSP 的初始值
0x0000_0004 1 复位向量(PC 初始值)
0x0000_0008 2 NMI 服务例程的入口地址
0x0000_000C 3 硬fault 服务例程的入口地址
… … 其它异常服务例程的入口地址
这是默认的向量表,一般程序不会对向量表进行重载复制到RAM,这个时候向量表在0地址开始排布(映射103的OX08开始),那么程序就是第一步MSP初始值,下一步就是复位向量调出启动文件的启动函数,后面就是按启动工作进行,这样子应该没问题吧
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 01:18 , Processed in 0.044723 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表