health 发表于 2026-1-5 16:02:27

最新测试结果是全部ai8051u和STC32G144都有这个问题。

之前误以为STC32G144没问题,是因为测试条件不充分。只有计算0.0 * n = 0.0时才不死机。
计算其它数值会死机。
ai8051u也是这样。

Ayb_ice 发表于 2026-1-5 16:12:53

应该发个奖杯

health 发表于 2026-1-5 20:13:56

使用MOV DRk,DRk保存结果不会死机。
使用MOV @DRk,WRj保存结果会死机。

MOV      DR8,fc?040          ;参数fc
MOV      DMAIR,#0x1E         ;DR4 = DR4 * DR0
MOV      DR0,DR4
MOV      @DR8+0x2,WR2      ;保存计算结果
MOV      @DR8,WR0            
CLR LED
RET

EasyLad 发表于 2026-1-5 22:45:19

health 发表于 2026-1-5 20:13
使用MOV DRk,DRk保存结果不会死机。
使用MOV @DRk,WRj保存结果会死机。

把DR8换成其他DR寄存器试试。
用STC32G12K128时发现有个别芯片在执行带有@DR8或@WR10的指令时会有不正常现象,大约有两三千分之一的概率,当时怀疑是制作工艺的问题,因为换其他芯片又都正常,不正常的每个芯片表现又不一样,具体表现如下:
现象1:一芯片在执行MOV WR0,@WR10+K或MOV WR0,@DR8+K时会改变WR20的值,把WR10或DR8换成其他寄存器则没这问题,其他地方都不动
现象2:另一芯片在执行LJMP @WR10或EJMP @DR8时会死机或复位,复位时复位源为执行到无效的指令,也是把WR10或DR8换成其他寄存器则没这问题,其他地方都不动
全程中断都是关闭的

health 发表于 2026-1-5 23:40:44

EasyLad 发表于 2026-1-5 22:45
把DR8换成其他DR寄存器试试。
用STC32G12K128时发现有个别芯片在执行带有@DR8或@WR10的指令时会有不正常 ...

试过了,表现是一样的。
DR8,DR12,DR16,DR20.....
不加NOP就死机,加了NOP不死机。

乘风飞扬 发表于 2026-1-6 09:46:00

EasyLad 发表于 2026-1-5 22:45
把DR8换成其他DR寄存器试试。
用STC32G12K128时发现有个别芯片在执行带有@DR8或@WR10的指令时会有不正常 ...
需要注意:DR8包含R8,R9,R10,R11;WR10包含R10,R11
其中R11为ACC,如果ACC改变会同样改变R11的内容。




EasyLad 发表于 2026-1-6 12:11:54

乘风飞扬 发表于 2026-1-6 09:46
需要注意:DR8包含R8,R9,R10,R11;WR10包含R10,R11
其中R11为ACC,如果ACC改变会同样改变R11的内容。



这个肯定知道,测试程序也没多大,使用DR8或WR10时已经重新加载了且里面的值完全正确,并且测试程序换到其他芯片上完全没问题,只在那一个芯片上有问题
页: 1 [2]
查看完整版本: 关于TFPU的使用方式,写入DMAIR后需跟随NOP指令。