杰理可视化SDK开发-杰理SDK代码区域说明

杰理可视化SDK开发-杰理SDK代码区域说明

前言

现在为止也开发了许多杰理TWS蓝牙耳机、音响项目SDK的案子,在调试案子时不断的向前辈们学习到了很多关于蓝牙音响、蓝牙TWS耳机专业的知识。想在这里做一个学习汇总,方便各位同行和对杰理芯片SDK感兴趣的小伙伴们学习;

本章详细讲解杰理可视化SDK开发SDK代码区域说明

通常,JL硬件设备包含flash和RAM两大物理存储介质,程序编译链接后生成的可执行文件(如ELF)通常被划分为多个段(section),每个段存放特定类型的数据或代码。 这些段在程序加载和运行时,会被放置到flash或RAM中。其中他们之间的关系如下表所示。

内容

存储位置(烧录后)

运行时位置

是否占用flash

是否占用RAM

.text

可执行指令(代码函数等)

flash

flash

.rodata

只读常量

flash

flash

.data_code

可执行指令放RAM

flash

RAM

.data

已初始化的全局/静态变量

flash(初始值)

RAM

是(存初始值)

.bss

未初始化的全局/静态变量

RAM

动态内存

RAM

局部变量、函数调用

RAM

overlay

内存复用空间

flash

RAM

杰理蓝牙设备中各个代码的位置如下图所示

红色框的文件是占用RAM
橙色框的文件是占用FLASH
绿色框的文件为辅助信息不用理会


sdl.lst文件

.lst文件是列表文件(Listing File),由编译器/汇编器生成的一种文本格式的中间文件。它的核心作用是将源代码、汇编指令、机器码和地址信息一一对应地列出来,用于代码分析和调试。

flash存储介质

1、断电后数据不丢失
2、主要用于存储。存放我们编译好的代码(.text段)、常量(.rodata段,这里杰理是合并入.text段)
3、代码放到flash:CPU的程序计数器直接指向flash的地址空间来读取指令并执行;(运行效率一般)
4、flash区域中代码越多,程序代码量越大;
5、成本相对较低;

RAM存储介质

1、随机存取存储器,断电后数据丢失;
2、主要用于运行。存放动态变化的变量(全局变量、推、栈)、函数调用时的现场数据;
3、代码放到RAM:系统启动后,需要有一段专门的启动代码,将这个代码段从flash中拷贝到它在RAM中的指定位置,拷贝完成后,CPU再跳转到RAM中的地址去执行;(运行效率更高)
4、成本相对较高

以下是各个段在开发中常见的表现形式

注意:函数中的局部变量一定要定义初始值,不然程序运行时会设置随机值导致程序的不正常运行;

个人小结

程序在开发编译链接后生成的可执行文件会被划分多个段,每个段存放特定类型的数据代码。这些段在程序加载和运行时,会被放置到flash或者RAM中。
段:
.text段:可执行指令(代码函数等)
.rodata段:只读常量
.data_code:可执行指令放RAM
.data:已初始化的全局/静态变量
.bss:未初始化的全局/静态变量
堆:动态内存
栈:局部变量、函数调用
overlay:内存复用空间


制作不易!喜欢的小伙伴给个小赞赞!喜欢我的小伙伴点个关注!有不懂的地方和需要的资源随时问我哟!