使用dll使用许可的SDK

时间:2018-04-10 09:44:07

标签: sdk

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。

我:

  • 每次我希望访问其他核心时,断开并重新连接SEGGER
  • 我可以以某种方式在核心之间切换而无需打开和放大关闭JLink连接
  • 我可以在核心之间切换时停止核心,这样当我在其他地方寻找时,设备不会“跑掉”
  • 核心HW& SW调试点保持设置&如果我正在寻找一个不同的核心,并且当我回顾一个有希望的现在停止的核心时让我发现这个,我会被触发? (这当然可能取决于核心实施)

1 个答案:

答案 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,以便崩溃或调试不会导致过多的孤立或无声进程。