查看: 2848|回复: 4

[求助] 求教 KL17系列s文件 字节对齐 问题

[复制链接]
  • TA的每日心情
    奋斗
    2019-7-20 11:28
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    2

    主题

    7

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    208
    最后登录
    2021-1-15
    发表于 2019-9-20 14:43:53 | 显示全部楼层 |阅读模式
    最近在基于KL16和KL17系列做程序开发。发现了一个问题。两套相似的程序(驱动略有调整),分别KL16的平台和KL17的平台上运行时,编译得到的ram占用空间不一样。KL17比KL16平台多出了1288 byte的ram占用空间。
    仔细分析后,定位到是startup_KL17.s文件的字节对齐 捣的鬼,平白无故的占用了1288byte的ram空间。而这部分空间,是可以转让到stack里去的。如下图所示。
    所用平台分别KL16Z128VFM4,和KL17Z128VFM4。

    想请教达人,如何才可以把.s文件中多出来的pad占用消除掉?

    最佳答案

    hsswy 发表于 2019-9-23 20:10 不是这个问题。 我这里只是想说pad字节对齐产生的1288字节冗余空间,可以转换为stack空间使用。我想问的是 ... 请你上传一下整个工程文件 ...

    作图KL17,右图KL16,左下角Padding处显示多出1.2k的张勇

    作图KL17,右图KL16,左下角Padding处显示多出1.2k的张勇

    追溯.s文件发现因字节对齐问题多出1288byte

    追溯.s文件发现因字节对齐问题多出1288byte

    pad空间可转化到stack中去

    pad空间可转化到stack中去

    startup_MKL17Z4.rar

    3.84 KB, 下载次数: 1, 下载积分: 威望 1

    K17文件

    startup_MKL16Z4.rar

    2.93 KB, 下载次数: 3, 下载积分: 威望 1

    K16文件

    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24885
    最后登录
    2025-7-20
    发表于 2019-9-23 10:12:47 | 显示全部楼层
    mk17启动文件的 Stack_Size      EQU     0x00000800 改成 0x00000400
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-7-20 11:28
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    2

    主题

    7

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    208
    最后登录
    2021-1-15
     楼主| 发表于 2019-9-23 20:10:11 | 显示全部楼层
    不是这个问题。
    我这里只是想说pad字节对齐产生的1288字节冗余空间,可以转换为stack空间使用。我想问的是,怎么把 字节对齐引起的这1288字节消除掉。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24885
    最后登录
    2025-7-20
    发表于 2019-9-24 10:00:05 | 显示全部楼层
    hsswy 发表于 2019-9-23 20:10
    不是这个问题。
    我这里只是想说pad字节对齐产生的1288字节冗余空间,可以转换为stack空间使用。我想问的是 ...

    请你上传一下整个工程文件
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2019-7-20 11:28
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    2

    主题

    7

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    208
    最后登录
    2021-1-15
     楼主| 发表于 2019-10-8 21:45:25 | 显示全部楼层
    找到原因了,KL17和KL16的ROM起始地址不一样。
    在KL16的工程里有用到固定地址的数组,定义在RAM起始位置0x1FFFF000处,而KL17的RAM起始地址是0x1FFFE000,比KL16提前了0x1000。在移植KL16工程的时候,固定地址的数组位置还是以0x1FFFF000来写的。所以导致编译器在优化这0x1000地址的时候无法完全对齐,多出了1.2k的RAM空间。

    把地址换到0x1FFFE000后,多出的RAM就消失了
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 06:37 , Processed in 0.098477 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表