这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » PIC开发系列问题( 了解乘除法函数对寄存器的占用)

共1条 1/1 1 跳转至

PIC开发系列问题( 了解乘除法函数对寄存器的占用)

助工
2014-10-09 17:36:52     打赏

由于PIC片内RAM仅几十个字节,空间特别宝贵,而Mplab-C编译器对RAM地址具有不释放性,即一个变量使用的地址不能再分配给其它变量。如RAM空间不能满足太多变量的要求,一些变量只能由用户强制分配相同的RAM空间交替使用。而Mplab-C中的乘除法函数需借用RAM空间来存放中间结果,所以如果乘除法函数占用的RAM与用户变量的地址重叠时,就会导致出现不可预测的结果。如果C程序中用到乘除法运算,最好先通过程序机器码的反汇编代码(包含在生成的LST文件中)查看乘除法占用地址是否与其它变量地址有冲突,以免程序跑飞。Mplab-C手册并没有给出其乘除法函数对具体RAM地址的占用情况。例5是乘法函数对0×13、0×14、0×19、0×1A地址占用情况。

例5

部分反汇编代码
#include <pic16c71> 01A7 081F MOVF 1F,W
#include<math.h> 01A8 0093 MOVWF 13
;借用
unsigned long Value @0x1 01A9 0820 MOVF 20,W
char Xm @0x2d; 01AA 0094 MOVWF 14
;借用
void main() 01AB 082D MOVF 2D,W
{Value=20; 01AC 0099 MOVWF 19
;借用
Xm=40; 01AD 019A CLRF1A
;借用
Value=Value*Xm 01AE 235F CALL 035Fh
;调用乘法函数
…… 01AF 1283 BCF 03,5
} 01B0 009F MOVWF 1F
;返回结果低字节
01B1 0804 MOVF 04,W
01B2 00A0 MOVWF 20
;返回结果高字节




共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]