简介
程序由一个或者多个函数组成,必须要有main()函数,作为程序入口。
MCU为32位,M3内核
一、存储结构
程序存储在RAM内存中,内存结构由高地址到低地址分别为:STACK、unused memory、HEAP、BSS、GVAR、TEXT。
STACK即栈:编译期间就能确认的存储大小,在函数作用域内创建,离开作用域后销毁。
HEAP即堆: 使用malloc或者new开辟的空间,需要灵活释放,否则有溢出故障。
BSS段:Block Started by Symbol,没有被初始化的全局变量和静态变量,会被初始化为0.
GVAR即数据段:初始化后的全局变量,静态变量,常量。
TEXT即代码段:存放程序代码主题,函数主题,为二进制格式。
二、实践记录
软件编译后的数据分为text ; data ; bss ; dec , hex
2.1 软件编译后
text 11036 ; data 256 ; bss 12444 ; dec=text+data+bss
增加uint16_t的数组[1000],在main里,引用后(不引用编译器不会分配空间):
text:11044 ; data 256 ; bss 14444
总结:text增加8Byte ; bss增加2000=1000*2
MCU数据手册所说的RAM=data+bss
2.2 MCU的link文件
概念
堆与栈的区别
1.栈是先入后出,堆是先进先出
2.栈是的空间是系统自己分配并释放,堆是程序申请空间并进行释放。
malloc:分配一块连续的内存空间,和free函数一起使用。