Why/how 是否为 Segger JTAG ICE 下的微控制器平台设置了时间?
Why/how is time set for a microcontroller platform under Segger JTAG ICE?
在 SAM4C 微控制器平台上,time()
函数在库中调用。我发现,当我从调试器开始时,这给出了正确的时间 (1496321612
)。然而,当我在板上进行硬件重置时,闪存固件在没有调试器的情况下执行,time()
不 return 并且固件卡在这一点上。
我想知道时间是怎么设置的。我只通过 ATMEL JTAG ICE (Segger)
调试并且没有明确设置时间。当我在我的 PC 上更改日期时,我在调试时返回了不同的时间......当调试会话由 Segger ICE 启动时,是否有一种自动机制可以从我的 PC 设置时间,为什么我的固件在未设置时间时崩溃?
这可以通过称为半托管 的机制来实现。总体而言,该机制允许目标使用主机上可用的一些设施(运行 调试器 HW/SW)。简化的机制如下:
- 目标固件链接到支持半主机的库。
- 每次固件调用半主机功能时,都会发生调试器事件(可能是一些 SVC/SWI 调用、特殊断点或其他内容,具体取决于特定平台)。
- 调试器是"catching"这个事件,弄清楚请求的是什么(它可以是一些 IO 功能,或者像你的情况一样请求时间)并将这个请求传递给主机软件。
- 主机软件正在执行请求并将结果传递给调试器。
- 调试器正在将结果传递给目标固件。
- 目标正在恢复。
在 SAM4C 微控制器平台上,time()
函数在库中调用。我发现,当我从调试器开始时,这给出了正确的时间 (1496321612
)。然而,当我在板上进行硬件重置时,闪存固件在没有调试器的情况下执行,time()
不 return 并且固件卡在这一点上。
我想知道时间是怎么设置的。我只通过 ATMEL JTAG ICE (Segger)
调试并且没有明确设置时间。当我在我的 PC 上更改日期时,我在调试时返回了不同的时间......当调试会话由 Segger ICE 启动时,是否有一种自动机制可以从我的 PC 设置时间,为什么我的固件在未设置时间时崩溃?
这可以通过称为半托管 的机制来实现。总体而言,该机制允许目标使用主机上可用的一些设施(运行 调试器 HW/SW)。简化的机制如下:
- 目标固件链接到支持半主机的库。
- 每次固件调用半主机功能时,都会发生调试器事件(可能是一些 SVC/SWI 调用、特殊断点或其他内容,具体取决于特定平台)。
- 调试器是"catching"这个事件,弄清楚请求的是什么(它可以是一些 IO 功能,或者像你的情况一样请求时间)并将这个请求传递给主机软件。
- 主机软件正在执行请求并将结果传递给调试器。
- 调试器正在将结果传递给目标固件。
- 目标正在恢复。