QQ624353765 发表于 2024-11-11 19:27:05

C51有关using工作组的问题

本帖最后由 QQ624353765 于 2024-11-11 19:52 编辑




有一个中断分配在第一组工作寄存器中,请问在这个中断中调用一个普通函数,这个普通函数的工作寄存器还是默认的第0组吗

如果在被调用的函数中未使用到局部变量,这个函数是否可以不用在定义using 1了

比如在定义using 1的中断中调用函数,这个函数中只有一句IE=0;,这个函数是不是就必须要在定义using 1了

我是觉得这个函数没有使用的任何工作寄存器组

bkeuqoaq 发表于 2024-11-12 13:51:08

首先using只是一个建议,写了可能等于没写(这点KEIL聪明,当中断函数简单时就会忽略USING),被调用的函数不要使用USING属性,不使用绝对寄存器访问就没问题,一般中断要简短,尽量不调用函数,或调用简单函数,建议没弄懂USING的程序员不要使用USING,可能带来程序运行不正常的问题

QQ624353765 发表于 2024-11-12 14:19:02

bkeuqoaq 发表于 2024-11-12 13:51
首先using只是一个建议,写了可能等于没写(这点KEIL聪明,当中断函数简单时就会忽略USING),被调用的函数不要 ...

你这等于没说吗,你也没弄懂啊?我要的回答是百分百正确,中断中调用函数的工作寄存器组的变化

bkeuqoaq 发表于 2024-11-12 14:28:55

QQ624353765 发表于 2024-11-12 14:19
你这等于没说吗,你也没弄懂啊?我要的回答是百分百正确,中断中调用函数的工作寄存器组的变化 ...

如果中断函数比较复杂,会使用很多寄存器,此时使用USING会效率高,但被中断调用的函数必须使用同一寄存器组(否则参数传递会错误)或不使用寄存器组同时不使用绝对寄存器访问,否则也会出问题,同一优先级的中断可以使用USING相同的寄存器组,
普通函数也可以使用这些委特性,实际很少有人使用,一般只有中断使用,

bkeuqoaq 发表于 2024-11-12 14:35:04

有一个中断分配在第一组工作寄存器中,请问在这个中断中调用一个普通函数,这个普通函数的工作寄存器还是默认的第0组吗
当然是默认的,又没有地方改变这些

如果在被调用的函数中未使用到局部变量,这个函数是否可以不用在定义using 1了
与局部变量没有关系,复杂的调用也可能没有局部变量,最终使用的寄存器少建议不使用using ,因为会浪费RAM,而且对效率没有提升作用

比如在定义using 1的中断中调用函数,这个函数中只有一句IE=0;,这个函数是不是就必须要在定义using 1了
没有必须一说,与你说的也没有关系,可以全程不使用using

我是觉得这个函数没有使用的任何工作寄存器组

tzz1983 发表于 2024-11-12 16:05:37

本帖最后由 tzz1983 于 2024-11-12 16:16 编辑

当中断指定寄存器组时(using 1), 可能被调用的函数链,都要指定寄存器组(using 1)。
没有必要考虑子函数是否用了寄存器组,因为如果没有使用,那指定和不指定又有什么区别呢。
总结就是:按规则办事,一定不会出错。 不按规则出牌,可能会因为自己的细节疏忽而犯错。

另外补充一点:有的汇编指令, 会使用AR1,AR2.... 这种直接地址的方式访问寄存器,所以保险一点,要么就不要用,用了就不要省。

CosyOS 发表于 2024-11-13 01:55:19

本帖最后由 CosyOS 于 2024-11-13 02:06 编辑

Keil C51 using 的使用原则:

1、建议只有中断和被中断调用的自定义函数,才考虑使用 using。
2、通常,所有中断均不能使用 using 0,仅能使用 using 1、2、3。
3、相同优先级的中断可以使用相同的 REGBANK,不同优先级的中断不要使用相同的 REGBANK。
4、被中断调用的自定义函数,如果该函数仅被该中断或与该中断相同优先级的各中断调用(各调用者使用了相同的 REGBANK),
   该函数也应 using 为相同的 REGBANK,或声明为 相对寄存器访问。
5、被中断调用的自定义函数,如果该函数会被不同优先级的中断或任务调用(各调用者使用了不同的 REGBANK),
   该函数必须声明为 相对寄存器访问。

#pragma NOAREGS // 相对寄存器访问
void 被中断调用的函数(void)
{

}
#pragma AREGS // 再恢复为绝对寄存器访问

该函数结束后,要再恢复为 绝对寄存器访问,
否则后面的函数,就都是 相对寄存器访问了。

把握好这些原则,可保证 using 用的顺风顺水,不出问题。




zhaoye818 发表于 2024-11-13 08:05:56

学习了
页: [1]
查看完整版本: C51有关using工作组的问题