c++ - 一段c代码没看明白
PHPz
PHPz 2017-04-17 13:06:48
0
3
619

有一段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
PHPz
PHPz

学习是最好的投资!

全部回覆(3)
伊谢尔伦

首先 #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 然後根據配置決定是否指定這個陣列所在的位址

巴扎黑

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

大家讲道理

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板