cpu_usage_cmd.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /*
  2. * SPDX-License-Identifier: Apache-2.0
  3. *
  4. * Change Logs:
  5. * Date Author Notes
  6. * 2020-12-04 tyx first implementation
  7. * 2021-01-17 Meco Man beautify cmd
  8. */
  9. #include <stdlib.h>
  10. #include "cpu_usage.h"
  11. static volatile rt_thread_t tid;
  12. static void load_thread(void *param)
  13. {
  14. while (tid != RT_NULL && (int)tid->user_data)
  15. {
  16. while ((int)tid->user_data >= rt_tick_get() % 100);
  17. rt_thread_delay(1);
  18. }
  19. tid = RT_NULL;
  20. }
  21. void cpu_usage_msh(int argc, char *argv[])
  22. {
  23. if (argc == 3 && rt_strcmp(argv[1], "-l") == 0)
  24. {
  25. if (tid)
  26. {
  27. tid->user_data = strtoul(argv[2], RT_NULL, 10);
  28. }
  29. else
  30. {
  31. tid = rt_thread_create("usage", load_thread, RT_NULL, 256,
  32. RT_THREAD_PRIORITY_MAX - 2, 20);
  33. if (tid == RT_NULL)
  34. {
  35. rt_kprintf("create thread failed.");
  36. }
  37. tid->user_data = strtoul(argv[2], RT_NULL, 10);
  38. rt_thread_startup(tid);
  39. }
  40. rt_kprintf("CPU usage adjusted to %d%c\n", tid->user_data, '%');
  41. }
  42. else if (argc == 1)
  43. {
  44. rt_kprintf("cpu: %d\n", (int)cpu_load_average());
  45. }
  46. else
  47. {
  48. rt_kprintf("%s\n", argv[0]);
  49. }
  50. }
  51. MSH_CMD_EXPORT_ALIAS(cpu_usage_msh, usage, cpu usage);