远行的鹿 发表于 2024-11-20 14:16:07

tzz1983 发表于 2024-11-20 12:44
串口仿真使用的XDATA最后768字节,UCOSII的模拟栈也是在XDATA的未尾,它俩是冲突的。

UCOSII 的模似栈可 ...
非常感谢您,之前已经改为1000H了,刚开始是可以运行的,但后来程序就仿真不正常了。
已经确认改为0D00H可以正常工作。
您的解释非常到位,这个说明放在您的uCos帖那个地方可以帮助新人踩坑。

远行的鹿 发表于 2024-11-20 14:28:24

非常感谢大家的回复,问题已经解决。总结一下问题的原因:
1. 关于启动文件和uCos以及仿真要求之间的关系确实就是Tzz大佬说的那样:仿真会用到xdata的最后768字节,在启动文件里不能清该部分内存会导致仿真错误。(其他芯片参照官方软件发仿真说明要求)。
2. 我的程序不能运行还有一个原因是程序本身有内存访问错误,导致不能正常运行,仿真后芯片处于死机状态,因此再次下载程序不能进行(要芯片断电复位)!!

总结,另外自己本身内存使用过大占用到最后的768字节,理论上也会导致仿真异常,所以要时刻关注内存使用情况。在程序不能下载时要考虑芯片是否已经死机,可以让它复位再次下载。如果有不对的地方欢迎大家指出。

远行的鹿 发表于 2024-11-20 14:34:51

tzz1983 发表于 2024-11-20 12:44
串口仿真使用的XDATA最后768字节,UCOSII的模拟栈也是在XDATA的未尾,它俩是冲突的。

UCOSII 的模似栈可 ...

在这里请教一下您,以STC8H4K64TL为例,IDATALEN为100H, XDATALEN为1000H, 那么这款芯片的可用内存是256+4K字节吗?

远行的鹿 发表于 2024-11-20 14:39:46

CyberHamster 发表于 2024-11-20 11:39
哦对,你这个型号不匹配

好像并没有什么影响,这2款的内存布局是一样的,只是一个有LCD,一个有LED驱动,如果不用者个组件应该不影响。

tzz1983 发表于 2024-11-20 14:41:50

远行的鹿 发表于 2024-11-20 14:34
在这里请教一下您,以STC8H4K64TL为例,IDATALEN为100H, XDATALEN为1000H, 那么这款芯片的可用内存是256+ ...
是的,UCOSII使用的内存是在KEIL内定义的,使用多少编译器是知道的。
启动文件中仅起定位和清零的作用。
然而访真使用的内存不受编译管理。那可以算是硬件使用的额外部分。

远行的鹿 发表于 2024-11-20 14:44:20

CyberHamster 发表于 2024-11-20 11:32
串口仿真应该是系统区通过软件实现的(猜的)
不知道仿真需要的xdata最后768字节初始状态是不是都是0,如果 ...

应该不是芯片自身带有仿真硬件,感觉是在单片机里下载了一个简易的GDB服务器程序。有点类似GDBStub的感觉。按这个逻辑推断:在仿真下用户可用内存和flash会减少(官方已经说明xdata最后768字节被占用),flash相关没有看到说明。

tzz1983 发表于 2024-11-20 14:46:45

远行的鹿 发表于 2024-11-20 14:44
应该不是芯片自身带有仿真硬件,感觉是在单片机里下载了一个简易的GDB服务器程序。有点类似GDBStub的感觉 ...
不会占用FLASH,访真代码在额外的区域,不占用用户FLASH。

如ISP描述:

==> AI8G/8H/8A/8C系列串口仿真说明
Flash : 0 Byte
data: 0 Byte
idata : 0 Byte
xdata : 芯片最后的768 Bytes
Port: P3.0 and P3.1


远行的鹿 发表于 2024-11-20 14:59:26

tzz1983 发表于 2024-11-20 14:46
不会占用FLASH,访真代码在额外的区域,不占用用户FLASH。

如ISP描述:


谢谢,这样就可以理解了,仿真代码放在其他地方了,毕竟很多芯片实际的flash大小比告诉用户的大。

CyberHamster 发表于 2024-11-20 15:28:44

远行的鹿 发表于 2024-11-20 14:59
谢谢,这样就可以理解了,仿真代码放在其他地方了,毕竟很多芯片实际的flash大小比告诉用户的大。 ...

是的,系统区是隐藏的
页: 1 [2]
查看完整版本: uCOS-II + 8H4K64TL 仿真不正常 | 原创出手,直接搞定