1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
对分区的了解
在一个STM32程序代码中,从内存高地址到内存低地址,依次分布着栈区、堆区、全局区(静态区)、常量区、代码区,其中全局区中高地址分布着.bss段,低地址分布着.data段,其分布图如下: 各区特点 一、栈区(stack) 临时创建的局部变量存放在栈区。 函数调用时,其入口参数存放在栈区。 函数返回时,其返回值存放在栈区。 const定义的局部变量存放在栈区。 2、堆区(heap) 堆区用于存放程序运行中被动态分布的内存段,可增可减。 可以有malloc等函数实现动态分布内存。 有malloc函数分布的内存,必须用free进行内存释放,否则会造成内存泄漏。 3、全局区(静态区) 全局区有.bss段和.data段组成,可读可写。 4、.bss段 未初始化的全局变量存放在.bss段。 初始化为0的全局变量和初始化为0的静态变量存放在.bss段。 .bss段不占用可执行文件空间,其内容有操作系统初始化。 5、.data段 已经初始化的全局变量存放在.data段。 静态变量存放在.data段。 .data段占用可执行文件空间,其内容有程序初始化。 const定义的全局变量存放在.rodata段。 6、常量区 字符串存放在常量区。 常量区的内容不可以被修改。 7、代码区 程序执行代码存放在代码区。 字符串常量也有可能存放在代码区。 stm32下实现对分区的了解 通过在keil中编程,在串口通信中借助调试助手查看输出 代码如下: #include "delay.h" #include "key.h" #include "sys.h" #include "usart.h" #include int k1 = 1; int k2; static int k3 = 2; static int k4; int main(void) { static int m1=2, m2; int i = 1; char *p; char str[10] = "hello"; char *var1 = "123456"; char *var2 = "abcdef"; int *p1=malloc(4); int *p2=malloc(4); u16 t; u16 len; u16 times=0; free(p1); free(p2); delay_init(); //ÑÓʱº¯Êý³õʼ»¯ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //ÉèÖÃNVICÖжϷÖ×é2:2λÇÀÕ¼ÓÅÏȼ¶£¬2λÏìÓ¦ÓÅÏȼ¶ uart_init(115200); //´®¿Ú³õʼ»¯Îª115200 KEY_Init(); //³õʼ»¯Óë°´¼üÁ¬½ÓµÄÓ²¼þ½Ó¿Ú while(1) { for(t=0;t while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//µÈ´ý·¢ËͽáÊø } USART_RX_STA=0; times++; if(times%500==0) { printf("Õ»Çø-±äÁ¿µØÖ·rn"); printf(" i=%prn", &i); printf(" p=%prn", &p); printf(" str=%prn", str); printf("n¶ÑÇø-¶¯Ì¬ÉêÇëµØÖ·rn"); printf(" %prn", p1); printf(" %prn", p2); printf("rn.bss¶Î"); printf("nÈ«¾ÖÍⲿÎÞ³õÖµ k2£º%prn", &k2); printf("¾²Ì¬ÍⲿÎÞ³õÖµ k4£º%prn", &k4); printf("¾²Ì¬ÄÚ²¿ÎÞ³õÖµ m2£º%prn", &m2); printf("rn.data¶Î"); printf("nÈ«¾ÖÍⲿÓгõÖµ k1£º%prn", &k1); printf("¾²Ì¬ÍⲿÓгõÖµ k3£º%prn", &k3); printf("¾²Ì¬ÄÚ²¿ÓгõÖµ m1£º%prn", &m1); printf("rn³£Á¿Çøn"); printf("ÎÄ×Ö³£Á¿µØÖ· £º%prn",var1); printf("ÎÄ×Ö³£Á¿µØÖ· £º%prn",var2); printf("rn´úÂëÇøn"); printf("³ÌÐòÇøµØÖ· £º%pn",&main); } delay_ms(10); } } 效果展示 在调试助手上可以看到显示的信息 总结 在stm32下了解全局变量、局部变量、堆、栈等概念,可以清楚的看到地址的变化。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1777 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1080 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1678 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
595浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
554浏览 3评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 08:54 , Processed in 0.733155 second(s), Total 46, Slave 40 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号