Green Hills工程里,目标处理器并不只是一个芯片名称。编译器会根据处理器型号决定可用指令和相应的代码生成方式,调试环境还要用同一套硬件信息去连接目标板。Green Hills目前覆盖ARM、Power Architecture、AURIX/TriCore、RH850、x86、RISC-V等处理器平台,不同工具链安装包能够选择的具体型号并不相同。工程从旧项目复制过来、更换开发板或者升级芯片后,如果仍沿用原来的处理器配置,编译可能报错,也可能直到下载运行时才暴露问题。
Green Hills工程能够顺利编译以后,链接文件就开始决定代码和数据到底放到芯片的什么位置。这个环节如果只看“链接成功”,很容易漏掉问题,地址范围写错、段被放进不合适的存储区,程序仍可能生成可执行文件,上板后却停在启动阶段。Green Hills的elxr链接器使用.ld链接指令文件描述内存区域和程序段布局,处理这类问题时,工程里的Program Layout、实际生效的.ld文件和map结果要放在一起看。
Green Hills MULTI里的工程和普通桌面IDE不太一样,项目结构往往会和目标处理器、运行环境、链接布局一起确定。工程刚建好时,即使源码只有几个文件,只要目标板、工程层级或者路径配置有一处没对上,构建时就可能连续出现找不到头文件、链接文件缺失、目标架构不匹配等报错。遇到这种情况,与其盯着最后一条错误反复修改,不如从顶层工程和较早出现的构建信息往下查,思路会清楚很多。