中断里面为什么不能用printf 啊

happy0104   2010-5-4 13:19 楼主
中断里面为什么不能用printf 啊

回复评论 (5)

在中断中调用printf会导致中断重入
malloc之类的也不能调用 原理一样
点赞  2010-5-4 13:23
中断重入?大侠可以给我稍微细讲下吗?这个不太明白。。
点赞  2010-5-4 21:13
类似申请信号量、I/O操作等的阻塞操作都不能用。
因为VxWorks是硬实时操作系统,它的任务调度依赖于时钟中断来进行。一旦有某些中断被阻塞住,极有可能影响任务调度,造成死机。
帮你搜了一下,http://blog.eeworld.net/jifengszf/archive/2009/08/04/4408012.aspx
我觉得说的比较细了
点赞  2010-5-6 21:26
在VxWorks源代码的函数memPartAlignedAlloc内存在这样一行代码

semTake (&partId->sem, WAIT_FOREVER);

它通过获取分区锁来保证内存申请操作的线程互斥,因此,在ISR内调用malloc会导致

OS重复调用调度器函数reschedule出现中断重入。

点赞  2010-5-14 15:49
中断中不可以调用不可重入函数(其中包括printf),可以用logMsg代替printf用。关于可重入和不可重入函数的具体问题楼主可以网上随便一搜很多,看看就明白了。
点赞  2010-6-28 00:07
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复