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.

[参考译文] LAUNCHXL-F280049C:PIEVECTTABLE 不加载

Guru**** 2815975 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1226268/launchxl-f280049c-pievecttable-does-not-load

器件型号:LAUNCHXL-F280049C
主题中讨论的其他器件:C2000WARE

您好!  

工程迁移后、F28004x_headers_nonbios.cmd 文件看起来不会执行、因为没有显示内存分配工具的 UNION 或 PIEVECTOR 字节。 在原始的工程 UNION 中运行、我找不到任何不同的工程编译器或链接器设置会强制 加载或编译头文件 CMD。 不可避免地会导致立即 NMI、因为工程中似乎没有为大于组1的其他已启用 ISR 的组加载矢量表。

注意:预迁移的映射文件工程指示表加载的字节和汇编的 ISR 内核优先级非常重要的外设文件。 我过去问论坛哪里文件被加载没有人知道我在说什么。 TRM 和 wiki 网页只是关于如何或在哪里验证将以下文件加载到内存中的行为。 启用工程属性以列出*。asm 文件输出时、下一个汇编器文件会在工程 build flash_lib 文件夹中输出。 不过、如果在迁移的工程 build flash_lib 文件夹中缺少这些函数、因为在这两个工程的 hal.c 中调用相同的 PIE 向量函数。

f28004x_pievect.asm、 f28004x_PIECTRL.asm、

而且硬件内核优先级顺序可能不需要两个按软件优先级排列的 ASM? f28004x_sw_priorited_pievect.asm、 f28004x_sw_priorited_defaultsr.asm  

//初始化中断控制器
interrupt_initModule();

/*启用 ePIE 输入1-12清除*/
interrupt_enablePIE();

//初始化矢量表
interrupt_initVectorTable();

 PIEVECTTABLE 中      00000d00  00000200 000001c0 00000040 RWIX

注意、奇怪的是、PIE 函数未加载任何字节。

在工程编译中可以将头文件 CMD 置位在哪里?

存储器映射文件:在迁移的工程编译中未加载 show pie 表。

 PIEVECTTABLE 中      00000d00  00000200 00000000 00000200  RWIX

/*** PIE Vect 表和引导 ROM 变量结构***/
UNION RUN = PIEVECTTABLE

