2
0

cpu_usage_cmd.c 1.3 KB

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