RL78 系统库函数重入问题咨询

专家好:

IDE: CS+ CACX V4.00.01 / Win10

chip:  R5F10WMG(RL78/L13)

RL78代码运行过程中偶尔发现主函数中RAM变量被改变,单步仿真后发现是定时器中断函数中有 乘/除法操作导致。屏蔽此语句后 结果正确。请问此情况是什么原因导致的?如何从根本上解决此问题?谢谢!

备注:

1. 正常数组累加取反结果应为0xFFFFFFFF, 异常时结果却为0xFFFFFF00 (最后一个字节数据被改变);

2. 中断函数不只有 乘/除操作会影响,类似a+=b函数也会有相同问题。查看汇编代码有调用系统库函数

@@lsadd, @@lscom等;
 
3.屏蔽中断函数里 乘/除操作或a+=b后, 数据累加取反结果正确;
4.编译器禁止优化,问题依旧;

 

请问此情况是什么原因导致的?如何从根本上解决此问题?谢谢!

Parents Reply
  • Hi Xu:

    请问这种问题在什么情况下可以复现?

    1.主函数里对unsigned long数组做累加取反操作, 定时器中断里做 a+=b或乘/除操作

    程序中的出现问题的变量是全局变量还是局部变量?

    2.全局变量

    地址分配是奇地址?还是偶地址?

    3.全局变量定义在奇地址和偶地址,问题相同

Children