mem_test.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #include <stdint.h>
  2. #include <rthw.h>
  3. #include <rtthread.h>
  4. void mem_test(uint32_t address, uint32_t size )
  5. {
  6. uint32_t i;
  7. rt_kprintf("memtest,address: 0x%08X size: 0x%08X\r\n", address, size);
  8. /**< 8bit test */
  9. {
  10. uint8_t * p_uint8_t = (uint8_t *)address;
  11. for(i=0; i<size/sizeof(uint8_t); i++)
  12. {
  13. *p_uint8_t++ = (uint8_t)i;
  14. }
  15. p_uint8_t = (uint8_t *)address;
  16. for(i=0; i<size/sizeof(uint8_t); i++)
  17. {
  18. if( *p_uint8_t != (uint8_t)i )
  19. {
  20. rt_kprintf("8bit test fail @ 0x%08X\r\nsystem halt!!!!!",(uint32_t)p_uint8_t);
  21. while(1);
  22. }
  23. p_uint8_t++;
  24. }
  25. rt_kprintf("8bit test pass!!\r\n");
  26. }
  27. /**< 16bit test */
  28. {
  29. uint16_t * p_uint16_t = (uint16_t *)address;
  30. for(i=0; i<size/sizeof(uint16_t); i++)
  31. {
  32. *p_uint16_t++ = (uint16_t)i;
  33. }
  34. p_uint16_t = (uint16_t *)address;
  35. for(i=0; i<size/sizeof(uint16_t); i++)
  36. {
  37. if( *p_uint16_t != (uint16_t)i )
  38. {
  39. rt_kprintf("16bit test fail @ 0x%08X\r\nsystem halt!!!!!",(uint32_t)p_uint16_t);
  40. while(1);
  41. }
  42. p_uint16_t++;
  43. }
  44. rt_kprintf("16bit test pass!!\r\n");
  45. }
  46. /**< 32bit test */
  47. {
  48. uint32_t * p_uint32_t = (uint32_t *)address;
  49. for(i=0; i<size/sizeof(uint32_t); i++)
  50. {
  51. *p_uint32_t++ = (uint32_t)i;
  52. }
  53. p_uint32_t = (uint32_t *)address;
  54. for(i=0; i<size/sizeof(uint32_t); i++)
  55. {
  56. if( *p_uint32_t != (uint32_t)i )
  57. {
  58. rt_kprintf("32bit test fail @ 0x%08X\r\nsystem halt!!!!!",(uint32_t)p_uint32_t);
  59. while(1);
  60. }
  61. p_uint32_t++;
  62. }
  63. rt_kprintf("32bit test pass!!\r\n");
  64. }
  65. /**< 32bit Loopback test */
  66. {
  67. uint32_t * p_uint32_t = (uint32_t *)address;
  68. for(i=0; i<size/sizeof(uint32_t); i++)
  69. {
  70. *p_uint32_t = (uint32_t)p_uint32_t;
  71. p_uint32_t++;
  72. }
  73. p_uint32_t = (uint32_t *)address;
  74. for(i=0; i<size/sizeof(uint32_t); i++)
  75. {
  76. if( *p_uint32_t != (uint32_t)p_uint32_t )
  77. {
  78. rt_kprintf("32bit Loopback test fail @ 0x%08X", (uint32_t)p_uint32_t);
  79. rt_kprintf(" data:0x%08X \r\n", (uint32_t)*p_uint32_t);
  80. rt_kprintf("system halt!!!!!",(uint32_t)p_uint32_t);
  81. while(1);
  82. }
  83. p_uint32_t++;
  84. }
  85. rt_kprintf("32bit Loopback test pass!!\r\n");
  86. }
  87. }
  88. #ifdef RT_USING_FINSH
  89. #include <finsh.h>
  90. FINSH_FUNCTION_EXPORT(mem_test, mem_test(0xA0000000, 0x00100000) );
  91. #endif