2014-10-01 38 views
0

我想通过SWO(使用ITM)输出调试信息。核心Cortex M3可以做到这一点。特权模式下的Cortex M3

的ITM是支持printf型调试跟踪 操作系统(OS)和应用程序的事件,并发出诊断系统信息的一个应用程序驱动的跟踪源... link

对于此我必须配置ITM寄存器。其中一部分我只能在特权模式下写入。

ITM跟踪特权寄存器 使用ITM跟踪特权寄存器使操作系统控制哪些激励端口是用户代码访问。 注: 您只能在特权模式下写入该寄存器。 see ITM Trace Privilege Register

如果IRQs SVC,PendSV,SysTick已经使用,切换到特权模式的最佳方式是什么? (我使用FreeRTOS)这是真的吗?

+0

由于你大概只需要写一次这个寄存器,你不能在操作系统启动代码中这样做,而不是稍后尝试模式切换吗? – Notlikethat 2014-10-01 13:01:39

+0

当然,我可以做到。但我想在我的dbg_init()函数中初始化ITM寄存器。 – Lyrri 2014-10-01 13:09:04

回答

0

您可以在启动FreeRTOS之前配置ITM(考虑FreeRTOS任务在非特权模式下运行)。
或者您添加对新SVC的支持。 FreeRTOS SVC使用svc 0,您可以添加对新的svc的支持,我们将其称为svc 1,您的SVC_Handler()会将svc 0重定向到FreeRTOS或svc 1到您的ITM配置代码。