rogerllg 发表于 2022-1-21 09:21:52

从STM8S往STC上移植的小问题挺多

最近在把STM8S的程序往STC8H上移植,本来是很简单的事情,但一些小问题调试,动不动弄了我几天时间,搞得心力交瘁...
下面就举个例子:
定义了一个开机变量
volatile u8 start_flag,然后我发现后来怎么样都不对,我STM8S的程序是一样的啊,然后每10ms去抓一次数据,突然发现第三次后,没有进行任何操作start_flag变量竟然从0变1了.
然后我屏蔽了所以有这个变量的判断函数,还是一样,看来不是这个问题..最后,没有办法了,把一个个函数都屏蔽掉,屏蔽了大量代码后,start_flag才正常,我STM8S一样的代码没有问题啊~
而且我编译的时候也没有报错,也没有warning啊~

坑路慢慢,STC8H好像也没有单步跟踪来解决问题,只能再一点点函数加回去,慢慢确认问题...一个业余程序员的悲伤....

sandoz1cn 发表于 2022-1-21 09:28:28

洞洞幺 发表于 2022-1-21 10:08:21

erxun 发表于 2022-1-21 10:22:01

工程中开启xdata,

rogerllg 发表于 2022-1-21 10:27:42

erxun 发表于 2022-1-21 10:22
工程中开启xdata,

开了的,不开都编译不通过的.所以我怀疑xdata不连续,或者编译器有问题.因为我申请了600Byte的xdata空间,不过我看编译所有代码的ram大概700多Byte. 我用的的1KB RAM的,应该没有问题的.

申请了600Byte的空间没有问题,但如果使用了,就出问题了...

rogerllg 发表于 2022-1-21 10:30:25

sandoz1cn 发表于 2022-1-21 09:28
**** 该帖被屏蔽 ****

同感~
哎,不统一真是不方便,编译使用都不方便

小李非刀 发表于 2022-1-21 14:17:08

移植是否方便,跟你写程序的习惯有关。
我写程序一般至少分2层:底层驱动和应用层,有时候还有中间层,用于处理应用层和底层驱动的连接。我好多应用程序都是32位ARM和8位STC可以随意拷贝移植的。

提醒楼主注意:使用数组、指针访问内存变量时,一定要判断不要溢出操作,否则就会出现楼主这样内存异常的问题。

内存都是SRAM,只要没有写操作,内容就不变。

lb0857 发表于 2022-1-21 14:59:43

二个完全不同的内核和底层   
想得到的工作量
干过这样无用功 很辛苦

t3486784401 发表于 2022-1-21 15:07:43

KEIL-51 不能有太多的局部变量,表现为谜一样的故障。

如果某些函数里有局部超长数组,就要考虑这些问题了。

rogerllg 发表于 2022-1-21 15:15:26

小李非刀 发表于 2022-1-21 14:17
移植是否方便,跟你写程序的习惯有关。
我写程序一般至少分2层:底层驱动和应用层,有时候还有中间层,用于 ...

我就是应用和底层分开来写的,原来STM8S用的就是库函数.

现在还在找问题可能出在哪里面,估计是xdata相关的问题.

rogerllg 发表于 2022-1-21 15:17:00

t3486784401 发表于 2022-1-21 15:07
KEIL-51 不能有太多的局部变量,表现为谜一样的故障。

如果某些函数里有局部超长数组,就要考虑这些问题了 ...

我设置的xdata的全局函数,另外,flag也是全局的data

t3486784401 发表于 2022-1-21 15:20:45

rogerllg 发表于 2022-1-21 15:17
我设置的xdata的全局函数,另外,flag也是全局的data

发生溢出的并不是 flag 本身,而是其他什么未知名的模块越界。

另外 51 并不是统一编址的,xdata 只是放数据用,并不能把函数放进 xdata

rogerllg 发表于 2022-1-21 16:21:45

t3486784401 发表于 2022-1-21 15:20
发生溢出的并不是 flag 本身,而是其他什么未知名的模块越界。

另外 51 并不是统一编址的,xdata 只是放 ...

嗯,下一步我就是要查是什么模块发生越界,为啥越界了.
不过这方面经验比较差一点,不统一编址,的确麻烦...

t3486784401 发表于 2022-1-21 16:52:38

rogerllg 发表于 2022-1-21 16:21
嗯,下一步我就是要查是什么模块发生越界,为啥越界了.
不过这方面经验比较差一点,不统一编址,的确麻 ...

