LAOXU 发表于 2023-2-25 04:31:06

笑死, STC8H的双DPTR仿真问题折腾三天,绝望的发帖前30秒解决...

声明: 本贴框架格式系抄袭网友hyperma之贴, 版权系网友hyperma所有~~~

我真的快疯了,无论淘宝上买的STC8H8K64U(模块),还是 STC官方送的板子,把规划中的改写的使用双DPTR指针的

函数strcmp,strncmp,strcpy,strncpy,memcmp,memcpy,memccpy,memmove,

都用STC8H的大ROM装进去,但没想到在这个STC8H超强双DPTR面前踢了铁板。


由于我是从中颖51叛变过来的,对双DPTR一向自认很有信心,用官方库函数+自编库函数,已经玩得不能再熟练了。

上机调试出错, 那很正常, 单步+断点跟踪调试, 查找原因, 就是发现第二个DPTR指针不工作啊!

更改 DPS寄存器没用, 更改直接地址(0xE3)可行, 但就是第二个DPTR指针死活不工作啊!


单步调试跟踪,出现了奇怪的事情,就是发现第一个DPTR指针始终在工作, 第二个DPTR指针永远不工作啊!怎么折腾都这样,

于是我折腾了三天。足足三天啊!换STC8H8K64U板子、重装STC8H8K64U仿真驱动、重装Keil, 重启电脑,都不成……。


实在不行了,凌晨想上来发帖子求救……。唉,揉揉已经通红的眼睛看会儿帖子吧,偶然看到了以前自已发的帖子里, 回网友的疑问?

在数组数据交换过程中, 用DMA传输快? 还是用软件模拟传输快? 自已编写了测试程序, 两者之间的传输速率当然会复杂一肯步些PK,

结果 软件模拟传输飞快 完胜 DMA传输, 在软件模拟传输中, 我成功应用了STC8H8K64U的双DPTR功能啊!我……

然后调出该软件模拟传输测试程序, 编译运行一下看数据,正常了……。这是为什么啊!为什么啊!真心向版主求教,是否说STC8H的仿真及软件是有问题的?



LAOXU 发表于 2023-2-25 04:31:47

后记:

我随意设断点, 单步或连续跟踪调试,发现该软件模拟传输测试程序不稳定, 时好时坏(查看数组, 传输的结果错误), 经不断更改断点位置, 单步或连续跟踪.


得出以下结论:

STC8H的仿真, 不支持第二个DPTR指针, 无论是单步, 还是连续, 只要在使用第二个DPTR指针过程中有停留(停顿), 就会出错, 永远停止第二个DPTR指针的工作!!!

像前面我调试 函数strcmp,strncmp,strcpy,strncpy,memcmp,memcpy,memccpy,memmove,就是在 双DPTR指针应用中, 加了断点, 造成STC8H的仿真过程中,

在第二个DPTR指针执行过程中有了停顿, 而产生第二个DPTR指针不工作的结果!

LAOXU 发表于 2023-2-25 17:21:49

仿真时还发现一个问题. 就是断点没法全部一键清除, 需一个一个清除.

这个问题, 我在 stc32仿真时就发现, 已提.

现在stc32仿真 这一 bug 已修正, 请官方有空的时候, 把 stc51仿真 这一 bug , 也修正一下.

xhbwork 发表于 2023-2-25 19:15:16

是的,51断点清除很麻烦,并且自己还会跑,很多时候清楚还自己回来。

所以能用串口打印调试的情形,一般不用仿真,最多加个LA跟踪下程序执行时间。

LAOXU 发表于 2023-2-26 10:41:51

xhbwork 发表于 2023-2-25 19:15
是的,51断点清除很麻烦,并且自己还会跑,很多时候清楚还自己回来。

所以能用串口打印调试的情形,一般不 ...

这是 STC51监控软件问题, 事实上这种 简易仿真器, 仅利用片内FLASH及串口通讯, 并且没有专用的单字节TRAP调试指令(用长跳转或长调用指令代替), 很容易出问题, 进入死机或FLASH破坏(未能正确恢复现场).

像用 sst89E516制作的仿真器, 就存在这种问题, 尽管国内有人对此作了改进和完善, 但有于先天不足, 多多少少都会存在一点问题.

用 STC8H仿真, 我就碰到多次 断点不见, 有时就自动回来的现像, 以及进入死循环或程序飞了.

一般我都是通过重新烧录一下 STC8H仿真监控解决的.

国学芯用 发表于 2023-3-13 13:09:11

STC8H8K64U的双数据指针用汇编语言操作,可以将功能全部发挥出来
===C语言暂时KEIL C51支持不了,就不要管了,
===STC8H同频的速度是普通8051的13.2倍以上,还有DMA、MDU16来减轻CPU压力,估计快20倍以上
===主频能到45MHz, 不是传统的12MHz/24MHz

一,STC8H8K64U不用仿真功能,直接裸机运行时
1, 对 XRAM 读出/写入, STC8H8K64U的 双DPTR指针, 完全正确, 工作正常.
2, 对程序区的 CODE 读出, STC8H8K64U的 双DPTR指针, 完全正确, 工作正常.

二,STC8H8K64U用仿真功能时
1, 对 XRAM 读出/写入, STC8H8K64U的 双DPTR指针, 完全正确, 工作正常.

2, 对程序区的 CODE 读出, STC8H8K64U的双 DPTR指针, 访问code程序区
===第一指针 DPTR0 支持对 CODE 读出, 完全正确, 工作正常.
===第二指针 DPTR1 不支持对 CODE 读出,仿真系统没考量到这,请仿真时注意,后续会改进

bwang 发表于 2023-5-19 08:56:50

国学芯用 发表于 2023-3-13 13:09
STC8H8K64U的双数据指针用汇编语言操作,可以将功能全部发挥出来
===C语言暂时KEIL C51支持不了,就不要管 ...

您说的仿真系统没考量到这,请仿真时注意,后续会改进,请问是改stc-isp软件还是改stc8h8k芯片呢?

国学芯用 发表于 2023-5-19 09:13:35

bwang 发表于 2023-5-19 08:56
您说的仿真系统没考量到这,请仿真时注意,后续会改进,请问是改stc-isp软件还是改stc8h8k芯片呢? ...

STC-ISP 更新一下目前最新的是6.91Phttps://www.stcaimcu.com/forum.php?mod=viewthread&tid=2277

bwang 发表于 2023-5-19 14:34:04

国学芯用 发表于 2023-5-19 09:13
STC-ISP 更新一下目前最新的是6.91Phttps://www.stcaimcu.com/forum.php?mod=viewthread&tid=2277 ...

好的

HHJuan 发表于 2024-2-26 18:15:52

请问大家接触过用STC8H8K64U与ESP32进行IIC通讯吗?
我尝试用ESP32作为IIC 主机,STC8H8K64U作为IIC从机。主机发送的数据Wire.write(1);   ,从机能接收到,但是打印的结果是Read123=-10136
不清楚是哪里出现了问题,求教!
页: [1]
查看完整版本: 笑死, STC8H的双DPTR仿真问题折腾三天,绝望的发帖前30秒解决...