【F1-启动文件】STM32启动文件详解,不是简单的翻译注释,已完结
我们这里以大容量产品的启动文件来讲解:startup_stm32f10x_hd.s直接下载PDF版本吧: 教程里面是以F429的启动文件来讲解的,但是CM3跟CM4差不多,基本上一样
初始化栈:STACK
栈的大小决定了程序中能定义多少局部变量,如果编写的程序比较大,定义的局部变量很多的话,那么就需要修改这个值。
如果某一天,你在写程序的时候突然出现了莫名奇妙的错误,并进入了硬fault的时候,这时你就要考虑下是不是栈不够大,溢出了。
默认情况下,栈的大小设置成 1KB,栈的大小最大不能超过内部SRAM的大小。
Stack_Size EQU 0x00000400初始化堆:HEAP
堆的大小决定了我们使用内存申请函数:malloc()可以申请多大的内存,这个在STM32里面使用的比较少。
默认情况下,堆的大小设置成512个字节
Heap_Size EQU 0x00000200
已完结
但是如果都放全局 耦合性大了,移植性也差了 十一月的萧邦 发表于 2015-10-13 18:49
但是如果都放全局 耦合性大了,移植性也差了
可以这么理解 十一月的萧邦 发表于 2015-10-13 18:49
但是如果都放全局 耦合性大了,移植性也差了
可以这么理解 十一月的萧邦 发表于 2015-10-13 18:49
但是如果都放全局 耦合性大了,移植性也差了
可以这么理解 火哥,任务堆栈和启动时定义的堆栈不同且同时存在,它们分别在内存的静态区和堆栈区,运行任务时sp指向的是静态区,我这样理解对吗? 火哥,想问下我理解的栈区就是会自动释放的区域,通常是局部变量存放的地区,但是堆区是不是要通过我们自己写一个类似于malloc()这样的函数来分配内存的区域,而全局变量和static修饰的变量都是分配到静态区,会不会也能够分配到堆区呢,这个我就不是很清楚了。:):) Dream_Chaser 发表于 2015-10-13 20:17
火哥,任务堆栈和启动时定义的堆栈不同且同时存在,它们分别在内存的静态区和堆栈区,运行任务时sp指向的是 ...
你这样问我还真不会,我找找资料再回答你 梦幻世界wjl 发表于 2015-10-20 12:58
火哥,想问下我理解的栈区就是会自动释放的区域,通常是局部变量存放的地区,但是堆区是不是要通过我们自己 ...
前面你理解的都对,无论是全局的还是static修饰的,栈或者堆都是在sram里面 fire 发表于 2015-10-20 14:14
你这样问我还真不会,我找找资料再回答你
期待火哥解答 :D, 太好了,谢谢火哥对额外的内容进行分解。 期待继续 启动文件MARK... 看看 过来学习,辛苦了
学习中。。。。 看看。。。。。。。。。。。。。。。。 过来学习,辛苦了 学习一下:lol:lol 看看学习…… 看看看看看看看看看看看看看看看看看看看看 新人前来围观大神 支持野火!!!支持每日一题!!! 太好了,谢谢火哥对额外的内容进行分解。 期待继续 不是吧,这个也要回复~~~ 来学习一下
,。。。。。。。。。。。。。。。.................. 看看怎么样。。。。。。。。。。。。。。。十字 我用的是gcc,和这个语法差别好大。 .syntax unified
.arch armv7e-m
.section .stack
.align 3
#ifdef __STACK_SIZE
.equ Stack_Size, __STACK_SIZE
#else
.equ Stack_Size, 0xc00
#endif
.globl __StackTop
.globl __StackLimit
__StackLimit:
.space Stack_Size
.size __StackLimit, . - __StackLimit
__StackTop:
.size __StackTop, . - __StackTop
.section .heap
.align 3
#ifdef __HEAP_SIZE
.equ Heap_Size, __HEAP_SIZE
#else
.equ Heap_Size, 0
#endif
其中一部份 来看看怎么解读的 继续学习
需要认真仔细的学习。 谢谢火锅分享 来瞧瞧看看 \(≧▽≦)/学习一下 过来学习,辛苦了 哥好像以前回复过这贴子 回复了才能看,就水点咯 好好学习 为什么 要回复了再看好麻烦 谢谢火哥! 这个文件自己搞了好久还是不清不楚的
来xuexue怎么解读的 好好学习 。。 看看。~~~~~~~~~~~~ 好好学习Start Code 怎么解释 学习 学习一下.................................. 学习一下、、、、、、、、、、、、、 我好想看火哥