首頁  >  問答  >  主體

c++ - 一段c代码没看明白

有一段freerots里面的代码,第3,4,5,7行我没看明白,有朋友能帮忙一下吗?尤其是那个“@”。

/* Allocate the memory for the heap. */
#if configUSE_HEAP_SECTION_NAME && configCOMPILER==configCOMPILER_ARM_IAR /* << EST */
  #pragma language=extended
  #pragma location = configHEAP_SECTION_NAME_STRING
  static uint8_t ucHeap[configTOTAL_HEAP_SIZE] @ configHEAP_SECTION_NAME_STRING;
#elif configUSE_HEAP_SECTION_NAME
  static uint8_t __attribute__((section (configHEAP_SECTION_NAME_STRING))) ucHeap[configTOTAL_HEAP_SIZE];
#else
static uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
#endif
PHPzPHPz2714 天前560

全部回覆(3)我來回復

  • 伊谢尔伦

    伊谢尔伦2017-04-17 13:08:48

    首先 #if 的條件編譯就不說了。
    #pragma__atribute__ 都是編譯器的預處理指令。
    #pragma location 和後面一句是 IAR編譯器有關的預處理指令,這兩句的目的是把陣列 ucHeap 放到指定的一個位址。基本文法就是,#pragam location=地址变量 @ 地址具體文法請見http://ftp.iar.se/WWWfiles/arm/webic/doc/EWARM_DevelopmentGuide.ENU.pdf “Controlling data and function placement in memory”(218頁)那一節
    __attribute__ section 這句話的意思是把這個陣列放到指定的段落中。這個屬於 GNU 編譯器的編譯屬性。

    所以這段程式碼的意思是,定義一個陣列 ucHeap 然後根據配置決定是否指定這個陣列所在的位址

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-17 13:08:48

    這應該都是編譯器的擴充功能和語法,尤其是那個#pragma和__attribute__,查一下這是什麼平台的程式碼,用的什麼編譯器,然後去查編譯器文檔吧

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 13:08:48

    就是可以把變數集中放到一個段。例如,經常存取的資料放一起,那麼快取會更加有效。

    回覆
    0
  • 取消回覆