0

在 SAM4C 微控制器平台上,该time()函数在库中调用。我发现,1496321612当我从调试器开始时,这给出了正确的时间 ()。但是,当我在板上进行硬件重置时,刷新的固件在没有调试器的情况下执行,time()不返回并且固件卡在这一点上。

我想知道时间是如何设定的。我只通过调试ATMEL JTAG ICE (Segger)并且不明确设置时间。当我在我的 PC 上更改日期时,我会在调试时返回不同的时间......当 Segger ICE 启动调试会话时,是否有一种自动机制可以从我的 PC 设置时间,以及为什么我的固件在未设置时间时崩溃?

4

1 回答 1

2

这可以使用称为semi-hosting的机制来实现。总体而言,该机制允许目标使用主机上可用的一些工具(运行调试器硬件/软件的工具)。简化的机制如下:

  1. 目标固件链接到支持半主机的库。
  2. 每次固件调用半主机函数时,都会发生一个调试器事件(它可以是一些 SVC/SWI 调用、特殊断点或其他东西,具体取决于特定平台)。
  3. 调试器正在“捕捉”这个事件,找出请求的内容(它可以是一些 IO 函数,或者在你的情况下是一个时间请求)并将这个请求传递给主机软件。
  4. 主机软件正在执行请求并将结果传递给调试器。
  5. 调试器将结果传递给目标固件。
  6. 目标正在恢复。
于 2017-06-01T15:25:43.860 回答