Green Hills工具链可以把链接完成的可执行映像转换为Motorola S-record文件,常用于单片机、汽车ECU和嵌入式控制器的Flash烧写。Green Hills怎么生成S-record文件,Green Hills生成S-record文件后地址范围不正确如何调整,重点在于先确认最终可执行文件中的装载地址,再进行格式转换。S-record中的地址通常继承链接结果,如果Flash区域、启动段或数据段在链接阶段已经放错位置,单纯重新生成S-record并不会自动修正地址。
Green Hills链接映射文件怎么查看,以及在其内部遇到内存段溢出的问题要如何处理,这件事,先得把那份map文件当成一份最终的,关于内存的账本来对待,它并不是一份普通的记录,而是链接器把各个目标文件、库文件、段落、符号和地址整理在一块儿之后得到的结果,你的程序究竟能不能被放进Flash、RAM、共享内存或者那些专用的段里面,很多情况下,不用先去把板子跑起来,而是先拿眼睛看一看这份链接映射文件,就能把问题给找出来。
Green Hills MULTI工程怎么配置,Green Hills MULTI工程依赖路径失效怎么排查,这在嵌入式工程迁移、更换电脑、更换工具链版本,或接入CI构建的时候经常能碰到。MULTI工程并不只是用来保存源文件的列表,它还会把编译器、目标处理器、include路径、库路径、链接脚本、启动文件以及构建选项全都关联在一起。路径一旦被写成了个人电脑上的绝对目录,或者项目结构调整后没有同步更新,就容易出现头文件找不到、库文件找不到、链接失败,或者工程能打开却无法编译这一类的问题。
Green Hills MULTI里的工程和普通桌面IDE不太一样,项目结构往往会和目标处理器、运行环境、链接布局一起确定。工程刚建好时,即使源码只有几个文件,只要目标板、工程层级或者路径配置有一处没对上,构建时就可能连续出现找不到头文件、链接文件缺失、目标架构不匹配等报错。遇到这种情况,与其盯着最后一条错误反复修改,不如从顶层工程和较早出现的构建信息往下查,思路会清楚很多。
Green Hills的编译优化等级到底要怎么调,还有优化以后变量没有办法被观察到,这要怎么处理,这些问题一般是出现在从Debug版本往性能版本那边切过去的阶段。编译优化会去把函数给内联展开,把没有用到的代码给删掉,重新去分配寄存器,对指令的先后顺序也做一些调整,程序的运行结果虽然没有变,但这可不表示它生成出来的机器代码,跟每一行的源代码还能一一对应得上。Green Hills编译器里面,性能的级别和调试的级别都是可以选的,MULTI调试器则可以把源代码、内存、寄存器,还有函数调用栈放到一起,去查看程序的状态。