请问在中断函数中,加入printf()函数,是不是不可以?

icegrape 2006-07-28 03:06:00
在编串口程序,用tc2.0,结果程序调试总是不成功,去掉中断处理子程序中的printf函数,会少一些错误,这是为什么呢,请高手多多指点哦^_^
...全文
1195 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
gerald_xiao 2006-07-31
  • 打赏
  • 举报
回复
如果printf是中断实现的,由于中断常常不能嵌套,所以会有问题。
根据我的经验:在中断中用printf来打印,如果在移植OS的过程中,printf是基于中断的,那么你的程序有时候可能会死掉,但不是每次必现。后来,我们将printf都改成任务级别,也就是在中断中仅仅向一个任务发一个打印消息过去,后来就运行的非常稳定。欢迎大家一起讨论
yifanernei 2006-07-30
  • 打赏
  • 举报
回复
呵呵,全局变量具体我也记不清是什么了,我只给你个大概的意思,因为很久没有摸过这些东西了,比如说errno就是全局变量

加不加disable()和能不能用printf没有关系的不是吗?

但是加了disable()不是就不会再发生中断了吗?

非要改变中断寄存器的话也是可以的,这在串行通讯应该有相应的功能调用的,可以用int86x()来处理吧应该

http://www.gjwtech.com/ 写串行通讯的程序,这个网站你不应该没有看过吧,上面的知识点应该比我讲的清很多的,你可以去看一下
yifanernei 2006-07-29
  • 打赏
  • 举报
回复
这里你可以用一个全局变量来防止重入

void interrupt prc()
{
if (1 == bIn)
{
return ;
}
bIn = 1;

//....

bIn = 0;
}

不知道这样是不是和你的意思


防止再次中断发生可以也可以在进入中断函数前用
disable()来关中断,在你的函数执行结束前用enable()来打开中断
icegrape 2006-07-29
  • 打赏
  • 举报
回复
printf函数有可能在执行过程中被打断而进入中断函数
-------------------------------------------------------
可是我的中断处理子程序的开始用了disable(),你的意思是说这样就可以用printf吗?
可是好像不可以把
icegrape 2006-07-29
  • 打赏
  • 举报
回复
“printf要用到一些全局的变量”
------------------------------------------------
这个全局变量是指什么呢?是指要显示的变量吗,如果printf显示的并不是全局变量呢?
还是说printf函数本身要用到一些全局变量,是指系统编译器的值吗?
icegrape 2006-07-29
  • 打赏
  • 举报
回复
我的意思是可不可以再中断处理子函数中,改变中断控制寄存器的值,这样可以吗?比如我在处理modem状态变化的中断处理子函数中改变中断控制寄存器的值,使其禁止下次modem中断,可是此时我的modem中断处理子函数并没有执行完,这样可以吗?
bombwang 2006-07-28
  • 打赏
  • 举报
回复
学习学习学习...
icegrape 2006-07-28
  • 打赏
  • 举报
回复
能再问个关于中断的问题吗?
可以在中断处理子程序中改变中断控制寄存器的值吗?
比如在串口中在产生modem中断后,我在modem中断处理子程序中,禁止下次再产生modem中断,可以吗?是不是这个是不允许的呢?
m_nNightmire 2006-07-28
  • 打赏
  • 举报
回复
学习学习学习...
yifanernei 2006-07-28
  • 打赏
  • 举报
回复
中断函数中是不可以调用printf函数的,这样是为了防止函数的重入
即,printf要用到一些全局的变量,但printf函数有可能在执行过程中被打断而进入中断函数
中断函数中再调用printf函数会造成函数重入,有可能导致不能回到正常流程中去

还有一些函数也是同样的道理,只是记不住名字了,pritnf最引人注目了
m_nNightmire 2006-07-28
  • 打赏
  • 举报
回复
应该是可以的
把你的错误信息贴一些出来吧
最好也贴一些代码

70,021

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