之前误以为STC32G144没问题,是因为测试条件不充分。只有计算0.0 * n = 0.0时才不死机。
计算其它数值会死机。
ai8051u也是这样。 应该发个奖杯 使用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 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换成其他寄存器则没这问题,其他地方都不动
全程中断都是关闭的 EasyLad 发表于 2026-1-5 22:45
把DR8换成其他DR寄存器试试。
用STC32G12K128时发现有个别芯片在执行带有@DR8或@WR10的指令时会有不正常 ...
试过了,表现是一样的。
DR8,DR12,DR16,DR20.....
不加NOP就死机,加了NOP不死机。 EasyLad 发表于 2026-1-5 22:45
把DR8换成其他DR寄存器试试。
用STC32G12K128时发现有个别芯片在执行带有@DR8或@WR10的指令时会有不正常 ...
需要注意:DR8包含R8,R9,R10,R11;WR10包含R10,R11
其中R11为ACC,如果ACC改变会同样改变R11的内容。
乘风飞扬 发表于 2026-1-6 09:46
需要注意:DR8包含R8,R9,R10,R11;WR10包含R10,R11
其中R11为ACC,如果ACC改变会同样改变R11的内容。
这个肯定知道,测试程序也没多大,使用DR8或WR10时已经重新加载了且里面的值完全正确,并且测试程序换到其他芯片上完全没问题,只在那一个芯片上有问题
页:
1
[2]