打印

请教C51问题

[复制链接]
1938|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
邓文焕|  楼主 | 2007-2-1 10:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
lixun00| | 2007-2-1 10:51 | 只看该作者

MULTICALL 多重调用,通常Keil函数不支持重入

这将有可能导致数据被破坏,或者访问外部设备错误.若你确认不会同时调用,可以不用管它

使用特权

评论回复
板凳
xxrrpp2000| | 2007-2-1 11:25 | 只看该作者

指示得很清楚呀~~~~

SEGMENT: ?PR?_IRCVSTR?TEXT1-----被调用的程序段
    CALLER1: ?PR?DISPLAY_INTER?TEXT1-----调用的子函数1
    CALLER2: ?PR?TIME0?TEXT1-----调用的子函数2
由于调用的子函数2是中断服务程序,因此可能出现的情况是:
当Display_Inter调用IRCVSTR时,程序在IRCVSTR中执行,此时发生中断Time0,由于中断服务函数中再次调用IRCVSTR,因此发生重入函数调用.
Keil通常不支持重入,但是也可以用,大概是reent...什么的关键字,而且需要手工设置重入堆栈,很复杂,这里不好说清楚.

以前曾经碰到过类似问题,还是尽量避免重入函数的好.
才疏学浅,一点小意见,仅供参考.

使用特权

评论回复
地板
samuelyu| | 2007-2-1 17:54 | 只看该作者

不记得了;

好象是 C51 的中断服务程序,如果含内部变量,必须声明成重入的;

使用特权

评论回复
5
yongzai| | 2011-5-11 18:46 | 只看该作者
看不懂

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

1

粉丝