PieVectTableFile
培训师

  EmuKeyVar
  EmuBModeVar
  EmuBootPinsVar
  FlashCallbackVar
  FlashScalingVar
}
}

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

    您好!

    PIVECT 表作为 InitPieVectTable 函数的一部分加载

    此致、

    Veena

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

    您好、Veena:

    Umm 我没有将 initPieVectTable()装入另一个项目中,该项目通过似乎位于闪存文件夹中的*。asm 文件自动加载。 正在工作的项目遇到了我现在记得的同样的问题。 当我们(Ctrl+单击)直接声明初始化函数并引起100的符号错误时、编译器会声明初始化函数是隐式的。 请注意、映射文件中显示它确实已加载的字节数。 在将 include 添加到 hal.c 时,不会对 initPieVectTable()的 f28004x_globaldefs.h extern 路径进行索引,因此所需的包含文件名是什么

    针对 SDK 和 MCSDK 发布的项目示例一直存在这一问题。 此外、x49c 的 C2000ware_4.03器件文件在工程中更新时也会导致数百个错误。 似乎没有对 SDK 电机工程进行回归测试来更新器件文件。 例如、lin.h、我们必须为 SCI_IDLE 成员添加注释、否则会导致100个编译错误符号等的名称 f28004x_globalvariabledefs.c 中也发生了相同的情况、必须注释 LIN 段、否则它无法正确编译。 我不得不放回 C2000ware_4.02 f28004x_device include/source 和 common-include/source 文件、因为它根本无法与较新的器件文件一起运行。

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

    请使用  initPieVectTable()初始化 PIVECTABLE 。

    您能否分享在 C2000Ware/MCSDK 中遇到的编译错误的详细信息? 如果这是您在快照中共享的错误、则是由于 缺省的 tisr.c 文件未包含在项目中。 这包含所有中断的一些虚拟 ISR。 请告知我们您是否在 C2000Ware/MCSDK 中提供的任何示例工程中遇到了这些编译错误。

    此致、

    Veena

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

    但这正是导致上图中所有错误的原因。 奇怪的是、SDK4.01不调用函数、并将表加载到存储器中。  

     缺省的 tisr.c 文件未包含在项目中

    在重新编译之前、删除所有*。asm 之后、该文件位于项目闪存文件夹中、为 defaultsr.asm。  

    这包含一些虚拟 ISR 用于所有中断

    仍然、存储器中的虚拟 ISR 表条目为0x0000、但在从文件夹中删除*。asm 后返回两个工程闪存文件夹。

    请告知我们您在 C2000Ware / MCSDK 中提供的任何示例项目中是否遇到这些编译错误。

    只有调用 hal.c 中的 initPieVectorTable()时才会出现编译错误(上图),但注意到 PIEVECTTABLE 被加载到内存中,因此不存在。  

    BTW:(lin.c)编译器解析器丢失会导致数百个符号错误、请参阅以下示例。 较大但 外部__cregister IR/IFR 导出(f28004x_device.c)会带来很大麻烦。 编译器不像 IR/IFR 那样会导致符号未解析错误。 请注意、(cpu.h)具有相同的导出方式、但使用 unit16_t 与 int。  将#include "28004x_device.c"添加到使用 IER 或 IFR 符号的 C 文件后、CCS 代码分析无法解析。 导致使用相同 IRR/IFR 标志的其他项目中出现符号缺失错误、我们在两个项目之间来回切换以停止错误。 我经常将项目文件复制到工作目录项目中、以避免 CCS 中出现这种混乱。 停止处理文件、认为 driverlib 更新将更容易、但实际上、C2000ware 更新没有进行回归测试、这会给一旦开始工作的项目带来巨大的问题。

    extern cregister volatile unsigned int IFR;
    extern cregister volatile unsigned int IER;

    LIN.h:当 SCIB 使用 FIFO 模式时、会导致编译器解析失败。

    struct scIFLR_bits{// bits description
    BP_16 BRKDT:1;// 0中断检测标志(SCI 兼容模式)
    BP_16唤醒:1;// 1唤醒标志
    // BP_16空闲:1;// 2个 SCI 接收器处于空闲状态(SCI 兼容模式)
    BP_16忙:1;// 3忙标志

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    。 请告知我们您是否在 C2000Ware / MCSDK 中提供的任何示例项目中遇到了这些编译错误。

    似乎我将全局导出添加到了矢量表、并且在编译时出现了警告。 然而、请注意、PIEVECTTABLE 已加载到存储器中、但当 SCIB FIFO 发出 IR/IFR、并在此 MCSDK 工程中给予 ADCC1 (低于 ISR)优先级时、它仍然会导致 NMI。 这在 SDK4.01中不会发生、因此在 InstaSpin ISR 循环通用 MCSDK 项目中不正确。  

    __attribute__((interrupt)) void motor1CtrlISR (void)

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

    因此、未解决的 IER/IFR 标志是 SCIB 除了低速时钟除数之外没有串行数据的问题的一个很好的部分、必须使用 x49c 波特率时钟设置%4。 奇怪的是, SCIA 发送了 ASCII 文本115200KBPS ,所以真正的困惑我是如何工作与 USB 虚拟 COM 端口。

    PIEVECTTABLE 仍然没有将任何字节加载到存储器、但 SCI 模块来自 IR/IFR 嵌套优先级顺序控制和 CPU_INT_9。

    然而、ADCC1 ISR LED 闪存速率要低得多、闪烁之间的3秒似乎为 CPU_TM0 1毫秒的时间要长得多。

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

    您好、Veena:

    为什么不必为 PIEIER 组加载 PIECTABLE 0x00D00、以及执行中断 IRR/IFR 标志? 奇怪的是、在 I 重新排序后、LSRAM 组分别为8192KB 和两个组合的4096KB 组(0_1、2_3、4_7)、并且矢量表停止加载、如上面发布的分配工具和映射文件所示。 然而、ISR 和嵌套外设内核优先级顺序位似乎在存储器中没有矢量表时正常工作。

    奇怪的是,globalvariablefs.c 对于 PieVectableFile 具有#pragma 段,但不再执行。

    //---------------
    #ifdef _cplusplus
    #pragma DATA_SECTION ("PieVectTableFile")
    #else
    #pragma DATA_SECTION (PieVectTable、"PieVectTableFile");
    #endif
    易失性结构 PIE_VECT_TABLE PieVectTable;  

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

    奇怪的是、在我关闭 CCS 并清理后多次重新编译项目后、PIEVECTBBLE 才开始加载。

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

    正如您在此 线程中看到的、编译器认为它没有找到函数、尽管是否加载了函数似乎没有关系。 奇怪的是、它要求将 extern void InitPieVectTable (void)添加到 hal.c 以停止模糊编译器警告。  

    尝试在 flash.cmd 文件中添加表地址加长度、尽管 type=NOINIT、但 headers.cmd 文件声称存在重叠。 同样、一个项目会自动加载矢量表、而不调用 hal.c、假设是通过 pievect.asm 进行调用。 也许此项目中的链接器开关不同。 由于删除 pievect.asm 后、表中的字节未加载0x0000D00、这似乎是合理的。 尽管映射会保留它的地址空间、直到下一次编译读取再次列在 flash_lib 文件夹中的*。asm 文件。

    TI 需要发布有关添加到现有 DOS 工程中的文件夹的警告、即使构建中不包含这些文件夹或链接也是如此。 编译器症状可能包括几个之前定义的符号冲突错误、并且是 CCS 12.3异常行为。 它可能一直存在或最近添加到搜索索引中。