首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【STM32H7教程】第13章 STM32H7启动过程详解

开发大部分例程都是配套了MDKIAR两个版本,这里重点给大家分析一下MDK启动文件分析,IARMDK大同小异。...当前H743753系列对应型号如下: 我们再来打开IAR文件夹里面的文件: 多了一个linker文件夹,用于IAR配置ICF文件: 而启动文件跟MDK里面的一样,一个是用H743系列,另一个是用于...13.3 启动文件分析 鉴于V7开发使用是STM32H743XI,下面我们详细分析一下启动文件startup_stm32h743xx.s。...启动文件主要完成如下工作,即程序执行过程: -      设置堆栈指针SP = __initial_sp。 -      设置PC指针 = Reset_Handler。...该程序一个主要作用是初始堆栈(跳转__user_initial_stackheap 标号进行初始堆栈,下面会讲到这个标号),并初始化映像文件,最后跳转到 C 程序中 main函数。

1.1K10

【STM32H7教程】第9章 STM32H7重要知识点数据类型,变量堆栈

它是C程序语言最新标准。 对于我们常用编译器MDKIAR而已,C89,C99C11均支持。...像我们开发配套STM32例程,从2009年最初版本开始就一直沿用C99标准写法来定义整数。  ...其中R13作为堆栈指针SP。SP有两个,但在同一时刻只能有一个可以用。   主堆栈指针(MSP):这是缺省堆栈指针,它由OS内核、异常服务例程以及所有需要特权访问应用程序代码来使用。  ...进程堆栈指针(PSP):用于常规应用程序代码(不处于异常服务例程中时)。 另外以下两点要注意:   大多数情况下应用,只需使用指针MSP,而PSP多用于 RTOS 中。  ...PUSH入栈操作:SP先自减 4,再存入新数值: POP出栈操作:先从SP指针处读出上一次被压入值,再把SP指针自增 4: 9.5   局部变量,全局变量堆栈实例 通过下面的实例可以对局部变量,全局变量堆栈有个感性认识

77560
您找到你想要的搜索结果了吗?
是的
没有找到

TencentOS tiny 内核移植参考指南(IAR版)

本教程将使用STM32官方Demo开发 NUCLEO-L073RZ进行示例移植,其他 ARM Cortex M系列开发芯片移植方法类似。...本教程使用ST官方STM32CubeMX软件来自动化生成IAR裸机工程,STM32CubeMX下载地址为: https://www.st.com/content/st_com/zh/products...CubeMX安装完成后,我们就可以使用CubeMX来给NUCLEO-L037RZ开发生成裸机工程了,如果您芯片不是STM32,而是其他厂商ARM Cortex M系列,您可以根据产商指导准备裸机工程...tos_cpu.c是TencentOS tiny CPU适配文件,包括堆栈初始化,中断适配等,如果您芯片是ARM Cortex M核,该文件可以不做改动,M0、M3 、M4、M7是通用,其他IP核需要重新适配...添加内核源码 内核源码kerne目录下包含corepm两个目录,其中core下为基础内核,pm是内核中低功耗组件;基础移植时候可以不添加pm目录下代码,如下图所示,我们在IAR代码导航页添加

1.8K60

【STM32F429开发用户手册】第13章 STM32F429启动过程详解

开发大部分例程都是配套了MDKIAR两个版本,这里重点给大家分析一下MDK启动文件分析,IARMDK大同小异。...13.3 启动文件分析 鉴于V6开发使用是STM32F429BI,下面我们详细分析一下启动文件startup_stm32f429xx.s。...启动文件主要完成如下工作,即程序执行过程: -      设置堆栈指针SP = __initial_sp。 -      设置PC指针 = Reset_Handler。...Cortex-M内核处理器复位后,处于线程模式,指令权限是特权级别(最高级别),堆栈设置为使用堆栈MSP。...该程序一个主要作用是初始堆栈(跳转__user_initial_stackheap 标号进行初始堆栈,下面会讲到这个标号),并初始化映像文件,最后跳转到 C 程序中 main函数。

52231

STM32F0单片机快速入门三 MCU启动过程

一般主要会完成堆栈指针设置,复位向量获取和加载,然后初始化变量,最后跳转到用户代码。在详细看启动代码之前,我们先看一下 STM32F030 内存映射。...不同于 MCS51 在 0x0000是复位向量,STM32F030 还有其它 ARM 芯片在零地址存放初始堆栈指针地址。...0x0000 0000: (0x2000 0428) 初始堆栈指针 0x0000 0004: (0x0800 00C9) 复位向量,电或复位后最先加载入PC 注:单片机上电或复位后,堆栈指针初始...细心同学这时可能发现了一个问题。 堆栈指针 SP 内容前面存储器中内容是对。但是 PC 里内容好像对不上啊?...PC 里值是 0x0800_00C8,存储器里明明是 0x0800_00C9 啊! 这里牵涉到了 ARM 体系里两种工作状态 ARM Thumb。

95520

建立任务,OSTaskCreate()源码解析

