KDocs 研发资料库
  • 屏融合应用方案入口汇总
  • JL701N穿戴客述问题FAQ
  • JL701N穿戴类补丁list
  • 手表软件调试
  • JL701手表硬件设计注意事项 总结
  • 手表烧录_升级工具说明
  • 手表量产相关
  • 生产烧录KEY及代码和升级代码
  • AC695N系列手表SDK开发指南
  • JL7012A手表-SDK入门指南V1.0
  • 穿戴手表JL701N-入门到进阶开发指导
  • 彩屏充电仓JL701N LVGL入门到进阶指导文档
  • AC695N手表软硬件问题整理
  • JL701N手表软硬件问题整理
  • 701n手表SDK共性问题汇总
  • UI效果参考demo文档
  • 屏幕触摸驱动相关参考
  • 穿戴类支付宝支付流程
  • AC701N_PMU_介绍
  • 经典蓝牙相关接口说明
  • music应用详细设计说明书
  • music_player接口设计说明文档
  • PO声测试以及处理方法
  • DAC性能测试指南
  • 杰理串口升级规范
  • AC696N串口升级说明
  • AC695N系列手表UI开发指南
  • AC695N添加升级UI说明文档.
  • UI布局工具使用说明
  • UI接口设计说明书
  • UI工具快速使用说明
  • 701N_UI编辑工具用户手册
  • UI工程源文件升级工具使用说明
  • 701N屏幕驱动配置说明
  • JL701N 2D图形硬件加速接口使用说明
  • JL701_watch常用例子参考
  • JL_WATCH_SDK UI相关工具使用文档
  • 智能手表音频 设计调试手册 V1.2
  • AC695X_AC696X_AD697X 常见通话问题处理参考资料
  • 701手表 PCBA产测工具使用说明书 V1.0
  • 杰理定频问题排查2021.1.26
  • BQB5.4 20231007
  • 各类概率性死机调试解决指南
  • 不开机问题处理汇总(仅供参考)
  • 蓝牙搜索不到问题处理汇总(仅供参考)
  • 样机发烫(仅供参考)
  • 蓝牙音乐卡顿问题处理汇总(仅供参考)
  • 充电问题处理汇总(仅供参考)
  • 触摸问题处理汇总(仅供参考)
  • 功耗调试指导
  • JL701N穿戴客述问题FAQ
  • 701N 开发板新屏幕驱动修改
  • AC701 nandflash A8图片显示问题
  • 支付宝乘车码接入资料
  • 多国语言及字库使用指南
  • 查看C程序Flash 和RAM 资源占用说明文档
  • 701N_SDK3.0.1_OPUS_OGG 编解码
  • 蓝牙在线调eq说明
  • BR EDR BLE 蓝牙性能测试配置方法_
  • BLE-HID
  • BLE-HID 调试文档
  • 【问题】701v301外置flash播放wts提示音
  • 本地录音开启及调试
  • 死机分析
  • 表盘传输APP层的压缩算法
  • 功能模版:JL701_V301_UI资源使用FAT文件系统demo
  • JL7013+4G CAT1 参考设计原理图
  • 吾爱4G模组+JL701接口说明
  • (电脑一拖多)手表升级dongle工具使用补充说明
  • 蓝牙接口使用说明
  • ble 开发流程
  • 彩屏仓功耗优化
  • 彩屏仓补丁list
  • 更新字库步骤
  • 支付宝硬件接入资料

查看C程序Flash 和RAM 资源占用说明文档

📎 原始文档:https://www.kdocs.cn/l/cgvr85VCNiN6 查看C程序Flash 和RAM 资源占用说明文档

4.1.7.2. 查看使用细节,即每个函数、变量的大小 — JL Project Documentation (zh-jieli.com)

一、C程序的内存分布情况

在C程序中,可执行文件的内存布局通常分为以下几个段,各段存储的内容及其对应的变量类型如下:

1. text 段(代码段)

  • 存储内容:程序的可执行代码(机器指令),例如函数体(包括main函数和其他函数)、控制逻辑等。
  • 特点:只读(防止程序运行时被意外修改)。
  • 对应关系:所有函数的代码均存放在此段。

