如何调试免费实时操作系统应用程序?



如何调试RTOS应用程序?我正在使用 KEIL μVision,当我点击调试时,程序会逐步执行主函数,直到初始化 RTOS 内核的函数,然后您无法进一步执行。代码本身是有效的。顺便说一句,这不是我的,但我必须努力。这是 RTOS 应用程序的正常行为还是与程序有关?

是的,这是正常的。您需要在源代码中为在main()中创建的任务设置断点:在FreeRTOS应用程序中main()的唯一目的是:

  1. 初始化硬件,
  2. 创建应用程序所需的资源(计时器、信号量等)和任务,
  3. 启动调度程序

如果应用程序有足够的可用资源,则应用程序不应从vTaskStartScheduler()返回。

将断点放在需要调试的每个任务的入口点。 单步执行计划程序启动(或干脆运行)时,调试器将在运行的第一个任务处停止。 当该任务阻塞时,将根据计划规则选择其他一些任务来运行。

通常,在调试时,到达阻塞调用时,单步执行它,其他任务可能会运行,并且调试器仅在任务准备就绪时才会在下一行停止(取决于阻塞调用的性质)。 通常,您需要预测调用的结果将运行哪个任务,并在该任务中放置断点。 例如,如果发出消息发送,则可以在接收任务的消息接收调用之后放置断点。

关键是,除非您拥有RTOS源代码或在汇编程序级别进行,否则您无法"逐步完成"上下文切换,这很少有用或富有成效,并且不适用于抢占。

如果您使用 Keil 自己的 RTX5 RTOS 而不是 FreeRTOS,您可以在 Keil 中获得更好的 RTOS 调试体验和工具支持,但上述所有内容仍然适用。

是的,这是预期的行为。 调试 RTOS 应用的最佳方法是在所有任务、关键功能入口点和步骤调试处放置断点。

调试器支持单步执行应用程序的各种方法,如以下链接所示。 http://www.keil.com/products/uvision/db_exe_step.asp

调试RTOS应用的典型挑战可能是处理中断处理、同步问题和寄存器/内存损坏。

Keil μVision的系统分析器使人们能够查看程序执行时间范围,每个线程的状态。它还有助于查看中断,如果启用了跟踪器,则异常。

最新更新