dynmem_sample.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /*
  2. * Copyright (c) 2006-2018, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2018-08-24 yangjie the first version
  9. */
  10. /*
  11. * 程序清单:动态内存管理例程
  12. *
  13. * 这个程序会创建一个动态的线程,这个线程会动态申请内存并释放
  14. * 每次申请更大的内存,当申请不到的时候就结束
  15. */
  16. #include <rtthread.h>
  17. #define THREAD_PRIORITY 25
  18. #define THREAD_STACK_SIZE 512
  19. #define THREAD_TIMESLICE 5
  20. /* 线程入口 */
  21. void thread1_entry(void *parameter)
  22. {
  23. int i;
  24. char *ptr = RT_NULL; /* 内存块的指针 */
  25. for (i = 0; ; i++)
  26. {
  27. /* 每次分配 (1 << i) 大小字节数的内存空间 */
  28. ptr = rt_malloc(1 << i);
  29. /* 如果分配成功 */
  30. if (ptr != RT_NULL)
  31. {
  32. rt_kprintf("get memory :%d byte\n", (1 << i));
  33. /* 释放内存块 */
  34. rt_free(ptr);
  35. rt_kprintf("free memory :%d byte\n", (1 << i));
  36. ptr = RT_NULL;
  37. }
  38. else
  39. {
  40. rt_kprintf("try to get %d byte memory failed!\n", (1 << i));
  41. return;
  42. }
  43. }
  44. }
  45. int dynmem_sample(void)
  46. {
  47. rt_thread_t tid;
  48. /* 创建线程1 */
  49. tid = rt_thread_create("thread1",
  50. thread1_entry, RT_NULL,
  51. THREAD_STACK_SIZE,
  52. THREAD_PRIORITY,
  53. THREAD_TIMESLICE);
  54. if (tid != RT_NULL)
  55. rt_thread_startup(tid);
  56. return 0;
  57. }
  58. /* 导出到 msh 命令列表中 */
  59. MSH_CMD_EXPORT(dynmem_sample, dynmem sample);