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

 罗丝012 发布于 2022-11-04 20:19

有一段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
3 个回答
  • 就是可以把变量集中放到一个段中。比如,经常访问的数据放一起,那么缓存会更加有效。

    2022-11-08 08:43 回答
  • 这应该都是编译器的扩展功能和语法,尤其是那个#pragma和__attribute__,查一下这是什么平台的代码,用的什么编译器,然后去查编译器文档吧

    2022-11-08 08:47 回答
  • 首先 #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 然后根据配置确定是否指定这个数组所在的地址

    2022-11-08 08:50 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有