32G的ISP软件里和数据手册里寄存器的名字对不上~建议修改
收到,改 数据手册更方便 仿真STC8MDU16 相关功能, 发现死机!
经跟踪, 发现问题出在这一点上,上面我做了一个除法, 结果存 MD3-MD0, 下面我移位操作, 未对 MD3-MD0 作任何操作, 运行程序时, 死在移位操作启动后, 循环等待判断完成标志位上.
从而得出结论, 上面 执行 MDU16 相关功能得到的结果输出, 不能直接作为 下一个执行 MDU16 相关功能 的输入!
尽管寄存器是一样的, 都是MD3-MD0,可能芯片内部, 输入/输出存放于不同 寄存器中, 仅 地址映像 相同, 为同一名称.
请下一版本加注.
汇编两个 MDU16 相关功能中间, 插入如下代码, 运行就正常了.
MOV DPTR,#MD3 // MD3-MD0 重装
MOVX A, @DPTR
MOVX @DPTR, A
INC DPTR
MOVX A, @DPTR
MOVX @DPTR, A
INC DPTR
MOVX A, @DPTR
MOVX @DPTR, A
INC DPTR
MOVX A, @DPTR
MOVX @DPTR, A
///////////////////////////////////////////////////////////////
c语言更简单:
MD3 = MD3 ;
MD2 = MD2 ;
.......
LAOXU 发表于 2023-1-5 08:40
仿真STC8MDU16 相关功能, 发现死机!
经跟踪, 发现问题出在这一点上,上面我做了一个除法, 结果存 MD3-M ...
根据您的说法我写了一套C语言与一套汇编程序,分别进行了测试,都没有发现卡住死机的现象。
attach://2009.mp4
附件是测试代码,请参考:
我是编写库时, 发现的, 在库函数 ULDIV.A51 ( 32位无符号除法及取模) 中 你的程序我看了, 我也类拟写法, 在调试中确实死循环中(可能单步用的又点多).
另, 发现 用单步多了, 子程序中无法退出, 全速运行也不行, 程序跑飞. 重新编译 下载 调试, 故障依旧.
后来 Keil 退出, 换个其他项目, 又没事了 刚才我测试了, 去掉MD3-MD0 重装 , 不影响 ULDIV.A51 ( 32位无符号除法及取模) 运行.
我也想不明白什么原因, 只是 当时仿真时, 单步运行有些多.
又发现 MDU16命令 此卡死现像!!!
前面调试 浮点数加减法 FPADD_SUB, 一次性通过.
改为调用 浮点数除法 FPDIV, 全速运行, 发现死机, 点停止, 发现死在循环等待上.
. 本帖最后由 LAOXU 于 2023-1-6 10:28 编辑
这一次原因, 应该是我 漏写了 DPTR +1
不是问题
页:
1
[2]