找回密码
 立即注册
查看: 122|回复: 9

关于STC8H1K16内存使用情况

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:27
  • 最近打卡:2026-06-02 14:00:30
已绑定手机

2

主题

9

回帖

104

积分

注册会员

积分
104
发表于 2026-5-12 00:24:22 | 显示全部楼层 |阅读模式
编译结果:Program Size: data=100.7 xdata=591 const=235 code=14490


新手请教各位老师:
1、单片机程序内存16k,现在使用14k多了。需不需要换个芯片多留点余量。
2、data区最多是不是只能使用128字节?为了减少data区的占用,局部变量能不能用xdata修饰,有没有什么隐患?
3、最搞不懂的就是堆栈。变量怎么定义才能减少对堆栈空间的占用。有时候代码会出现异常,代码又看不出什么问题。不知道是否和堆栈的使用有关。
     从哪里能看出堆栈是否溢出?



回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:697
  • 最近打卡:2026-07-04 21:56:03

33

主题

3007

回帖

6880

积分

论坛元老

积分
6880
发表于 2026-5-12 16:26:50 | 显示全部楼层
1. 单片机永远都是秉承着够用就行。除非你不在乎成本。
2.2 变量定义在xdata区,访问的速度比data区慢。如果你不在乎运行效率,那没有什么隐患。我内存模式直接选择的large模式
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:594
  • 最近打卡:2026-07-05 10:46:15
已绑定手机

16

主题

636

回帖

1733

积分

荣誉版主

积分
1733
发表于 2026-5-12 16:33:23 | 显示全部楼层
data都100了,这个看了感觉难受,直接和楼上说的,内存模式large,然后所有变量不加任何修饰,编译器自动完成,有些函数内部参与复杂运算的变量,可以酌情增加data修饰.
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:27
  • 最近打卡:2026-06-02 14:00:30
已绑定手机

2

主题

9

回帖

104

积分

注册会员

积分
104
发表于 2026-5-12 21:19:27 | 显示全部楼层
_奶*** 发表于 2026-5-12 16:26
1. 单片机永远都是秉承着够用就行。除非你不在乎成本。
2.2 变量定义在xdata区,访问的速度比data区慢。如 ...

那堆栈的使用空间是哪部分呢?怎么知道堆栈内存是否够用!

点评

没使用动态分配不牵扯堆。 栈可以检测SP寄存器值。  详情 回复 发表于 2026-5-12 22:53
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:27
  • 最近打卡:2026-06-02 14:00:30
已绑定手机

2

主题

9

回帖

104

积分

注册会员

积分
104
发表于 2026-5-12 22:51:18 | 显示全部楼层
xiangz*** 发表于 2026-5-12 16:33
data都100了,这个看了感觉难受,直接和楼上说的,内存模式large,然后所有变量不加任何修饰,编译器自动完成,有 ...

改成large模式编译:
Program Size: data=15.7 xdata=670 const=235 code=15283
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:586
  • 最近打卡:2026-07-04 12:34:03
已绑定手机

112

主题

4958

回帖

1万

积分

荣誉版主

无情的代码机器

积分
10758
发表于 2026-5-12 22:53:30 | 显示全部楼层
梦回*** 发表于 2026-5-12 21:19
那堆栈的使用空间是哪部分呢?怎么知道堆栈内存是否够用!

没使用动态分配不牵扯堆。
栈可以检测SP寄存器值。
截图202605122254322960.jpg
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:27
  • 最近打卡:2026-06-02 14:00:30
已绑定手机

2

主题

9

回帖

104

积分

注册会员

积分
104
发表于 2026-5-12 23:45:09 | 显示全部楼层
erci*** 发表于 2026-5-12 22:53
没使用动态分配不牵扯堆。
栈可以检测SP寄存器值。

那0x7F减去SP地址是不是堆栈可用空间?

点评

嗯  发表于 2026-5-13 09:02
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:27
  • 最近打卡:2026-06-02 14:00:30
已绑定手机

2

主题

9

回帖

104

积分

注册会员

积分
104
发表于 2026-5-13 23:53:01 | 显示全部楼层
erci*** 发表于 2026-5-12 22:53
没使用动态分配不牵扯堆。
栈可以检测SP寄存器值。

map文件内容

默认的small模式:

* * * * * * * * * * *   D A T A   M E M O R Y   * * * * * * * * * * * * *
000000H   000007H   000008H   ---    AT..     DATA           "REG BANK 0"
000008H   000018H   000011H   BYTE   UNIT     DATA           ?DT?ACTION
000019H   00001DH   000005H   BYTE   UNIT     DATA           ?DT?TM1638
00001EH   00001FH   000002H   BYTE   UNIT     DATA           ?DT?EEPROM
000020H.0 000021H.0 000001H.1 BIT    UNIT     BIT            _BIT_GROUP_
000021H.1 000021H.4 000000H.4 BIT    UNIT     BIT            ?BI?MAIN
000021H.5 000021H.6 000000H.2 BIT    UNIT     BIT            ?BI?BEEP
000021H.7 000021H   000000H.1 ---    ---      **GAP**
000022H   00003EH   00001DH   BYTE   UNIT     DATA           _DATA_GROUP_
00003FH   00005AH   00001CH   BYTE   UNIT     DATA           ?DT?MAIN
00005BH   00005DH   000003H   BYTE   UNIT     DATA           ?DT?HEAT
00005EH   000060H   000003H   BYTE   UNIT     DATA           ?DT?NTC
000061H   000062H   000002H   BYTE   UNIT     DATA           ?DT?PIDOUT
000063H   000063H   000001H   BYTE   UNIT     DATA           ?DT?BEEP
000064H   000064H   000001H   BYTE   UNIT     IDATA          ?STACK




改成large模式后:

* * * * * * * * * * *   D A T A   M E M O R Y   * * * * * * * * * * * * *
000000H   000007H   000008H   ---    AT..     DATA           "REG BANK 0"
000008H.0 00001FH.7 000018H.0 ---    ---      **GAP**
000020H.0 000020H.3 000000H.4 BIT    UNIT     BIT            ?BI?MAIN
000020H.4 000020H.5 000000H.2 BIT    UNIT     BIT            ?BI?BEEP
000020H.6 000020H   000000H.2 ---    ---      **GAP**
000021H   000021H   000001H   BYTE   UNIT     IDATA          ?STACK


回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-7-5 14:04 , Processed in 0.085783 second(s), 89 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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