目录
1.Ubuntu下的C程序中堆、栈、全局、局部等变量的分配地址
2.stm32下的C程序中堆、栈、全局、局部等变量的分配地址
二、Clion2021完成stm32F103 点亮LED的程序。
一、重温全局变量、局部变量、堆、栈
1.Ubuntu下的C程序中堆、栈、全局、局部等变量的分配地址
先编写一个代码
#include <stdio.h>
#include <stdlib.h>
//定义全局变量
int init_global_a = 1;
int uninit_global_a;
static int inits_global_b = 2;
static int uninits_global_b;
void output(int a)
{
printf("hello");
printf("%d",a);
printf("\n");
}
int main( )
{
//定义局部变量
int a=2;
static int inits_local_c=2, uninits_local_c;
int init_local_d = 1;
output(a);
char *p;
char str[10] = "lyy";
//定义常量字符串
char *var1 = "1234567890";
char *var2 = "qwertyuiop";
//动态分配
int *p1=malloc(4);
int *p2=malloc(4);
//释放
free(p1);
free(p2);
printf("栈区-变量地址\n");
printf(" a:%p\n", &a);
printf(" init_local_d:%p\n", &init_local_d);
printf(" p:%p\n", &p);
printf(" str:%p\n", str);
printf("\n堆区-动态申请地址\n");
printf(" %p\n", p1);
printf(" %p\n", p2);
printf("\n全局区-全局变量和静态变量\n");
printf("\n.bss段\n");
printf("全局外部无初值 uninit_global_a:%p\n", &uninit_global_a);
printf("静态外部无初值 uninits_global_b:%p\n", &uninits_global_b);
printf("静态内部无初值 uninits_local_c:%p\n", &uninits_local_c);
printf("\n.data段\n");
printf("全局外部有初值 init_global_a:%p\n", &init_global_a);
printf("静态外部有初值 inits_global_b:%p\n", &inits_global_b);
printf("静态内部有初值 inits_local_c:%p\n", &inits_local_c);
printf("\n文字常量区\n");
printf("文字常量地址 :%p\n",var1);
printf("文字常量地址 :%p\n",var2);
printf("\n代码区\n");
printf("程序区地址 :%p\n",&main);
printf("函数地址 :%p\n",&output);
return 0;
}
在Uubuntu中运行这个文件
2.stm32下的C程序中堆、栈、全局、局部等变量的分配地址
代码需要添加串口初始化函数
通过运行结果可以发现,Ubuntu在栈区和堆区的地址值都是从上到下增长的,tm32的栈区的地址值是从上到下减小的,堆区则是从上到下增长的。从每个区来看,地址值是从上到下逐步减小的,即栈区的地址是高地址,代码区的地址是处于低地址。
二、Clion2021完成stm32F103 点亮LED的程序。
1.安装使用
官网下载:CLion2021.2 Winx64
下载 CLion:适用于 C 和 C++ 的智能跨平台 IDE
选中
2. 安装配置 arm-none-eabi-gcc
windows 上到这下载:
GNU Toolchain | GNU-RM Downloads – Arm Developerdeveloper.arm.com/open-source/gnutoolchain/gnu-rm/downloads
进入网页后,点击 gcc-arm-none-eabi-10.3-2021.10-win32.zip 下载
添加到环境变量path
3.安装配置 MinGW
- 打开网址:
https://sourceforge.net/projects/mingw-w64/files/Toolchains targetting Win64/Personal Builds/mingw-builds/
下载 MinGW 官方压缩包
放在这里
把它放在下面的路径里
4.安装配置 OpenOCD
- 进入官网下载:Download OpenOCD for Windows
5.配置stm32cube
创建工程
使用stm32F103c8t6
配置 SYS
配置 RCC
配置引脚
设置 PC13 引脚为 GPIO_Output 来点亮 LED 灯。
配置串口 USART1
命名工程文件并设置
然后" Toolchain/IDE "那里,选择 SW4STM32
6.配置 CLion 工程文件
回到 CLion,可以看到出现了如下界面,选择 st_nucleo_f103rb.cfg 文件,并使用
点击
可以看到
点击Board config files
根据刚才查看到的目录位置打开该文件,将第十行注释掉
打开 main.c 文件,在 while 循环里添加使 PC13 引脚 LED 闪烁的代码
while (1)
{
/* USER CODE END WHILE */
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_SET);
HAL_Delay(500);
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, GPIO_PIN_RESET);
HAL_Delay(500);
/* USER CODE BEGIN 3 */
}
点击 File-Settings-CMake
,选择下图中的选项,最后点击 OK
点击
设置好后点击
会生成hex文件
然后结果
三、参考文献
(28条消息) 基于ubuntu,树莓派和stm32的C程序的内存分配问题_Harriet的博客-CSDN博客
(29条消息) CLion2021 的详细安装并基于 CLion 实现 stm32F103 点亮 LED_L-GRAZY的博客-CSDN博客