关于STC8H1K16内存使用情况
编译结果:Program Size: data=100.7 xdata=591 const=235 code=14490新手请教各位老师:
1、单片机程序内存16k,现在使用14k多了。需不需要换个芯片多留点余量。
2、data区最多是不是只能使用128字节?为了减少data区的占用,局部变量能不能用xdata修饰,有没有什么隐患?
3、最搞不懂的就是堆栈。变量怎么定义才能减少对堆栈空间的占用。有时候代码会出现异常,代码又看不出什么问题。不知道是否和堆栈的使用有关。
从哪里能看出堆栈是否溢出?
1. 单片机永远都是秉承着够用就行。除非你不在乎成本。
2.2 变量定义在xdata区,访问的速度比data区慢。如果你不在乎运行效率,那没有什么隐患。我内存模式直接选择的large模式 data都100了,这个看了感觉难受,直接和楼上说的,内存模式large,然后所有变量不加任何修饰,编译器自动完成,有些函数内部参与复杂运算的变量,可以酌情增加data修饰. _奶咖君_ 发表于 2026-5-12 16:26
1. 单片机永远都是秉承着够用就行。除非你不在乎成本。
2.2 变量定义在xdata区,访问的速度比data区慢。如 ...
那堆栈的使用空间是哪部分呢?怎么知道堆栈内存是否够用! xiangzichen 发表于 2026-5-12 16:33
data都100了,这个看了感觉难受,直接和楼上说的,内存模式large,然后所有变量不加任何修饰,编译器自动完成,有 ...
改成large模式编译:
Program Size: data=15.7 xdata=670 const=235 code=15283 梦回青春 发表于 2026-5-12 21:19
那堆栈的使用空间是哪部分呢?怎么知道堆栈内存是否够用!
没使用动态分配不牵扯堆。
栈可以检测SP寄存器值。
ercircle 发表于 2026-5-12 22:53
没使用动态分配不牵扯堆。
栈可以检测SP寄存器值。
那0x7F减去SP地址是不是堆栈可用空间? ercircle 发表于 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
页:
[1]