在中断中调用printf会导致中断重入
malloc之类的也不能调用 原理一样
中断重入?大侠可以给我稍微细讲下吗?这个不太明白。。
类似申请信号量、I/O操作等的阻塞操作都不能用。
因为VxWorks是硬实时操作系统,它的任务调度依赖于时钟中断来进行。一旦有某些中断被阻塞住,极有可能影响任务调度,造成死机。
帮你搜了一下,http://blog.eeworld.net/jifengszf/archive/2009/08/04/4408012.aspx
我觉得说的比较细了
在VxWorks源代码的函数memPartAlignedAlloc内存在这样一行代码
semTake (&partId->sem, WAIT_FOREVER);
它通过获取分区锁来保证内存申请操作的线程互斥,因此,在ISR内调用malloc会导致
OS重复调用调度器函数reschedule出现中断重入。
中断中不可以调用不可重入函数(其中包括printf),可以用logMsg代替printf用。关于可重入和不可重入函数的具体问题楼主可以网上随便一搜很多,看看就明白了。