Printf.c
上传用户:zbk8730
上传日期:2017-08-10
资源大小:12168k
文件大小:2k
源码类别:

uCOS

开发平台:

C/C++

  1. //********************************************************************
  2. //OSPrintf post message to UartQ
  3. //TaskUart send message to Uart from UartQ
  4. //tangxiaofeng xidian 503
  5. //********************************************************************
  6. #include "2440lib.h"
  7. #include   "config.h" 
  8. #include <stdarg.h>
  9. #include "ucos_ii.h"
  10. #include <stdio.h>
  11. #include "app_cfg.h"
  12. #define UartMsgNum  25
  13. #define UartMsgBufLengh 100
  14. OS_STK TaskUartStk [TaskUartStkLengh];       // Define the TaskUart stack 
  15. static OS_MEM *pUartMem;
  16. static INT8U  UartBuf[UartMsgNum][UartMsgBufLengh];
  17. static OS_EVENT *pUart_Q;
  18. static void *MsgUart[UartMsgNum];
  19. void OSPrintfInit(void)
  20. {   
  21. INT8U err;
  22. pUartMem=OSMemCreate(UartBuf,UartMsgNum,UartMsgBufLengh,&err);//Create a mem for Uart post Msg
  23. pUart_Q=OSQCreate(&MsgUart[0],UartMsgNum);//Create a Quen for Uart
  24. OSTaskCreate(TaskUart,(void*)0,&TaskUartStk[TaskUartStkLengh-1],TaskUartPrio);//Creat a Task to sent Msg to Uart
  25. }
  26. void OSPrintf(const char *fmt,...)//post massage to UartQ
  27. {
  28.     
  29.     INT8U *pUartBuf;
  30.     INT8U err;
  31.     va_list ap;
  32.     
  33.     pUartBuf=OSMemGet(pUartMem,&err);//Reqire a Mem for Msg
  34.     va_start(ap,fmt);
  35.     vsprintf(pUartBuf,fmt,ap);//Msg formate
  36.     va_end(ap);
  37.     //Uart_SendString(string);
  38.     OSQPost(pUart_Q,pUartBuf);//Post Msg
  39. }
  40. void TaskUart(void *pdata) //send message to uart from uartQ
  41. {
  42.   
  43. INT8U *pUartMsg;
  44. INT8U err;
  45. pdata=pdata;
  46. while(1)
  47. {
  48.     pUartMsg=OSQAccept(pUart_Q,&err);//Accept the Msg from Qene; no wait 
  49. while(pUartMsg)
  50. {
  51. Uart_SendString(pUartMsg);//seng str to Uart
  52. OSMemPut(pUartMem,pUartMsg);
  53. pUartMsg=OSQAccept(pUart_Q,&err);//free Mem
  54. }
  55. OSTimeDly(OS_TICKS_PER_SEC/5);
  56.     }
  57. }