杰理可视化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:内存复用空间
制作不易!喜欢的小伙伴给个小赞赞!喜欢我的小伙伴点个关注!有不懂的地方和需要的资源随时问我哟!