从中可以知道,OSTaskCreate()需要四个参数: task是任务代码指针, pdata是当任务开始执行时传递给任务参数指针, ptos是分配给任务堆栈栈顶指针(参看4.02,任务堆栈)...,返回新栈顶指针 INT8U err; //定义(获得并定义初始化任务控制块)是否成功 #if OS_ARG_CHK_EN > 0 /...任务优先级必须在0到OS_LOWEST_PRIO之间。接着,OSTaskCreate()要确保在规定优先级还没有建立任务[L4.1(2)]。在使用UC/OS-Ⅱ时,每个任务都有特定优先级。...pbos, //分配任务堆栈栈底指针 INT32U stk_size, //指定堆栈容量(检验用) void *pext, //指向用户附加数据域指针...,返回新栈顶指针 INT8U err; //定义(获得定义初始化任务控制块)是否成功 #if OS_ARG_CHK_EN > 0 //

53920

【STM32F407开发用户手册】第13章 STM32F407启动过程详解

开发大部分例程都是配套了MDKIAR两个版本,这里重点给大家分析一下MDK启动文件分析,IARMDK大同小异。...13.3 启动文件分析 鉴于V5开发使用是STM32F407IG,下面我们详细分析一下启动文件startup_stm32f407xx.s。...启动文件主要完成如下工作,即程序执行过程: -      设置堆栈指针SP = __initial_sp。 -      设置PC指针 = Reset_Handler。...Cortex-M内核处理器复位后,处于线程模式,指令权限是特权级别(最高级别),堆栈设置为使用堆栈MSP。...该程序一个主要作用是初始堆栈(跳转__user_initial_stackheap 标号进行初始堆栈,下面会讲到这个标号),并初始化映像文件,最后跳转到 C 程序中 main函数。

73240

【STM32H7教程】第82章 STM32H7QSPI总线应用之QSPI Flash执行程序(BOOT+APP方式)

那么问题来了,我们可不可以不使用BOOT,电就直接执行QSPI Flash程序?不行,因为QSPI Flash不像内部Flash,无需初始化,电就可以使用,而QSPI Flash不行。...该函数配置CPU寄存器外设寄存器并初始化一些全局变量。...- 默认不开启,如果要使能此选项,务必看V7开发用户手册第8章 */ #if Enable_EventRecorder == 1 /* 初始化EventRecorder并开启...第44行,这个设置在RTOS应用程序中比较重要,因为基于Cortex-M内核RTOS任务堆栈基本都是使用线程堆栈指针PSP。...但系统bootLoader使用是主堆栈指针MSP,所以务必要设置下,同时让M内核工作于特权级。此寄存器作用如下: 第47行,跳转到系统bootLoader。

1.4K21

学习 Go Plan 9 汇编

