如果 改进编译器,将每级中断保护占用的 2个Rn寄存器,改为占用 1个。
则C程序中,能使用的Rn寄存器, 增加到 6个,这样,建议参数设置格式如下:
参数: STK00, STK01, STK02, STK03, STK04, STK05 ......
镜像: R0 , R1 , R2 , R3
函数参数传递:
参数先依次 放入R0~R3中,余下的参数,依次放入STK04, STK05 ...... 中。
函数返回 放R0~R3中。
例如: long IMUL (int a, long b);
a --> R0, R1
b --> R2, R3, STK04, STK05
返回 --> R0, R1, R2, R3
这样做的好处,不但子程序调用前入参速度加快,更能让库函数提高优化程度。并且像 V2核的 MCU, 带硬件乘除器,但相关特殊寄存器放在 BANK1 中,如入参放在 STKxx 中,来回的BANK切换折腾,挺消耗ROM容量和影响运行速度的,放在 Rn中, 能大大地简化程序,加快程序运行速度。
另外,函数返回参数 程序也相应简化,回送速度也加快,因为 Rn参数送至 变量,明显比 STKxx参数送至 变量 ,执行效率要高许多!
至于 暂时未用,空出的 STK00, STK01, STK02, STK03 这 4个字节,在库函数中,作为中间变量使用(不用再格外增加临时变量)。
|