然后就是我 9L 提到的,某函数里边有太多局部变量,造成堆栈溢出越界。

这种越界源自堆栈不够大,本不该发生的,但在 KEIL 下发生了也不给警告

rogerllg 发表于 2022-1-21 16:55:38

t3486784401 发表于 2022-1-21 16:52
然后就是我 9L 提到的,某函数里边有太多局部变量,造成堆栈溢出越界。

这种越界源自堆栈不够大,本不该 ...

多谢大佬,这个问题我慢慢找下~

rogerllg 发表于 2022-1-23 22:43:06

 经过了一天的尝试,把程序变量减少了很多,从700Byte减小到300Byte还是不行(部分变量设置成了xdata idata).最后减裁函数,到255Byte以内,也把部分变量改了idata,理论上应该是可以的,但是还是不行,还会死机.
最后,干脆继续减小,只用data 128Byte以内,就稳定了,不会死了,变量正常了.
 我就搞不懂了,然后我把STC8H所给的源码都看了下RAM分配和编译了下,所有的data都不超过128Byte, 我就想问下,有人用过STC8H大于128Byte的RAM吗? 有参考的RAM设置吗?

PPS 发表于 2022-1-23 23:08:16

我记得51对可重入函数是需要加关键字reentrant的,看看有没有可能是这个有影响。

王二小 发表于 2022-1-24 00:00:14

