对于OTP单片机来说,设计上一般都是遵循够用,经济为原则,一般配备的RAM空间比较小。为了能够尽量节省空间,在运算不交叉的状态下,全局变量是可以复用,在不改变变量名称的状态下,mini-c支持类似联合体的方法去复用内存空间。
不多说上代码。
DWORD mul_t4;/*定义名字*/
WORD mul_x2;
WORD mul_y2;
void Word_Mul_Word (void)
{ // mul_t4[D] = mul_x2[W] * mul_y2[W]
mul_t4$3 = 0;
mul_t4$2 = 0;
BYTE cnt;
cnt = 16;
do
{
mul_x2 >>= 1;
if (CF)
{
mul_t4 += (mul_y2 << 16);
}
mul_t4 >>>= 1;
} while (--cnt);
}
DWORD & div_src4=mul_t4;/*div_src4和mul_t4使用相同的地址空间,但是可以有各种的名称*/
WORD & div_val2=mul_x2;
WORD & div_res2=mul_y2;
void DWord_Div_Word (void)
{ // div_src4[D] / div_val2[W] = div_src4[D] * div_val2[W] + div_res2[W]
BYTE div_cnt, div_tmp;
div_cnt = 0;
div_res2 = 0;
do
{
div_src4 <<= 1;
div_res2 <<<= 1;
div_tmp <<<= 1;
div_cnt++;
A = (div_res2 - div_val2) >> 8;
if (div_tmp.0 || ! CF)
{
div_res2$1 = A;
div_res2$0 -= div_val2$0;
div_src4.0 = 1;
}
} while (! div_cnt.5);
}
/*两个函数使用了不同的变量名字,但是内存使用了同一个空间*/