STMCU小助手
发布时间:2022-8-27 13:29
|
一、什么是BSS段(ZI段) bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。 bss是英文Block Started by Symbol的简称。 bss段属于静态内存分配。 而在Keil里,BSS段被称为ZI段 二、为什么要复制data段 这是因为对于在STM32F103这类资源紧缺的单片机芯片中,数据段只是暂时先保存在Flash上,在使用前被复制到内存里,而复制到内存这个过程是需要我们自己实现的。实际上在keil中,*(InRoot$$Sections)这一段就是keil帮我们做好的一段代码,当我们调用main函数时,keil会帮我们自动添加。但是为了学习,我们来自己实现一下,那么就需要知道数据段的加载地址(在Flash上的位置)和链接地址(需要放在内存中的位置),在keil中获取这些地址的方法如下:
三、编写代码实现 将start.s修改为如下所示
四、验证 其他文件不做修改,编译烧录运行,可以看到所有变量的值都正确了
五、注意 我们之前看过编译出来的hex文件,发现myzero和my变量也存在,这就意味着这两个本该在bss段的变量也会在Flash中,这就很奇怪了,而事实是: 对于keil来说,一个本该放到BSS段的变量,如果它所占据的空间小于等于8字节自己,keil仍然会把它放在data段里。只有当它所占据的空间大于8字节时,才会放到BSS段。 那么我们将myzero修改为一个数组
这样查看hex文件,可以看到,只有my变量存在了
|
DMA 原理从 0 到 1:为什么它能解放 CPU?一文讲透 DMA 的工作流程
【福利三:雨露均沾·逢7狂欢】之五:STM32系统时钟PLL故障排除1例
【福利三:雨露均沾·逢7狂欢】之三:AI帮我查BUG
福利三:雨露均沾·逢7狂欢】之二:STM32F407VG串口通信乱码故障的排除
基于STM32F103的I2C主从机通信
OpenBLT移植到STM32F103战舰开发板上适用于所有STM32F103系列的Bootloader
TFT LCD 与 FSMC 的硬件连接大容量 STM32F10xxx FSMC 接口
单片机:初学者该了解的STM32F103基础知识
2025软件工具兔哥知道
STM32之继电器模块
微信公众号
手机版