为什么单片机无法按照程序执行?| 已解决
本帖最后由 Dwyer 于 2024-3-9 21:17 编辑最近在使用STC8H1K08这个单片机的时候总是觉得怪怪的。一开始程序还算正常,按照例程写的串口收发也是正常的。但是在程序越写越多的时候会报空间不够的错误
于是把单片机的size改大
这下编译是没有问题了,但是实际上会出现程序写到代码,压根不执行
如上图,收到了数据,切RX1_Buffer内的数据就是我下发的数据,COM1_RX_Cnt也为8.按照道理应该进红框中的
for循环,然后执行蓝框中的程序,但是实际却没有执行蓝框中的程序,是直接跳到了下一句。
请问这个是怎么回事??
感谢大家已经解决问题,确实是我内存满的问题,把变量放在外部存储区就没问题了
我使用的是库函数,目前我取消了不用的串口。然后吧定义的数组放到了XDATA,目前程序又正常了,看来是空间不够导致的程序错乱 51的data是128 STC8H1K08是1K的RAM吧,你里面 data+xdata 超了1K了,然后data应该不能超过256
STC8 尽量用户变量全部放 xdata !
===最小规模的STC8, xdata都 >=1024字节
idata/data, 留给堆栈使用
下面的 SRAM 指的是 xdata的大小,
不包含 256字节的 idata/堆栈
data=273.3byte,超过了单片机256byte。好像堆栈也要在这256byte中,所以还要给堆栈留点余量。 51的data有点小 data小,可以自己优化,参与计算的idata,参与少的xdata,如果仅仅是个常亮,比较表格之类,用code声明,放到代码区.
程序写起来很简单,优化要根据变量使用情况.其实你选了51,一般的项目还真没有出现过ram不够的情况.
页:
[1]