TimerTask.c 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /*
  2. * Brief: Micellaneous Ticks increment every 1 second.
  3. Record system power on times.
  4. * Author: Jimbo_Zhang@outlook.com
  5. * Date: 2019-9-16
  6. */
  7. #include "TimerTask.h"
  8. #include "time.h"
  9. #include <stdint.h>
  10. #include "main.h"
  11. #include <signal.h>
  12. static void ProcessTimerReq (void);
  13. //g_BMCInfo.CurTimerTick increment in port.c/xPortSysTickHandler().
  14. // void *TimerTask( void *pvParameters )
  15. // {
  16. // uint32_t preTimerTick = g_BMCInfo.CurTimerTick;
  17. // printf("TimerTask start...\n");
  18. // while(1)
  19. // {
  20. // preTimerTick = g_BMCInfo.CurTimerTick;
  21. // g_BMCInfo.SELTimeSecond++;
  22. // if(g_BMCInfo.SensorSharedMem.SensorTick < 0xffffffff)
  23. // g_BMCInfo.SensorSharedMem.SensorTick++;
  24. // if(g_BMCInfo.SenConfig.PowerOnTick < 0xffffffff)
  25. // g_BMCInfo.SenConfig.PowerOnTick++;
  26. // if(g_BMCInfo.SenConfig.SysResetTick < 0xffffffff)
  27. // g_BMCInfo.SenConfig.SysResetTick++;
  28. // g_BMCInfo.CurTimerSecond++;
  29. // if(g_BMCInfo.PowerGoodFlag && (g_BMCInfo.CurTimerSecond%60 == 0)) // 1minute
  30. // {
  31. // g_BMCInfo.BootValidMinutes++;
  32. // g_BMCInfo.TotalBootValidMinutes++;
  33. // }
  34. // ProcessTimerReq();
  35. // sleep(1);
  36. // }
  37. // }
  38. void TimerTask( int signo ) //signal handler
  39. {
  40. //printf("TimerTask start...\n");
  41. switch(signo)
  42. {
  43. case SIGALRM:
  44. //preTimerTick = g_BMCInfo.CurTimerTick;
  45. //g_BMCInfo.SELTimeSecond++;
  46. if(g_BMCInfo.SensorSharedMem.SensorTick < 0xffffffff)
  47. g_BMCInfo.SensorSharedMem.SensorTick++;
  48. if(g_BMCInfo.SenConfig.PowerOnTick < 0xffffffff)
  49. g_BMCInfo.SenConfig.PowerOnTick++;
  50. if(g_BMCInfo.SenConfig.SysResetTick < 0xffffffff)
  51. g_BMCInfo.SenConfig.SysResetTick++;
  52. g_BMCInfo.CurTimerSecond++;
  53. g_BMCInfo.CurTimerTick++;
  54. if(g_BMCInfo.PowerGoodFlag && (g_BMCInfo.CurTimerSecond%60 == 0)) // 1minute
  55. {
  56. g_BMCInfo.BootValidMinutes++;
  57. g_BMCInfo.BootValidMinutesCount++;
  58. if((g_BMCInfo.BootValidMinutesCount%POH_MINS_PER_COUNT) == 0)
  59. {
  60. g_BMCInfo.BootValidMinutesCount = 0;
  61. g_BMCInfo.IpmiConfig.totalRunTimeCount++;
  62. FlushIPMIToFlash();
  63. }
  64. }
  65. ProcessTimerReq();
  66. break;
  67. }
  68. }
  69. /**
  70. *@fn ProcessTimerReq
  71. *@brief Executes Timer task function for every one second
  72. *@return none
  73. */
  74. static void ProcessTimerReq (void)
  75. {
  76. int i;
  77. for (i = 0; i < g_BMCInfo.TimerTaskTblSize; i++)
  78. {
  79. if (0 == (g_BMCInfo.CurTimerTick % g_BMCInfo.TimerTaskTbl [i].NumSecs))
  80. {
  81. g_BMCInfo.TimerTaskTbl [i].TimerFn ();
  82. }
  83. }
  84. return;
  85. }