Segger允许您获取使用其JLink SDK的许可证。 我正在使用它来创建工具,以便检查包含多个内核(多个ARM cortex M内核和DSP)的新(尚未商用)SoC微处理器的状态以及SWD调试H / W.
Segger在他们的普通软件download中包含一个GDB服务器,它可以从一个进程中访问任何单个核心。
我不认为Segger公开他们的SDK UM08002文档和代码示例,但它证明能够访问单个核心(这对我来说很好)。
所有的SDK都是一组标题和文档,允许你调用已经分发的SEGGER JLink dll(普通软件中的dll download提示你自动更新)所以没有魔法发生在SDK本身;但它已获得许可,所以我不能在这里发布任何内容。
我不明白的是,必须使用SDK在单个进程内按顺序访问多个内核才能调用dll。
我:
答案 0 :(得分:0)
简短回答
不,有点。
答案很长
Segger JLink DLL API是每个进程API的单个目标,这意味着当dll持有的进程全局状态配置为与另一个核心通信时,您无法开始与另一个核心通信。为了选择目标核心,你必须注入用Seggers'不是很简单的'脚本语言编写的适当的初始化脚本。为了更改脚本并确保它们都运行正常,您需要关闭与目标的连接,设置新脚本,然后重新打开与新目标核心的连接。
可以通过以'key = value'语言执行某些命令来动态调整一些细节,但是你无法以这种方式完成所需的一切。
推荐方法
您可以做的是让多个进程共享JLink。
每个进程初始化为特定的目标核心,然后它们通过API调用自动在API cal上共享JLink。对于复合,多个api调用,您需要使用dll API JLinkARM_Lock()和JLinkArm_Unlock()来序列化这些操作,或者您可能会在这些复合操作期间使进程“跳入”并使其行为变得不确定或不可靠。
他们与多个目标核心进行通信,您可以从主进程到生成的JLink操作进程进行进程间通信。
请记住在进程间通信中包含keep alives,以便崩溃或调试不会导致过多的孤立或无声进程。