[STC单片机] 关于主函数和中断函数同时调用一个子函数的问题

[复制链接]
9211|36
netzhang 发表于 2014-12-9 10:54 | 显示全部楼层
改为可重入的,最好分别用不同的函数。
 楼主| 秋水水天 发表于 2014-12-9 10:59 | 显示全部楼层
我把他们分开了,可重入的不会写呀。
 楼主| 秋水水天 发表于 2014-12-9 11:00 | 显示全部楼层
netzhang 发表于 2014-12-9 10:54
改为可重入的,最好分别用不同的函数。

我把他们分开了,可重入的不会写呀。
myqq12 发表于 2014-12-9 16:33 | 显示全部楼层
可以考虑内联
沈老 发表于 2014-12-9 19:30 | 显示全部楼层
reentrant 的要求比 threadsafe 的要求更加严格.
reentrant 的函数必是 threadsafe 的,
而 threadsafe 的函数未必是 reentrant 的.
 楼主| 秋水水天 发表于 2014-12-9 20:06 | 显示全部楼层
沈老 发表于 2014-12-9 19:30
reentrant 的要求比 threadsafe 的要求更加严格.
reentrant 的函数必是 threadsafe 的,
而 threadsafe 的 ...

我能说不懂吗。。。。。。
 楼主| 秋水水天 发表于 2014-12-9 20:06 | 显示全部楼层
myqq12 发表于 2014-12-9 16:33
可以考虑内联

怎么内联?
wangch_sh 发表于 2014-12-9 20:12 | 显示全部楼层
你可以不管什么重入不重入。如果你可以保证那个函数主程序和中断调用时不互相影响就可以了,就是这个调用了,那个再调用不会发生逻辑上的错误就可以了。
coody 发表于 2014-12-9 20:17 | 显示全部楼层
重入问题,参考3#
hnkf118 发表于 2014-12-9 21:25 | 显示全部楼层
51的话 主要是共享变量重入的问题。 如果只是局部变量,同时调用的话,没有问题的。
 楼主| 秋水水天 发表于 2014-12-10 07:48 | 显示全部楼层
hnkf118 发表于 2014-12-9 21:25
51的话 主要是共享变量重入的问题。 如果只是局部变量,同时调用的话,没有问题的。 ...

只是局部变量的话那个警告也存在吗?我不用管那个警告就好?
ddddd6666 发表于 2014-12-10 07:48 | 显示全部楼层
把子函数放到主函数前面,调用没有问题的
徐大山 发表于 2014-12-10 08:09 来自手机 | 显示全部楼层
内联本质上就是写两个函数;主要是小心数据或状态紊乱
 楼主| 秋水水天 发表于 2014-12-10 08:16 | 显示全部楼层
徐大山 发表于 2014-12-10 08:09
内联本质上就是写两个函数;主要是小心数据或状态紊乱

嗯,应该不会有问题。
 楼主| 秋水水天 发表于 2014-12-10 08:16 | 显示全部楼层
徐大山 发表于 2014-12-10 08:09
内联本质上就是写两个函数;主要是小心数据或状态紊乱

ok
mcu5i51 发表于 2014-12-10 09:27 | 显示全部楼层
其实同时调用了一个函数和同时进入一个函数是不同的,你能保证自己的函数没有同时进入就可以了;
不能保证的话就分开写,或写成可重入的
hnkf118 发表于 2014-12-11 01:20 | 显示全部楼层
秋水水天 发表于 2014-12-10 07:48
只是局部变量的话那个警告也存在吗?我不用管那个警告就好?

函数内没有使用任何外部变量的话。此函数可以被后台程序跟中断程序同时调用,不会报警。记得是不能使用任务 外部变量。当然对51来说还有一个问题, 就是寄存器组必须是一个组,51默认是寄存器0组。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部