log.c 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /*
  2. * log.c
  3. *
  4. * Created on: Nov 7, 2022
  5. * Author: tangm
  6. */
  7. #include "log.h"
  8. #include "usart.h"
  9. #include <stdarg.h>
  10. #include <stdio.h>
  11. #include "ucos_ii.h"
  12. #include "main.h"
  13. #include "udp_send.h"
  14. #include "stdlib.h"
  15. #include "malloc.h"
  16. ///重定向c库函数printf到串口,重定向后可使用printf函数
  17. int fputc(int ch, FILE *f)
  18. {
  19. /* 发送一个字节数据到串口 */
  20. USART_SendData(USART_485, (uint8_t) ch);
  21. /* 等待发送完毕 */
  22. while (USART_GetFlagStatus(USART_485, USART_FLAG_TXE) == RESET);
  23. return (ch);
  24. }
  25. ///重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数
  26. int fgetc(FILE *f)
  27. {
  28. /* 等待串口输入数据 */
  29. while (USART_GetFlagStatus(USART_485, USART_FLAG_RXNE) == RESET);
  30. return (int)USART_ReceiveData(USART_485);
  31. }
  32. static OS_EVENT *logMutex;
  33. uint8_t perr;
  34. void LogPrint(logLevel_t logLevel,const char *file, const char *func, const int line, char * fmt, ...)
  35. {
  36. OSMutexPend(logMutex, 5000, &perr);
  37. if(perr == OS_ERR_NONE)
  38. {
  39. udp_log_start();
  40. va_list args;
  41. va_start(args, fmt);
  42. char buf[LOG_LEN_MAX];
  43. vsnprintf(buf, sizeof(buf), fmt, args);
  44. va_end(args);
  45. char *p=mymalloc(SRAMEX, 1024);
  46. switch (logLevel)
  47. {
  48. #ifdef _LOG_INFO
  49. case LOG_INFO:
  50. sprintf(p,"[%s][%s][%s:%4d] %s\r\n", "INFO", file, func, line, buf);
  51. break;
  52. #endif
  53. #ifdef _LOG_DEBUG
  54. case LOG_DEBUG:
  55. sprintf(p,"[%s][%s][%s:%4d] %s\r\n", "DEBUG",file, func, line, buf);
  56. break;
  57. #endif
  58. #ifdef _LOG_WARN
  59. case LOG_WARN:
  60. sprintf(p,"[%s][%s][%s:%4d] %s\r\n", "WARN", file, func, line, buf);
  61. break;
  62. #endif
  63. case LOG_ERROR:
  64. sprintf(p,"[%s][%s][%s:%4d] %s\r\n", "ERROR",file, func, line, buf);
  65. break;
  66. default:
  67. break;
  68. }
  69. udp_send_printf(p);
  70. myfree(SRAMEX, p);
  71. udp_log_close();
  72. perr = OSMutexPost(logMutex);
  73. }
  74. }
  75. void log_init()
  76. {
  77. logMutex = OSMutexCreate (0, &perr);//创建一个log互斥量
  78. OSTimeDly(100);
  79. }