This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/OMAPL138B-EP:中断的调用堆栈?

Guru**** 2608265 points
Other Parts Discussed in Thread: SYSBIOS

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/584934/rtos-omapl138b-ep-call-stack-of-an-interrupt

器件型号:OMAPL138B-EP
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI-RTOS

尊敬的所有人:

我们使用的是 OMAP L138和 CCS 5.1.1。 ARM CPU 正在运行具有多个任务的 SYS BIOS。 我当前正在跟踪可能的指针错误、因此我使用如下中断激活了 MPU 单元:

//--------------------------------------------------------
静态 IntSetup HwiMpuInt;

void MPU_IrqHneln (void* x)

 while (1);


void MPU_InitIrq (void)

 HwiMpuInt.intVectId   = PROTERR;// PROTERR = 27
 HwiMpuInt.sysEvtCount = 1;
 HwiMpuInt.sysEvtId[0] = 15;
 HwiMpuInt.pCallbackFxn = MPU_IrqHnle;
 HwiMpuInt.pCallbackArg=0;
 HwiMpuInt.bEnable     = 1;

 if (Interrupt_add (&HwimpuInt)!= 0)
 {
   while (1);
 }

//--------------------------------------------------------

当中断发生时、CCS 调用堆栈为:

Spectrum Digital XDS510USB Emulator_0/ARM9_0 (挂起)  
 main.c:572 0xC01789B8处的 MPU_IrqHnlfrld (void *)()  
 TI_SYSBIOS_family_ARM_DA830_Hwi_handlerSELF____I (struct ti_SysBIOS_family_ARM_DA830_Hwi_Object *、unsigned int)() at Hwi.c:957 0xC01A85C0  
 TI_SYSBIOS_family_ARM_DA830_Hwi_dispatchIRQC__I ()、位于 Hwi.c:822 0xC0190BA8  
 TI_SYSBIOS_family_ARM_DA830_Hwi_d调度 IRQ___I ()、位于 Hwi_asM.s470:85 0xC01A9444  
 TI_SYSBIOS_family_ARM_DA830_Hwi_handlerSELF____I (struct ti_SysBIOS_family_ARM_DA830_Hwi_Object *、unsigned int)() at Hwi.c:957 0xC01A85C0  
 0xFFFFFFFE (没有为0xFFFFFFFE 定义符号)  


但是、我的目的是找到导致 MPU 中断的指令。 是否可以查看中断来自何处?

感谢你的任何帮助。
亚历山大

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    使用 ROV、浏览到 Hwi 模块基本视图。 "IRP"列将显示上次中断时被中断的指令的地址。

    Alan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Alan:

    我找到了 ROV 视图和返回地址。 返回地址有效、但通常不是导致 MPU 违反的代码段。 可能优先级太低? 还是某些任务被中断锁定?

    如何提高 ISR 的优先级? 它的目的是永远不会返回、因此优先级应尽可能高。 我应该使用不同的 API 吗? 我发现 Interrupt_add 是 NDK 的一部分、而不是 SYS BIOS -所有示例都参考 DSP 上的 SYS BIOS。

    谢谢
    亚历山大
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我不熟悉 Interrupt_add()函数及其使用的 IntSetup 结构。
    但是、在使用 SYS/BIOS 本机 Hwi_setPriority () API 创建中断后、您可以更改中断的优先级:

    #include

    Hwi_setPriority (PROTERR、2);//这会将中断优先级设置为 IRQ 可以具有的最高值*/


    如果将中断优先级设置为0/1、它将路由到 FIQ 处理程序、该处理程序不跟踪中断的指令。

    Alan