os_trace.c
上传用户:tkwrx3909
上传日期:2015-10-06
资源大小:3310k
文件大小:3k
源码类别:

uCOS

开发平台:

Visual C++

  1. /*
  2. *********************************************************************************************************
  3. *                                               uC/OS-II
  4. *                                        The Real-Time Kernel
  5. *
  6. *                                        Win32 Specific code
  7. *
  8. * This is free software; you can redistribute it and/or
  9. * modify it under the terms of the GNU General Public License
  10. *
  11. * File : OS_TRACE.C
  12. * By   : Vladimir Antonenko
  13. *
  14. *********************************************************************************************************
  15. */
  16. #include "includes.h"
  17. #include "os_trace.h"
  18. /*
  19. *********************************************************************************************************
  20. *                                              GLOBALS
  21. *********************************************************************************************************
  22. */
  23. typedef struct {
  24.     INT32U        Time;
  25.     INT32U        TimeW32;
  26.     INT8U         Object;
  27.     INT8U         Point;
  28.     INT8U         RdyGrp;
  29.     OS_TCB        *TcbCur;
  30.     INT8U         PrioCur;
  31.     OS_TCB        *Tcb;
  32.     OS_EVENT      *Event;
  33.     INT8U         Arg0;
  34.     INT8U         Arg1;
  35.     INT8U         Arg2;
  36. } OS_TRACE;
  37. int        trEnable   = -1;
  38. OS_TRACE   *trData    = NULL;
  39. int        trSlots    = 0;
  40. int        trCount    = 0;
  41. int        trLast     = 0;
  42. /*
  43. *********************************************************************************************************
  44. *                                              OSInitTrace()
  45. * Arguments: Size: Defines the size of the trace buffer.
  46. *********************************************************************************************************
  47. */
  48. void OSInitTrace(int Size)
  49. {
  50.     OS_ENTER_CRITICAL();
  51.     trData  = (OS_TRACE*) malloc( Size * sizeof(OS_TRACE) );
  52.     trSlots = Size;
  53.     trCount = 0;
  54.     trLast  = 0;
  55.     OS_EXIT_CRITICAL();
  56. }
  57. /*
  58. *********************************************************************************************************
  59. *                                                    OSTrace()
  60. *********************************************************************************************************
  61. */
  62. void OSTrace(int object, int point, void *tcb, void *event, int arg0, int arg1, int arg2)
  63. {
  64.     if( trEnable & (1 << object) )
  65.     {
  66.         OS_ENTER_CRITICAL();
  67.         trData[trLast].Time    =  OSTime;
  68.         trData[trLast].TimeW32 =  GetTickCount();
  69.         trData[trLast].Object  =  object;
  70.         trData[trLast].Point   =  point;
  71.         trData[trLast].RdyGrp  =  OSRdyGrp;
  72.         trData[trLast].TcbCur  =  OSTCBCur;
  73.         trData[trLast].PrioCur =  OSPrioCur;
  74.         trData[trLast].Tcb     =  tcb;
  75.         trData[trLast].Event   =  event;
  76.         trData[trLast].Arg0    =  arg0;
  77.         trData[trLast].Arg1    =  arg1;
  78.         trData[trLast].Arg2    =  arg2;
  79.         
  80.         if( ++trLast == trSlots )
  81.             trLast = 0;
  82.         ++trCount;
  83.         OS_EXIT_CRITICAL();
  84.     }
  85. }