rogerllg 发表于 2022-1-23 22:43
 经过了一天的尝试,把程序变量减少了很多,从700Byte减小到300Byte还是不行(部分变量设置成了xdata idat ...

zxd0225 发表于 2022-1-24 06:57:34

不要用指针

rogerllg 发表于 2022-1-24 09:55:08

王二小 发表于 2022-1-24 00:00


这个肯定是试过的.这点常识还是有的~

rogerllg 发表于 2022-1-24 09:56:06

zxd0225 发表于 2022-1-24 06:57
不要用指针

没有指针~

modbus 发表于 2022-1-24 12:26:22

尽量不要用idata

国学芯用 发表于 2022-1-24 13:15:03

STC8G/STC8H/STC8A,用户变量 尽量使用xdata:unsigned charxdata k=0;   让宝贵的 可以做堆栈的 idata/总共256字节专心做 堆栈/防客人程序考虑不周需要的堆栈大,xdata 放心用,STC 8G/STC8H系列的 xdata, 5万人以上在同时使用,任何怀疑 STC8G/STC8H 的 xdata 的程序员,都是经验不足的程序员

国学芯用 发表于 2022-1-24 13:15:21


STC32G12K128 的 堆栈edata理论深度 是 64K byte/太伤成本只做了4K/edata,,xdata 成本低,做了 8K xdata;累加器 是 9组


http://www.stcmcudata.com/STC8F-DATASHEET/STC32G.pdf,   32位8051中文数据手册初版上线 , 2路 CAN,2022/1/18

国学芯用 发表于 2022-1-24 13:16:57

小李非刀 发表于 2022-1-24 13:45:28

rogerllg 发表于 2022-1-23 22:43
 经过了一天的尝试,把程序变量减少了很多,从700Byte减小到300Byte还是不行(部分变量设置成了xdata idat ...

我的项目程序data基本都会大于128字节,数组都优先用xdata。
一般来说,编译后报告data超过200字节就要留意,因为堆栈是放在256字节里的。而xdata,只要不超过内带的容量,都可以。

kundi 发表于 2022-1-24 13:59:11

国学芯用 发表于 2022-1-24 13:15
STC8G/STC8H/STC8A,用户变量 尽量使用xdata:unsigned charxdata k=0;   让宝贵的 可以做堆栈的 ...

另外一点,使用得频繁的少量数据可考虑使用非xdata的空间,可以提高效率

redworlf007 发表于 2022-1-24 14:14:52

换芯片他不香么

洞洞幺 发表于 2022-1-24 14:24:27

用c8051的从来没有这些问题

小李非刀 发表于 2022-1-24 14:27:37

洞洞幺 发表于 2022-1-24 14:24
用c8051的从来没有这些问题

只要是51内核的,都要遵循51架构的规定的。

redroof 发表于 2022-1-24 14:34:19

redworlf007 发表于 2022-1-24 14:14
换芯片他不香么

其实80251核心唯一合理的用途是用于无缝升级之前的51系列做的系统。
设计这种CPU的人也难啊,螺蛳壳里做道场{:titter:}
当年8051的机器码只留了唯一的一个保留机器码是A5,其它全用满了。
然后新一代要完全无缝兼容之前所有的东西,但是又得加一大堆新操作啊,没地方加,只好把新加的所有机器码前面都加个A5。
然后又因为这样很浪费,因为旧的很多机器码其实很少用,所以又发明了一个Source模式,这种模式下只是汇编源码跟以前的完全兼容,而机器码都变了。
新增的机器码都不带A5,然后跟新机器码冲突的旧机器码前面全加A5
其实让谁做这种系统设计,都没有更好的方法了,在旧体系里面打补丁还得完全兼容,没什么好方法。。。
如果不是兼容性包袱太重了,还不如另起炉灶吧,其实现在大部分程序应该都是C写的,移植程序本身并不难,没必要非要跟老51代码兼容。

redworlf007 发表于 2022-1-24 14:51:23

redroof 发表于 2022-1-24 14:34
其实80251核心唯一合理的用途是用于无缝升级之前的51系列做的系统。
设计这种CPU的人也难啊,螺蛳壳里做 ...

是啊,直接换片子,重写代码完事,又不是多大的工作量,都用stc了,还谈啥兼容性。

51那个xdataidata屎一样的东西,还天天吹什么宇宙第一。

redroof 发表于 2022-1-24 14:57:17

本帖最后由 redroof 于 2022-1-24 14:58 编辑

redworlf007 发表于 2022-1-24 14:51
是啊,直接换片子,重写代码完事,又不是多大的工作量,都用stc了,还谈啥兼容性。

51那个xdataidata ...

其实也不一定,你不知道当年没有ARM的年代,有人能用51做多大的程序{:titter:}
如果你的程序大到一定程度,有这种无缝升级的就算更贵你肯定也会选择的。因为弄个便宜的新架构的CPU你得去移植所有程序,为什么不给自己省点事呢~
程序大到那个份上的产品不会在乎价格的。

当然程序不大的人还是直接换到ARM M0更省事,换一次,一劳永逸。性能再高的51也还是很老的架构,性能怎么也不可能跟新的架构相比。

modbus 发表于 2022-1-24 15:16:01

redroof 发表于 2022-1-24 14:57
其实也不一定,你不知道当年没有ARM的年代,有人能用51做多大的程序
如果你的程序大到一定程 ...

其实很多用单片机的性能都是过剩,所以选51也好,选M0也好,还真不是从性能上考虑的

redroof 发表于 2022-1-24 15:22:25

modbus 发表于 2022-1-24 15:16
其实很多用单片机的性能都是过剩,所以选51也好,选M0也好,还真不是从性能上考虑的 ...

太小的东西,真的用啥都可以,没什么好说的。
稍微要一点性能的场合,再高性能的51,也比不上很便宜的M0,更不用说M4或者M7了。而且主频即使更低一点的M7都可以碾压ARM9了。看看现在的科技进步水平{:titter:}

redworlf007 发表于 2022-1-24 15:38:21

modbus 发表于 2022-1-24 15:16
其实很多用单片机的性能都是过剩,所以选51也好,选M0也好,还真不是从性能上考虑的 ...

性能过剩就过剩吧,价格合适,开发方便才是正途,扣那个性能干啥,何必要和自己过不去,剩下那点性能,可以暴富么?

洞洞幺 发表于 2022-1-24 15:50:56

现在用8051图的就是简单好用,特别是外设初始化,可以把精力用在解决问题上。还是建议用m0,基本上电机控制都可以覆盖,包括需要点数学运算的矢量控制,不一定非得用m3,m4。

rogerllg 发表于 2022-1-24 18:17:40

modbus 发表于 2022-1-24 12:26
尽量不要用idata

idata 都改成了pdata(256Byte以内),所有的变量都单独变成 data pdataxdata, 以免编译器乱编译.

rogerllg 发表于 2022-1-24 18:20:22

国学芯用 发表于 2022-1-24 13:15
STC8G/STC8H/STC8A,用户变量 尽量使用xdata:unsigned charxdata k=0;   让宝贵的 可以做堆栈的 ...

是经验不足...以内没有用过51 的扩展部分RAM,现在好好研究下.
编译器也怪,指定pdata, 但显示是xdata数据区,应该是大于128Byte的RAM都认为是xdata

rogerllg 发表于 2022-1-24 18:21:45

redroof 发表于 2022-1-24 15:22
太小的东西,真的用啥都可以,没什么好说的。
稍微要一点性能的场合,再高性能的51,也比不上很便宜的M0 ...

嗯,M3 M4 H7的我都用过了,也都有批量的产品,主要去年不都涨价,想国产化一下吗...

rogerllg 发表于 2022-1-25 09:33:09

多谢各位捧场,基本上已经搞定,我把修改方法说下,以免后续有人遇到和我一样的坑.
基本思路更改是这样的:
1.把各个变量都分别命名 datapdataxdata
2.其中data不能超过128Byte, pdata+data不能超过256Byte, xdata加上前面的不能超过你的单片机的RAM大小,我是先把xdata的变量全去注释掉先,编译看下是否有超过256Byte数据,没有超过,再打开xdata相关变量及函数
3.编译的时候注意,如果大于了256Byte数据,选择编译选项Large:Variables in XDATA ,另外还要选择 use on-chip XRAM
4.另外,Keil51编译的时候,其实大于128Byte数据小于256Byte数据的时候,其实编译显示的也是xdata,但其实单片机是pdata

快乐的花生壳 发表于 2022-1-25 16:58:49

我也遇到过这样的问题出现变量异常,当时在客户工厂一直调试都要抓狂了,最后把变量尽量用xdata,降低data就不会出现问题了,现在终于明白了原因。

armku 发表于 2022-1-25 20:47:33

rogerllg 发表于 2022-1-25 09:33
多谢各位捧场,基本上已经搞定,我把修改方法说下,以免后续有人遇到和我一样的坑.
基本思路更改是这样的 ...

data:单片机内部128字节,所有单片机都有
idata:=单片机内部data+单片机内部128字节
xdata=外置或部分单片机内置256字节以上的部分

国学芯用 发表于 2022-1-26 08:48:03

rogerllg 发表于 2022-1-24 18:17
idata 都改成了pdata(256Byte以内),所有的变量都单独变成 data pdataxdata, 以免编译器乱编译. ...

STC8G/STC8H/STC8A,用户变量 尽量使用xdata:unsigned charxdata k=0;   让宝贵的 可以做堆栈的 idata/总共256字节专心做 堆栈/防客人程序考虑不周需要的堆栈大,xdata 放心用,STC 8G/STC8H系列的 xdata, 5万人以上在同时使用,任何怀疑 STC8G/STC8H 的 xdata 的程序员,都是经验不足的程序员. 另外 不要 混用 xdata/pdata, 建议坚决不要使用 pdata, 混用 pdata/xdata 的工程师,都是 不认真看8051原理的工程师


pdata 是 xdata 的 低 256字节,混用pdata/xdata, 易造成 keil 编译器出错,keil 犯错咋办,另外 pdata 比 xdata 慢, 所以STC8051无理由 再使用 pdata

内部 工程师也不听,举例竟然 还 有 用 pdata 举例的,pdata/xdata 混用,是严重的不熟悉 STC8G/STC8H的指令速度,和 不知道 pdata 是 配合 P2口使用的,是用来访问 物理上在片外的 SRAM, 不是 用来访问逻辑上在片外,物理上在片内的 扩展 SRAM

pdata/xdata 混用,是不熟悉 STC8G/STC8H的指令速度,和 没忘了 pdata 是 配合 P2口使用的,是用来访问 物理上在片外的 SRAM, 不是 用来访问逻辑上在片外,物理上在片内的 扩展 SRAM,片内扩展的 SRAM, 请使用 xdata 访问

rogerllg 发表于 2022-1-26 11:30:24

国学芯用 发表于 2022-1-26 08:48
STC8G/STC8H/STC8A,用户变量 尽量使用xdata:unsigned charxdata k=0;   让宝贵的 可以做堆栈 ...

听君一句话,胜读10年书~
改掉,改掉...主要看贵公司的datasheet里面都有pdata的举例...也没有具体说明一些不好的地方.

国学芯用 发表于 2022-1-26 13:32:20

rogerllg 发表于 2022-1-26 11:30
听君一句话,胜读10年书~
改掉,改掉...主要看贵公司的datasheet里面都有pdata的举例...也没有具 ...

因为内部 都以为 我们 搞市场的不懂技术,文人相轻,中肯的建议,他们也不听,跟您一样, N 层 前面回复您 用 xdata , 结果 您 中西合璧 xdata/pdata混用,我们 搞市场的天天被客人骂,知道 KEIL 没 那么严谨/聪明,客人 如何的 想当然,知道 STC8G1K08 是如何的 扎实,选 STC8G1K08, 是 您的 睿智

rootxie 发表于 2022-1-27 12:06:27

国学芯用 发表于 2022-1-26 13:32
因为内部 都以为 我们 搞市场的不懂技术,文人相轻,中肯的建议,他们也不听,跟您一样, N 层 前面回复 ...

{:lol:} 您这么懂STC技术的竟然是搞市场的?老妖把关羽派去搞联谊用了

MYQQ2021 发表于 2022-1-27 20:22:52

惭愧,惭愧,第一次知道有pdata

rogerllg 发表于 2022-2-12 14:58:41

国学芯用 发表于 2022-1-26 13:32
因为内部 都以为 我们 搞市场的不懂技术,文人相轻,中肯的建议,他们也不听,跟您一样, N 层 前面回复 ...

volatileu8 xdata buttom_power_flag,Avinout_flag,PowerInsert_flag,flag_tick,init_flag,init_flag_LED;
u8 xdata Tuner_AGC;
u16 xdata Charger_pwm,AGC_pwm;
u16 xdata ticket_20s,flag_charge_tick1s;
u8 xdata ChipUniqueID,ChipIDA,ChipIDB, stc8id;
u8 xdata buf_str,flag_buf;
u8 xdata buf_spectrum;
u8 xdata Id_error;
u8 code sw_version[]="Meter_V2.0";
u8xdata output12V_flag;

变量改为xdata,正常工作十几秒后,又出现了死机..哎,看来我是搞不定了...上面的我程序主要的变量,以前xdata pdata混用的时候都没有发现死机.
下面的编译信息,data不超标的,哪位可以指条明路?
Program Size: data=20.3 xdata=551 code=8809
".\ouput\STC_Finder" - 0 Error(s), 0 Warning(s).
看来我的水平不适合玩51{:sweat:}

tomzbj 发表于 2022-2-12 18:05:52

rogerllg 发表于 2022-2-12 14:58
volatileu8 xdata buttom_power_flag,Avinout_flag,PowerInsert_flag,flag_tick,init_flag,init_flag_L ...

通用流程:

看你的map文件, 找你的这个变量在什么位置
然后重点检查在这个变量之前一点位置的数组之类, 看有没有越界写入.

zxd0225 发表于 2022-2-12 18:21:22

别用指针,别用库函数再试试。

lhj200304 发表于 2022-2-12 22:29:29

主要检查数组越界吧,可以用PClint做个检查,看看有什么异常

rogerllg 发表于 2022-2-13 09:43:13

多谢楼上3位的指路,我再研究下~

ackyee 发表于 2022-2-13 13:24:52

t3486784401 发表于 2022-1-21 15:07
KEIL-51 不能有太多的局部变量,表现为谜一样的故障。

如果某些函数里有局部超长数组,就要考虑这些问题了 ...

曾经做过试验KEIL 51局部变量 和全局变量 最终出来的结果占用的RAM是一样多的

rogerllg 发表于 2022-2-21 14:31:11

我搞不定了,放弃了~
已经单独都标注了xdatadata,还是有问题.....
我看以前别人用stc15系列的这样弄,而且没有单独标xdata data都是正常的...哎...水平不行.放弃.

1a2b3c 发表于 2022-2-21 15:11:48

先换个其它成熟些的或者标准的8051芯片试下吧,
或许的确是你手艺不到家,或许是STC真的被发现了BUG {:lol:}

洞洞幺 发表于 2022-2-21 15:38:17

就玩c8051f就好了,没那些鸟事困扰,时间也是最重要的成本啊!光看片子便宜没用的。

rogerllg 发表于 2022-2-21 16:53:00

洞洞幺 发表于 2022-2-21 15:38
就玩c8051f就好了,没那些鸟事困扰,时间也是最重要的成本啊!光看片子便宜没用的。 ...
(引用自57楼)

我是要量产的啊~一年好几万片
C8051F太贵,我还不如用我现在的STM8S005,7~8块钱吧~

rogerllg 发表于 2022-2-21 17:00:11

1a2b3c 发表于 2022-2-21 15:11
先换个其它成熟些的或者标准的8051芯片试下吧,
或许的确是你手艺不到家,或许是STC真的被发现了BUG {:lol: ...
(引用自56楼)

哈,可能是水平菜吧~
不过我看以前有人做的stc15系列的,都没有区分data xdata, data ram十几Byte, xdata RAM 数据编译出来大概是1KByte左右,也没有问题.
我自己的stc8h编译出来十几Byte data RAM, 500多Byte xdata RAM, 我还是专门区分声明了data xdata变量的,就经常莫名其妙就死了...

youkebing 发表于 2022-2-21 17:06:39

rogerllg 发表于 2022-2-21 17:00
哈,可能是水平菜吧~
不过我看以前有人做的stc15系列的,都没有区分data xdata, data ram十几Byte, x ...
(引用自59楼)

应该是程序写的有问题。

rogerllg 发表于 2022-2-22 09:09:59

youkebing 发表于 2022-2-21 17:06
应该是程序写的有问题。
(引用自60楼)

应该不是我程序上的问题,有三点可以证明:
1.我去掉了占用比较大的RAM,让程序保证在128Byte以内的data ram空间,未发现死机,先前发现那个没有进行任何操作的全局面量,也不会在未进行任何操作的时候变成其他值了
2.这个程序我是分应用层和底层驱动的,应用层在stm8s上完全没有问题,STC8H的底层驱动我也是一个个验证了,用示波器,万用表表测试过正常的
3.有一个版本我混用了xdata pdata 的声明,反而没有发现死机的再现,但我都改为xdata后,反而就直接运行一半就死机了

youkebing 发表于 2022-2-22 09:39:07

rogerllg 发表于 2022-2-22 09:09
应该不是我程序上的问题,有三点可以证明:
1.我去掉了占用比较大的RAM,让程序保证在128Byte以内的data ...
(引用自61楼)

你说了这几点,并不能保证程序没有问题,最好是放一个程序上来,大家一起看看,如果程序敏感,可以修改后发上来啊!

rogerllg 发表于 2022-2-22 11:14:48

youkebing 发表于 2022-2-22 09:39
你说了这几点,并不能保证程序没有问题,最好是放一个程序上来,大家一起看看,如果程序敏感,可以修改后 ...
(引用自62楼)

我连压缩包都放不上来,估计vip不行

youkebing 发表于 2022-2-22 11:18:55

rogerllg 发表于 2022-2-22 11:14
我连压缩包都放不上来,估计vip不行
(引用自63楼)

冲个会员吧,也支持一下论坛!

rootxie 发表于 2022-2-23 20:03:27

开个外部最大的RAM,动态调用+回收吧

rogerllg 发表于 2022-2-25 14:28:19

不弄了,放弃~

youkebing 发表于 2022-2-25 23:30:37

rogerllg 发表于 2022-2-25 14:28
不弄了,放弃~
(引用自66楼)

代码放到网盘吧,一起看看,按道理不会这么不堪的

rootxie 发表于 2022-2-26 18:25:56

{:titter:}楼主体验了 STC从入门到放弃的经历

jyrpxj 发表于 2022-2-27 21:14:42

{:lol:} 楼主体验了 STC从入门到放弃的经历

洞洞幺 发表于 2022-2-28 12:02:11

一分钱一分货

rogerllg 发表于 2022-2-28 18:49:46

我放弃了,还是用stm8s吧,贵点就贵点吧~
程序就不上传了.

sdsdc 发表于 2022-3-3 13:57:38

在用的MCU就51和兼容的STM32F1XX。要用的爽还是STM32之类的,将来价格会越来越便宜(不能看当前)。

dhvliyike 发表于 2022-3-29 16:32:29

厉害,对这个dataidata xdata有了更深入的认识

快乐的花生壳 发表于 2022-3-31 10:21:44

楼主试试把函数返回类型改成bit或减少试试,似乎定义了太多函数返回类型是uchar的也会超出,我把函数能返回bit就都返回bit(以前是uchar),实在不行就改成定义多一个xdata全局变量来返回内容,测试了几分钟都没出错。编译好像不会计算局部变量与函数占用的data,光看编译后的内存占用还不一定正确,估计是局部变量与函数返回类型也会造成data超出。

rogerllg 发表于 2022-4-4 10:33:38

快乐的花生壳 发表于 2022-3-31 10:21
楼主试试把函数返回类型改成bit或减少试试,似乎定义了太多函数返回类型是uchar的也会超出,我把函数能返回 ...
(引用自74楼)

多谢,我已经放弃~
页: [1]
查看完整版本: 从STM8S往STC上移植的小问题挺多