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.

[参考译文] CCS/TMS570LS3137:引导加载程序和应用程序上的矢量表

Guru**** 2460990 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/653115/ccs-tms570ls3137-vector-table-seeting-on-bootloader-and-application

器件型号:TMS570LS3137

工具/软件:Code Composer Studio

你好

现在、我正在尝试在 tms570HDK 上实现引导加载程序和应用程序项目、引导加载程序和应用程序都使用 uCOS-II 和 tftp (lwip)。

您谈到的大多数情形如下所示:

(e2e.ti.com/.../225447)

 _c_int00    ;0x00  引导加载程序复位
      b #0x7ff8  ;0x04  undefined_instruction,分支到应用程序
      b #0x7ff8  ;0x08  software_interrupt、分支到应用程序
      b #0x7ff8   ;0x0C  prefet_abort、分支至应用程序
      b #0x7ff8   ;0x10  DATA_ABORT、分支到应用程序
      b #0x7ff8;保留、分支至应用程序
       LDR PC、[PC、#-0x1b0]       ;0x18
       LDR PC、[PC、#-0x1b0]       ;0x1C

地址0x8000处的应用程序矢量表应如下所示。

     b  _c_int00    ;0x00  应用程序复位
      b _undef_ISR; 0x04未定义_指令
      b _swi_isr  ;0x08  software_interrupt  
      b _prefet_abort_isr   ;0x0C  prefetch_abort  
      b _data_abort_isr   ;0x10  data_abort
       b _reserved_isr;保留
        LDR PC、[PC、#-0x1b0]       ;0x18
       LDR PC、[PC、#-0x1b0]       ;0x1C

 在所有这些情况下,使用矢量模式的 IRQ,在引导程序中,udef,abort,swi 没有 ISR,它们只是跳转到应用程序的‘s ISR。

spna236也是如此、

但是对于 uCOS 项目,IRQ 必须使用索引模式(传统 ARM7模式),,并且所有异常必须在引导加载程序中关闭。

你能给我一些建议吗?

或者,如果 spna236中描述的 SRAM 方法中的共享矢量起作用,您能给我一些 有关如何在应用程序中执行的具体建议吗?

我在这里待了一个月,真的需要你的帮助!

谢谢!

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

    如果您的应用程序无法支持矢量中断模式、则使用传统模式、但使用 ISR 内的共享。 即、在异常处理程序/ISR 内、根据引导加载程序与应用程序的不同需求、有单独的代码可供处理。 这可以通过在到达应用程序且不再需要引导加载程序操作时设置全局标志来实现。 如果这是一个安全应用、您可能需要添加对标志的额外保护、例如多位密钥或多个密钥的不同位置。

    作为使用伪代码的示例:

    DATA_ABORT_EXception()

    switch (boot_state)

    情况(BOOT_MODE):
    dm_boot_exep_process...
    中断;
    案例(APP_MODE):
    应用程序_激发_过程.....
    中断;
    默认值:
    while (1);
    中断;

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

    你好、 Chuck、  

    感谢你的帮助!

    我认为很难知道引导加载程序程序中"do_app_exeep_process"的地址、原因引导加载程序和应用程序是两个单独的 CCS Proj。

    我认为方法是在 ram 中共享矢量表,现在我的 proj 起作用了,但我不确定是否仍然 存在一些隐藏的危险或错误。  

    与应用报告 spna236第3章中一样、考虑了几 个注意事项、并参考"TMS570和从引导加载程序转发到应用 程序的向量"

    [ https://lists.rtems.org/pipermail/devel/2015-November/012878.html ]

    他们最终选择了 RAM 矢量和 POM,但代码较少,我无法理解如何实现它。

    你能给我一封写 SPNA236的那位自闭子的电子邮件吗?所以我可以问他一些问题吗?

    谢谢!

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

    现在、您的项目正在运行、但您想了解将矢量表放置在 RAM 中的风险。 对吧?

    根据应用手册、最大的问题是在 RAM 矢量表初始化之前会发生一个异常。 这会导致器件存储器的某些意外区域跳转。

    如果还有其他问题、请告知我。 应用手册的原始作者不再在 TI 工作、因此他们不再可以讨论此主题。