社区
C语言
帖子详情
在中断处理函数中使用printf()为什么不正常?
csdnzzy
2004-08-18 10:20:32
为串口接收建立的一个interrupt,其中使用了printf()函数,每次一触发进入该中断就死机,去掉printf()就正常了。编译器模式为Huge。盼高手指点迷津!
...全文
2085
17
打赏
收藏
在中断处理函数中使用printf()为什么不正常?
为串口接收建立的一个interrupt,其中使用了printf()函数,每次一触发进入该中断就死机,去掉printf()就正常了。编译器模式为Huge。盼高手指点迷津!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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会引用全局的内存分配表。
为什么在
中
断
服务函数
中
不能
使用
printf
函数
如果在
中
断
服务函数
中
调用
printf
来打印调试信息,可能会发生以下结果: 1.打印不完整或者根本无法打印 2.程序能执行,但是行为异常 3.程序无法执行 此时此刻,我只想问一句,为什么?为什么?为什么? 需要分各种...
在
中
断
中
使用
printf
函数导致
中
断
异常
A:
printf
函数是不可重入函数,包含了全局变量的
使用
以及大量循环的
使用
, 而嵌入式
中
的触发
中
断
执行的优先级很高, 会随时触发和打断现有代码运行顺序, 那么加载不可重入函数,会导致
中
断
函数异常, Q:如何在stm...
为何stm32
中
断
处理函数
里不能调用
printf
?
末日在用stm32h750XBHx系列芯片测试其串口的接收
中
断
时候,想在接收
中
断
函数
中
加入
printf
函数,发现程序运行后,如果串口不断接收到数据,pc端的串口助手仅仅出现一次
printf
的打印信息,怀疑自己的程序是不是有问题...
为什么
中
断
处理函数
中
不能
使用
printf
语句
因为
中
断
可能发生在执行任务
中
,因为任务可能是在“malloc”的函数调用
中
,如果ISR调用此相同的不可重入函数,由此产生的行为可能是灾难性的。 不可重入函数是指这样的一类函数,不可以在它还没有返回就再次被...
为什么
中
断
处理函数
中
不能
使用
printf
语句【转】
一个ISR应该避免调用不可重入函数...因为
中
断
可能发生在执行任务
中
,因为任务可能是在“malloc”的函数调用
中
,如果ISR调用此相同的不可重入函数,由此产生的行为可能是灾难性的。 不可重入函数是指这样的一类函数...
C语言
70,037
社区成员
243,243
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章