2. data 段(数据段)

  • 存储内容:已初始化的全局变量、静态变量(包括全局静态变量和局部静态变量)。
  • 特点:在程序启动时分配空间,初始值直接存储在可执行文件中。
  • 对应变量示例: int global_init = 42; // 全局变量(已初始化)→ data段
    static int static_init = 10; // 全局静态变量(已初始化)→ data段
    void func() {​
    static int local_static = 5; // 局部静态变量(已初始化)→ data段
    ​}

3. bss 段(未初始化数据段)

  • 存储内容:未初始化或显式初始化为0的全局变量、静态变量。
  • 特点:在程序加载时由系统自动初始化为零值(或空指针),不占用可执行文件的实际存储空间(仅记录所需空间大小)。
  • 对应变量示例: int global_uninit; // 全局变量(未初始化)→ bss段
    static int static_uninit; // 全局静态变量(未初始化)→ bss段
    void func() {​
    static int local_static_uninit; // 局部静态变量(未初始化)→ bss段
    ​}

其他内存区域

  1. 栈(Stack):存放局部非静态变量、函数参数等,生命周期与函数调用相关。 void func() {​
    int local_var = 20; // 局部变量 → 栈
    ​}
  2. 堆(Heap):动态分配的内存(如malloc/free),由程序员手动管理。 int*ptr =malloc(sizeof(int));// 动态内存 → 堆
  3. 只读数据段(.rodata):存放常量(如字符串常量、const修饰的全局变量)。 constint global_const =100;// 可能存放在.rodata段char*str ="hello";// 字符串"hello" → .rodata段
    image

二、哪些会消耗RAM和占用flash 空间

1. 消耗Flash的段

Flash(程序存储器)用于存储程序的静态内容,包括:

  • text段(代码段):存放可执行代码(函数体的机器指令)。
  • data段(已初始化数据):存放全局变量、静态变量的初始值。这些初始值会被编译到可执行文件中,因此占用Flash空间。
  • .rodata段(只读数据):存放字符串常量、const修饰的全局变量等,例如 const int x = 10; 或 char *str = "hello";。

2. 消耗RAM的段

RAM(运行时内存)用于存储程序运行时的动态数据,包括:

  • data段:程序启动时,已初始化的全局/静态变量的初始值会从Flash复制到RAM中,因此data段占用双重空间(Flash存初始值,RAM存运行时数据)。
  • bss段:未初始化或初始化为0的全局/静态变量,仅在RAM中分配空间(系统自动初始化为0,不占用Flash)。
  • 堆(Heap):动态分配的内存(如malloc/free),运行时从RAM中分配。
  • 栈(Stack):局部变量、函数参数等,运行时从RAM中分配。 image

实际开发中的优化

  • 减少Flash占用:避免全局变量初始化非零值、精简代码。一般减少text +data端的占用
  • 减少RAM占用:减少全局/静态变量、控制堆栈大小、使用const修饰常量。一般减少data+bss的占用。

三 、杰理芯片查看程序使用空间

查看使用细节,即每个函数、变量的大小

通过下面链接获取脚本,cmd 运行 指令

 python  .\report_elf_sizes.py  --elf sdk.elf --output symbol_tbl.html  

或者直接查看symbol_tbl.txt 查看对应文件 函数和变量大小
4.1.7.2. 查看使用细节,即每个函数、变量的大小 — JL Project Documentation (zh-jieli.com)
如:ui_show_page_list 变量占用大小 :
image 同时使用脚本生成的html 文件,方便逐个文件查看
image

四、707 压缩升级

目前这种升级方式仅支持升级文件放到本地触发升级的形式,也就是搬运升级。
把完整的update.ufw 写入到对应地址,如果该升级包能实现压缩就比较有效去省下升级包占用空间。
单备份压缩升级补丁v1.1.rar
项目参考案例:
原本 388K 缩减(压缩后升级包)jl_com.ufw 279K 。升级文件相对原本update.ufw 缩减108K 能够正常升级 。
另:压缩升级如果之前固件不支持压缩升级,需要OTA 一版中间过渡版本或者直接线刷。原因是原本固件不带解压缩搬运升级,需要先升级一版本带有解压缩搬运的固件,后续固件都可以用压缩升级。
中间版本如果update.ufw过大需要修改如下,注释掉框内:(如果flash 空间足够可以不修改)
image 用生成的update.ufw 去升级固件后就带有解压缩功能。后续可以用jl_com.ufw实现正常压缩升级。

本文档包含以下子页面

Prev
多国语言及字库使用指南
Next
701N_SDK3.0.1_OPUS_OGG 编解码