lookuper
发表于 2024-11-24 19:45:58
LAOXU 发表于 2024-11-13 04:29
手头没有8H4K64TL芯片,用的是STC8H4K64U开发板,无论外挂哪种库,更换了好多输入数据(包括100),都未发 ...
最近比较忙,没实验,有空试验一下。
1、没使用OS
2、没在中断中使用
lookuper
发表于 2024-11-24 19:47:25
LAOXU 发表于 2024-11-13 04:35
这里给一个以前写的开平方子程序,精度比你的高1bit(带4舍5入功能),供参考
函数没问题,调用默认库是可以正常工作的,使用这个加速库就卡死!
lookuper
发表于 2024-11-24 19:58:03
主程序
void main(void)
{
uint8_t t8,i;
EAXSFR();
EA = 0;
IntSqrt(100);
}
运行会在此处卡死!
LAOXU
发表于 2024-11-25 01:53:53
lookuper 发表于 2024-11-24 19:58
主程序
void main(void)
{
MDU16 V3.0 LIB 库 , 必须硬件仿真或运行, 我想这种低级错误, 你不会犯吧???
请仔细 检查核对 keil C51 仿真设置, 是否确定已设置为硬件仿真, 以及每次仿真均更新程序.
如手头有其他 stc8 类 带 MDU16 的芯片, 可换之进行 这一段测试程序的仿真, 试试.
LAOXU
发表于 2024-11-25 02:02:05
最后, 提一嘴.
在硬件仿真时, 设断点运行到出错前(数据移位操作处), 点击激活反汇编窗口, 再单步运行程序.
看看程序 是进入死循环 还是 跑飞.
LAOXU
发表于 2024-11-25 02:26:53
另外想到一点, stc的仿直器, 通讯速度较快(内部自动选择尽可能高的通讯频率),
我碰到过, 插在PC机 前面板 usb 上仿真, 易死机单步运行也跑飞.
插在PC机 后面 usb 上仿真, 就正常了.
另外, usb 连接线,质量也有讲究, 差的通讯不正常易死机 (官方附送的质量不错)
LAOXU
发表于 2024-11-29 05:54:10
lookuper 发表于 2024-11-24 19:58
主程序
void main(void)
{
仔细观看了你的贴图, 发现程序是卡在回读 MDU16 运算完成标志处,
从而分析判断出, 是以下两个原因造成的.
1. 所用仿真芯片不带 MDU16 模块, 从而无法运行, 读取不到 MDU16 运算完成标志.
2. 使用了 Keil C51自带的软件模拟仿真(无法仿真 MDU16 模块), 所以读取不到 MDU16 运算完成标志.
由于 8H4K64TL芯片自带 MDU16 模块, 所以, 结论只能是你, 设置使用了软件仿真, 来实时仿真 MDU16 功能!!!
1014708854
发表于 2024-12-2 16:29:14
我看就这个里边没有对浮点数的计算
请问浮点数计算是测试有什么问题放弃了吗
LAOXU
发表于 2024-12-2 19:40:28
本帖最后由 LAOXU 于 2024-12-2 19:50 编辑
1014708854 发表于 2024-12-2 16:29
我看就这个里边没有对浮点数的计算
请问浮点数计算是测试有什么问题放弃了吗
...
MDU16 的设计有缺陷 !
注: 不是 MDU16 库设计有问题, MDU16 指令集实际上是很实用的,而是错在将相关寄存器放在了片外xfr中, 使得读写和触发MDU16 指令,
每次都增加了好几个时钟周期(如放在SFR中, 是单周期), 这样, 原本利用 MDU16 指令, 可加快乘除等运算, 结果由于将相关寄存器放在了片外xfr,
使得 mdu16 指令实际执行速度大打折扣, 甚至出现倒挂现像(比如乘法), 执行速度比原软件模拟还慢.
这个库是精简去掉了影响程序执行速度的库函数.
MDU16 , STC 已基本废弃, 新型号 都采用外挂 MDU32C/MDU32D 等, 功能更强, 性能更好.
新产品的设计, STC 推荐采用新型号.
1014708854
发表于 2024-12-14 12:33:37
LAOXU 发表于 2024-12-2 19:40
MDU16 的设计有缺陷 !
注: 不是 MDU16 库设计有问题, MDU16 指令集实际上是很实用的,而是错在将相关寄存 ...
嗯好的了解