在中断处理函数中使用printf()为什么不正常?

csdnzzy 2004-08-18 10:20:32
为串口接收建立的一个interrupt,其中使用了printf()函数,每次一触发进入该中断就死机,去掉printf()就正常了。编译器模式为Huge。盼高手指点迷津!
...全文
2085 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
BluntBlade 2004-09-02
  • 打赏
  • 举报
回复
使用缓冲区保存输出信息是比较好的做法。
kb 2004-09-02
  • 打赏
  • 举报
回复
厉害,这些东西怎么书本上都查不到呢。

想顺便问以下,如果在中断里面,进行读写文件会不会出问题呢?
line() , lineto() 这些函数是不是也是不可重入函数呢。

我已经被这些问题折磨了3个星期了。
blh 2004-08-24
  • 打赏
  • 举报
回复
Because printf call is a type of I/O operation, and I/O operation will be implemented via interruption of I/O hardware device.
FoxMale007 2004-08-24
  • 打赏
  • 举报
回复
在中断里,我的建议是采用直接写屏输出
这样就OK了

printf是调用中断的,可能在中断中调用其它中断好象有问题?尤其对于时间中断?
csdnzzy 2004-08-23
  • 打赏
  • 举报
回复
终于发现了一个治标的解决办法:把出问题的文件代码中所有的getchar()函数去掉,就可以在中断中正常使用printf()了。幸好getchar()只是调试时用。
仍然不很明白这个问题的根本原因,望各位高手朋友继续多指点,我一直想会不会和编译器(TurboC2.0和3.0)的设置有关系。

huangyang88 2004-08-21
  • 打赏
  • 举报
回复
这些都是底层开发的吗
LoveCreatesBeauty 2004-08-21
  • 打赏
  • 举报
回复
学习
Areslee 2004-08-21
  • 打赏
  • 举报
回复
在这里最关键的问题不是不可重入--虽然它是一个重要的原因
更关键的是在中断中应该减少对栈的使用,否则很可能因为当前客户程序没有提供足够的栈空间引起崩溃
csdnzzy 2004-08-18
  • 打赏
  • 举报
回复
由于还涉及到多个按键的响应,而且主体程序已定形,改用在主循环中查询的办法太困难了。
以前在时钟/定时器的CTC0中断中使用printf()也是不行,后来发现把编译器模式改为Huge就好了,不知道这次怎么不行了。
wwwooowww 2004-08-18
  • 打赏
  • 举报
回复
长见识。这些东西在哪里了解?
柯本 2004-08-18
  • 打赏
  • 举报
回复
DOS 是不持重入的,改用int 10 或直接硬件屏幕输出
cputs或cprintf应可以
sekelon 2004-08-18
  • 打赏
  • 举报
回复
比如在中断中只是将串口中接收到的字符串存入缓冲buffer中,再将接收标志置为真,在主循环中判断接收标志为真时显示buffer中的内容就可以了
sekelon 2004-08-18
  • 打赏
  • 举报
回复
不要在中断中使用这些函数,中断函数内的操作尽可能的短小和简单,类似于一些标志量的置位等赋值操作就可以了,至于printf等显示处理的话在大循环中通过判断表质量的方式来完成
北极猩猩 2004-08-18
  • 打赏
  • 举报
回复
“DOS 是不持重入的”
就是因为这个。

因为printf的实现是使用了DOS中断int 13的功能,因此,它是不能在中断处理函数中使用的。
KingI 2004-08-18
  • 打赏
  • 举报
回复
学习
北极猩猩 2004-08-18
  • 打赏
  • 举报
回复
"DOS 是不持重入的"

问题就在这里,因为printf的实现使用了DOS中断的功能,因此在中断处理函数中使用就会导致中断重入,因而造成问题
ma100 2004-08-18
  • 打赏
  • 举报
回复
不可重入函数是指这样的一类函数,不可以在它还没有返回就再次被调用。例如printf,malloc,free等都是不可重入函数。因为信号可能在任何时候发生,例如在printf执行过程中,因此不能在信号处理函数里调用printf,否则printf将会被重入。

函数不可重入大多数是因为在函数中引用了全局变量。例如,printf会引用全局变量stdout,malloc,free会引用全局的内存分配表。

70,037

社区成员

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

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