Green Hills中文网站 > 热门推荐 > Green Hills INTEGRITY工程怎么创建 Green Hills INTEGRITY任务启动失败怎么排查
教程中心分类
Green Hills INTEGRITY工程怎么创建 Green Hills INTEGRITY任务启动失败怎么排查
发布时间:2026/07/20 14:39:31

  想要搞明白Green Hills INTEGRITY工程怎么创建,还有Green Hills INTEGRITY任务启动失败怎么排查,这两个问题只要是用MULTI来开发那种实时嵌入式应用,就绕不过去,一个INTEGRITY工程不是简简单单把几个C文件塞进项目里就完事了,它还要管目标板上的BSP、地址空间怎么分、内核怎么配、任务从哪里进去、共享库怎么弄,还有怎么连到目标板,工程能顺顺利利编译过去,也不等于任务就一定起得来,好多启动的问题其实是卡在了镜像没有正确加载进去,入口函数没配对,依赖的那些服务还没跑起来,或者任务申请的内存和系统资源已经超过了配置给它的范围。

  一、Green Hills INTEGRITY工程怎么创建

 

  INTEGRITY的应用一般都是在MULTI这个环境里面建起来的,建之前要先去确认好处理器是什么架构、目标板是哪个型号、INTEGRITY版本和BSP版本是哪一个,不能随便找一个看起来差不多的模板就往上面套,BSP这个东西它会决定启动代码、内存是怎么排的、时钟、中断还有外设驱动这些底层的玩意儿,一旦选错了,就算工程能编译过去,到了目标板上也还是有可能跑不起来。

 

  1、选一个对应的工程模板

 

  在MULTI里头可以用新建工程的功能来创建INTEGRITY项目,建的时候会有一个向导,在里面把目标BSP、要用几个地址空间,还有需要哪些库或者加载模块都选好,Green Hills给的这个INTEGRITY工程向导,它自己就已经把BSP、地址空间、共享库和那种动态加载模块这些要配的东西都包括进去了。

 

  新项目刚开头的时候,不要急着把所有的业务代码一下子就全倒进去,最好是先拿配套的示例,或者只弄一个很简单的任务,让它把编译、下载、运行这一套全走通,确认好工具链、BSP还有调试的连接都没毛病了,再一点点往里面加应用模块,这样后面要是哪里不对了,也比较容易分得清到底是环境的问题还是业务代码的问题。

 

  2、把工程文件和编译选项理清楚

 

  源文件加到工程里以后,头文件的路径、宏定义、目标处理器那些选项、要链接的库,还有构建的顺序,这些都要去检查一遍,MULTI本身就有工程构建、调试和代码分析的本事,所以可以在同一个环境里面把编译错误处理掉,然后重新去构建项目。

 

  要是项目是由好几个库和好几个应用拼起来的,建议按照底层驱动、公共的库、服务模块,再到应用任务这样一层一层地管起来,不要把所有的文件直接就堆在一个工程节点的下面,要不然到了后面碰到链接顺序不对或者符号冲突这种事情,要找到是谁搞出来的就很难了。

 

  3、把任务的入口和运行资源配好

 

  去创建任务的时候,要把入口函数是哪一个、堆栈要开多大、优先级、地址空间,还有任务要用到的那些共享对象都定清楚,INTEGRITY这个东西是很强调任务之间要隔离开,资源要能保证的,所以CPU的时间和内存资源都可能会被系统的配置给限制住。

 

  任务的入口函数要和工程里面配好的保持一致,函数是怎么声明的、参数是什么样子的,还有链接出来的结果也都要核对好,要是这个任务还依赖于网络、文件系统或者某个驱动服务的话,就得把启动的先后顺序一块儿考虑进去,不能光盯着任务本身有没有被加进镜像里面。

 

  二、Green Hills INTEGRITY任务启动失败怎么排查

 

  任务启动不了的时候,一开始不要来来回回地去改优先级,要先去判断一下,这个任务到底是压根儿就没有被创建出来,还是说创建是创建了,但马上就退出了,或者是异常终止了,又或者是一直被卡在某个地方,这几种情况一眼看过去都像是“没有启动”,可是实际的原因并不一样。

 

  1、确认任务代码有没有进到最终的镜像里

 

  先去看一下链接的结果,还有符号的信息,把入口函数是不是已经跑到最终那个可执行文件里面去了给确认下来,有些任务明明源文件是放在工程里的,可是因为没有谁去引用它,或者构建的目标选错了,又或者是条件编译没满足,最后其实根本就没有被链接到镜像里去。

 

  可以在【Project Builder】里查看当前构建目标,再通过调试器搜索任务入口符号。

 

  要是连函数的符号都找不到,那就应该先去把构建和链接的问题搞掉,而不是还在那里接着查运行的状态。

  2、看看目标连接和镜像加载对不对

 

  工程构建完了之后,要去确认MULTI连接的是不是正确的目标板、处理器的核心还有调试的方式,目标连接搞错了、旧的镜像没有被新镜像盖掉、初始化的脚本没有跑起来,这些都可能让代码跟当前的工程对不上号。

 

  遇到这种情况,可以给目标板重新复一下位,然后把镜像完整地下载一遍,接着到任务的入口那个地方去设一个断点,要是断点怎么也打不中,那就再去检查启动的那些配置有没有真的去调这个任务,而不是光看界面上的工程名字就觉得程序已经更新过了。

 

  3、查看任务的异常和资源的状态

 

  任务被创建出来以后马上就没了,常见的原因有堆栈给得不够、访问了不对的地址、入口函数自己跑完了返回了、依赖的那个对象不存在,还有在初始化的时候发生了异常,INTEGRITY是用内存保护把内核和用户任务隔开的,所以越界访问这种问题一般不会变成普通变量出错那种样子,倒是很可能直接就惹得任务异常了。

 

  排查时可以结合【Task List】和内核感知调试信息查看任务状态、停止位置与异常记录。

 

  Green Hills的调试环境是支持去对INTEGRITY这种多任务系统里单独的任务去看、去控制的,有需要的时候也可以把整个目标系统给冻住。

 

  三、INTEGRITY任务启动问题怎么进一步定位

 

  有些任务只有在特定的硬件上,或者系统的负载到了一定的程度才会启动失败,这个时候就不能只看一次断点的结果了,还得把启动的顺序、任务之间是怎么通信的,还有运行时要的资源,放在一块儿来分析。

 

  1、检查一下前面的那些服务是不是都准备好了

 

  网络任务有可能是要依赖协议栈的,做存储的任务可能要依赖文件系统,业务任务也有可能在等消息队列、信号量或者是共享内存,要是前面的那些服务还没建立起来,任务很可能一启动就进到等待的状态里头去了,看起来就跟根本没跑一样。

 

  2、把优先级和调度关系核对一下

 

  高优先级的任务要是老占着处理器不撒手,那个优先级低的初始化任务可能就老是拿不到运行的机会,INTEGRITY这个东西本身是很看重确定性的调度和任务资源控制的,所以优先级、CPU的预算,还有任务能跑的时间窗口,都得结合着系统的配置去查。

 

  3、从一个最小的工程开始,一步一步把配置加回去

 

  要是原来的工程层次太多,可以先留下一个最小的任务和必须要用的BSP配置,然后再一项一项地把驱动、库和业务模块往回加,加到哪一步的时候任务开始失败了,那问题的范围一下子就缩小很多,跟在那个完整的工程里面瞎改参数比起来,这种办法虽然看着有点笨,可常常会更快一些。

  总结

 

  Green Hills INTEGRITY工程怎么创建Green Hills INTEGRITY任务启动失败怎么排查,关键的地方在于一开始就要把BSP、工程模板、地址空间、链接的配置还有任务入口这几样东西给它对上,工程创建好了以后,应该先去跑一个最小的任务,看看工具链和目标连接是不是通的,然后再一点一点地把实际的模块加进去,任务启动失败的时候,要把没链接上、没加载进去、没创建出来、被阻塞了,还有异常退出这几种情况给分开,再结合着任务列表、入口的断点、异常的信息、资源怎么配的,还有启动的时候依赖了哪些东西,一项一项地去查,等把问题定到了具体的阶段以后,排查就不会只剩下翻来覆去地重编译和改优先级了。

135 2431 0251