? ? ? ? ?对于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); } /*两个函数使用了不同的变量名字,但是内存使用了同一个空间*/
|