Las variables globales, las variables locales, el montón y la pila en programas en lenguaje C se basan en la verificación en stm32

Las variables globales, las variables locales, el montón y la pila en programas en lenguaje C se basan en la verificación en stm32

Objetivo de verificación experimental

1.
Las variables locales creadas temporalmente en el área de la pila se almacenan en el área de la pila.
Cuando se llama a una función, sus parámetros de entrada se almacenan en el área de la pila.
Cuando la función regresa, su valor de retorno se almacena en el área de la pila.
Las variables locales definidas por const se almacenan en el área de la pila.
2. El
área del montón se utiliza para almacenar los segmentos de memoria distribuidos dinámicamente durante la operación del programa, que se pueden aumentar o disminuir.
Puede haber funciones como malloc para realizar la distribución dinámica de la memoria.
La memoria distribuida por la función malloc debe liberarse para la liberación de memoria, de lo contrario causará pérdidas de memoria.
3. Sección .bss Las
variables globales no inicializadas se almacenan en la sección .bss.
Las variables globales inicializadas a 0 y las variables estáticas inicializadas a 0 se almacenan en la sección .bss.
La sección .bss no ocupa espacio de archivo ejecutable y su contenido es inicializado por el sistema operativo.
4. Sección .data Las
variables globales inicializadas se almacenan en la sección .data.
Las variables estáticas se almacenan en la sección .data.
La sección .data ocupa el espacio del archivo ejecutable y el programa inicializa su contenido.
Las variables globales definidas por const se almacenan en la sección .rodata.

Procedimiento experimental

La información anterior se basa en códigos relacionados con stm32:

#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include <stdlib.h>

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
 	LED_Init();			     //LED¶Ë¿Ú³õʼ»¯
	KEY_Init();          //³õʼ»¯Óë°´¼üÁ¬½ÓµÄÓ²¼þ½Ó¿Ú
	
 	while(1)
	{
    
    	
			for(t=0;t<len;t++)
			{
    
     
				USART_SendData(USART1, USART_RX_BUF[t]);//Ïò´®¿Ú1·¢ËÍÊý¾Ý
				
				while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);//µÈ´ý·¢ËͽáÊø
			}
	
			USART_RX_STA=0;
    	times++;
			if(times%500==0)
			{
    
    
				printf("\r\nǶÈëʽ´®¿ÚʵÑé\r\n");
				printf("hcr@2219491180qqcom\r\n\r\n");
	      printf("Õ»Çø-±äÁ¿µØÖ·\r\n");
				printf("                i:%p\r\n", &i);
				printf("                p:%p\r\n", &p);
				printf("              str:%p\r\n", str);
        printf("\n¶ÑÇø-¶¯Ì¬ÉêÇëµØÖ·\r\n");
        printf("                   %p\r\n", p1);
        printf("                   %p\r\n", p2);
        printf("\r\n.bss¶Î\r\n");
        printf("\nÈ«¾ÖÍⲿÎÞ³õÖµ k2£º%p\r\n", &k2);
        printf("¾²Ì¬ÍⲿÎÞ³õÖµ k4£º%p\r\n", &k4);
        printf("¾²Ì¬ÄÚ²¿ÎÞ³õÖµ m2£º%p\r\n", &m2);
        printf("\r\n.data¶Î\r\n");
        printf("\nÈ«¾ÖÍⲿÓгõÖµ k1£º%p\r\n", &k1);
        printf("¾²Ì¬ÍⲿÓгõÖµ k3£º%p\r\n", &k3);
        printf("¾²Ì¬ÄÚ²¿ÓгõÖµ m1£º%p\r\n", &m1);
        printf("\r\n³£Á¿Çø\n");
        printf("ÎÄ×Ö³£Á¿µØÖ·     £º%p\r\n",var1);
        printf("ÎÄ×Ö³£Á¿µØÖ·     £º%p\r\n",var2);
        printf("\r\n´úÂëÇø\n");
        printf("³ÌÐòÇøµØÖ·       £º%p\n",&main);
				printf("\r\n end \r\n\r\n\r\n");
			}
			
			delay_ms(10);   
		}
	}	 

Pasos experimentales

1. Compile el programa en keil5 y grábelo en la placa base stm32
Inserte la descripción de la imagen aquí
2. Abra el asistente de modulación para la comunicación en serie para mostrar la verificación de confirmación
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/rude_dragon/article/details/110531377
Recomendado
Clasificación