大家好,为了方便向串口打印各种数据类型,本人对printf()函数所调用的fput()进行了重定向。本人程序是基于UCOS-II的,考虑到不同任务需要向串口打印数据,就想到了可重入问题。所以我在对fputc()重定向时在函数入口和出口时使用了信号量对串口资源进行保护。本人对printf()的原理不是了解特别清楚,因为在标准C语言中printf中的stdout是不可重入的。和大家一起探讨下,我的做法是否解决了当前应用程序多任务下的可重入问题。欢迎各位进来讨论,发表意见,多多指导,共同学习。谢谢!int fputc(int ch, FILE *f)
{
INT8U err;
OSSemPend(SharedUSARTSem, 0, &err);
USART_SendData(USART2, (INT8U) ch);
while (USART_GetFlagStatus(USART2, USART_FLAG_TXE) != SET);
err = OSSemPost(SharedUSARTSem);
return (ch);
}
|