test_attr.c 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include "unity.h"
  2. #include "esp_attr.h"
  3. #include "esp_log.h"
  4. #include "soc/soc.h"
  5. static __NOINIT_ATTR uint32_t s_noinit;
  6. static RTC_NOINIT_ATTR uint32_t s_rtc_noinit;
  7. static RTC_DATA_ATTR uint32_t s_rtc_data;
  8. static RTC_RODATA_ATTR uint32_t s_rtc_rodata;
  9. static RTC_FAST_ATTR uint32_t s_rtc_force_fast;
  10. static RTC_SLOW_ATTR uint32_t s_rtc_force_slow;
  11. extern int _rtc_noinit_start;
  12. extern int _rtc_noinit_end;
  13. extern int _rtc_data_start;
  14. extern int _rtc_data_end;
  15. extern int _noinit_start;
  16. extern int _noinit_end;
  17. extern int _rtc_force_fast_start;
  18. extern int _rtc_force_fast_end;
  19. extern int _rtc_force_slow_start;
  20. extern int _rtc_force_slow_end;
  21. static bool data_in_segment(void *ptr, int *seg_start, int *seg_end)
  22. {
  23. return ((intptr_t)ptr < (intptr_t)seg_end) && \
  24. ((intptr_t)ptr >= (intptr_t)seg_start);
  25. }
  26. TEST_CASE("Attributes place variables into correct sections", "[ld]")
  27. {
  28. TEST_ASSERT(data_in_segment(&s_noinit, &_noinit_start, &_noinit_end));
  29. TEST_ASSERT(data_in_segment(&s_rtc_noinit, &_rtc_noinit_start, &_rtc_noinit_end));
  30. TEST_ASSERT(data_in_segment(&s_rtc_data, &_rtc_data_start, &_rtc_data_end));
  31. TEST_ASSERT(data_in_segment(&s_rtc_rodata, &_rtc_data_start, &_rtc_data_end));
  32. TEST_ASSERT(data_in_segment(&s_rtc_force_fast, &_rtc_force_fast_start, &_rtc_force_fast_end));
  33. TEST_ASSERT(data_in_segment(&s_rtc_force_slow, &_rtc_force_slow_start, &_rtc_force_slow_end));
  34. #ifndef CONFIG_ESP32_RTCDATA_IN_FAST_MEM
  35. TEST_ASSERT(data_in_segment(&s_rtc_data, (int*) SOC_RTC_DATA_LOW, (int*) SOC_RTC_DATA_HIGH));
  36. TEST_ASSERT(data_in_segment(&s_rtc_rodata, (int*) SOC_RTC_DATA_LOW, (int*) SOC_RTC_DATA_HIGH));
  37. TEST_ASSERT(data_in_segment(&s_rtc_noinit, (int*) SOC_RTC_DATA_LOW, (int*) SOC_RTC_DATA_HIGH));
  38. #else
  39. TEST_ASSERT(data_in_segment(&s_rtc_data, (int*) SOC_RTC_DRAM_LOW, (int*) SOC_RTC_DRAM_HIGH));
  40. TEST_ASSERT(data_in_segment(&s_rtc_rodata, (int*) SOC_RTC_DRAM_LOW, (int*) SOC_RTC_DRAM_HIGH));
  41. TEST_ASSERT(data_in_segment(&s_rtc_noinit, (int*) SOC_RTC_DRAM_LOW, (int*) SOC_RTC_DRAM_HIGH));
  42. #endif
  43. TEST_ASSERT(data_in_segment(&s_rtc_force_fast, (int*) SOC_RTC_DRAM_LOW, (int*) SOC_RTC_DRAM_HIGH));
  44. TEST_ASSERT(data_in_segment(&s_rtc_force_slow, (int*) SOC_RTC_DATA_LOW, (int*) SOC_RTC_DATA_HIGH));
  45. }