FUNCDATAPCDATA指令包含了由垃圾回收器使用信息,他们由编译器引入。..., 栈顶偏移 16 个字节数据写入 AX 寄存器 [阮老师是栈在内存块最上面, 堆在下面, 理论应该是减去地址,而不是+地址,这里需要研究] 0x0000 00000 (C:\Users...,在寄存器间接寻址中I/O指令中存放I/O端口地址 SP 堆栈指针(StackPointer) 如果是symbol+offset(SP)形式表示go汇编伪寄存器;如果是offset(SP)形式表示硬件寄存器...BP 堆栈指针(BasePointer) 保存在进入函数前栈顶基址 SB 静态基指针(StaticBasePointer) go汇编伪寄存器。...有效地址传送到BX中 PUSHQ 传送 栈压入 PUSHQ AX表示先修改栈顶指针,将AX内容送入新栈顶位置在go汇编中使用SUBQ代替 POPQ 传送 栈弹出 POPQ AX表示先弹出栈顶数据,然后修改栈顶指针

18410

用GCC开发STM32入门二

sram中),.bss段是没有初始全局变量,由启动代码把这 部分内容全初始化为0;为了保证C程序执行,还需要设置好程序运行时堆栈区。...3、设置堆栈启动代码 Cortex-m3内核在地址0x0000 0000处存放一个向量表,向量表第0个单元,也即地址0x0000 0000处存放堆栈地址,Cortex-m3复位后即从该处...向量表中内容是32位地址,这些地址是中断异常服务程序入口地址,其中向量表第一个单元, 即地址0x0000 0004处存放是复位向量,也就是说Cortex-m3复位后,执行该向量(可理解为函数指针...flash,.data,.bss堆栈就应该定位至从0x2000 0000开始sram中。...CSDN,可以免费下载。

1.7K20

如何使用CubeMx生成一个DFU工程

可以直接通过USB来对APP进行升级,因此,掌握DFU制作还是挺有好处,特别是使用CubeMx工具可以快速制作,本文将基于STM3240G-EVL评估来一步一步实现一个DFUIAP工程。...Clock Configuration: 图1 时钟树设置 如上图,STM3240G-EVAL评估使用是25M HSE。...图6 堆栈设置 另外,在高级设置中,设置先不调用对USB DFU初始化: 图7 高级设置 最后生成代码。...3 代码完善 对生成后代码是可以直接编译通过,我们这里使用IAR,当然你也可以使用MDK,由于不同编译器编译最终文件大小有所差异,而APP偏移地址在一定程度上也是有考虑到这个DFU本身代码大小...APP升级跳转,而这些接口就是实现对FLASH读写操作。

36730

全网最硬核 JVM 内存解析 - 5.压缩对象指针相关机制

也就是让这块虚拟内存是 8 字节对齐,也就是我在使用这块内存时候,最小分配单元就是 8 字节。...但是,这个 32 GB 是字节对齐大小相关,也就是 -XX:ObjectAlignmentInBytes=8 配置大小(默认为8字节,也就是 Java 默认是 8 字节对齐)。...我们针对这个公式进行优化: 首先,我们考虑把基址对象对齐偏移去掉,那么压缩对象指针可以直接作为对象地址使用。什么情况下可以这样呢?...0000 ffec 7450 ~ 0x0000 0000 ffec 7457,保存值是 0x0000 0000 0000 0001,这个上面 jol 输出一模一样。...压缩类指针0x0000 0000 ffec 7458 ~ 0x0000 0000 ffec 745b,保存值是 0x00c0 1000,这个上面 jol 输出压缩类指针地址一模一样。

28420

进入main之前,都干了什么,老实招来

经常有程序猿会说软件电后从main函数开始执行,其实是不对,在进入main之前,经历了好多,今天就带你来熟识下IAR环境下,应用软件系统main函数之前启动过程,有图有真相。...启动过程 在系统启动过程期间,在进入main函数之前会执行系统时序,主要是初始化一些硬件目标C/C++运行环境。硬件相关初始化如下图所示: ?...当CPU复位后,执行系统初始化,数据段初始化,从程序入口点__iar_program_start开始执行系统启动代码。 ?...__low_level_init函数会被调用,如果你提前定义了,这个函数执行会给应用程序一个提前初始机会。 ? 对于C/C++环境初始化如下图所示: ?...从图上可以看出,静态型变量初始化为变量会被清零,初始化为其他值得变量会被从ROM拷贝到RAM,构建C++对象,调用main函数,启动应用程序。debug跟踪过程如图所示 ? ? ? ?

970100

写一个boot引导程序

BIOS引导原理 首先要了解BIOS引导原理。启动时自检过程中会去检查磁盘第0磁头第0磁道第1扇区,检查其是否以0x550xaa为结尾,如果是的话,就认为它是一个引导扇区。...接着就会将这个扇区复制到内存0x7c00处,随后从0x7c00处开始执行。 BIOS跳转到引导程序之前,会初始化处理器,设置CS寄存器为0x0000,指令指针寄存器IP为0x7c00....这个时候cpu处于实模式下,物理地址必须经过CSIP寄存器转换才能得到,公式为:物理地址=(CS<<4)+IP。对应也是物理地址0x7c00....堆栈段寄存器 sp 栈指针寄存器 初始化寄存器过程中,就是将cs值设置到DS、ES、SS、AX中,然后设置栈指针寄存器SP....位置 mov ax, 0x0200 mov bx, 0x0000 mov dx, 0x0000 int 10h 显示字符串 使用BIOSINT10主功能AH=13h

55930

X86如何实现函数调用?

对于堆栈来说:整体堆栈顶部为sp指针堆栈生长到最低地址)。 一、内存结构 二进制程序执行时内存结构: code section:保存程序执行指令机器码。...这就需要改变下面几个寄存器值: eip指令指针,需要改成指向callee指令。 ebp esp 当前分别指向caller栈帧顶部底部。...step7:执行callee 现在堆栈中已经保存了函数局部变量跳转控制信息;由于ebp指向栈帧顶部,所以可以用ebp+8找到第一个参数保存位置。...step8:返回esp回到堆栈顶部 step9:恢复旧ebp 使用esp从堆栈中pop出一个值(old ebp),把old ebp值赋给ebp。...step10:弹出eip 继续使用esp弹出old eip值赋给eip。 step11:从堆栈中删除参数 继续讲堆栈参数弹出到寄存器,然后删除esp栈顶以下元素。

2.7K20

【STM32H7教程】第49章 STM32H7FMC总线应用之SDRAM

除了本章节配套例子采用指针方式操作SDRAM,前面第26章超方便使用方式第27章动态内存分配也非常推荐。...2、开启Cache (1)使用MDKIAR各种优化等级测试,优化对其影响很小。...电后串口打印信息: 波特率 115200,数据位 8,奇偶校验位无,停止位 1 程序设计: 系统栈大小分配: RAM空间用DTCM: 硬件外设初始化 硬件外设初始化是在 bsp.c 文件实现...2、开启Cache (1)使用MDKIAR各种优化等级测试,优化对其影响很小。...电后串口打印信息: 波特率 115200,数据位 8,奇偶校验位无,停止位 1 程序设计: 系统栈大小分配: RAM空间用DTCM: 硬件外设初始化 硬件外设初始化是在 bsp.c 文件实现

1.3K30
领券