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.

[参考译文] 编译器:MSP430中断矢量链接

Guru**** 2536010 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/578393/compiler-msp430-interrupt-vector-linkage

工具/软件:TI C/C++编译器

MSP430团队,

中断向量在 CCS生成的链接器.cmd文件中链接。  对于填充的引导程序,.cmd文件使用如下构造:

ECOMP0:{*(.int45)}> INT45类型= VECT_INIT

但是对于    特定设备的未填充(不是从外围设备实现)向量,它使用如下构造:

int44:{}> INT44

我想知道为什么会有差异。  换言之,为什么ECOMP0向量不是这样链接的:

int45:{}> INT45

我了解type=VECT_init的作用,因此我忽略了上面的内容。

谢谢!

David

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

    嗨,David,

    这只是一种命名约定,为了更清楚地将链接器警告连接到特定的中断向量,您可以重命名它或根据需要将其恢复为默认分配。    
    此致,
    Ryan

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

    您好,Ryan:

    感谢您的回复。   然而,我所显示的两种联系之间似乎有一些功能上的差异。  例如,我有一个测试程序,其中ECOMP0向量填充了ISR (使用#pragma向量= ECOMP0_Vector,后跟ISR)。  如果我离开原来的悬挂机构:

    ECOMP0      :{*(.int45)}> INT45类型= VECT_INIT

    向量在指定的位置(即INT45内存)填充。

    但是,如果我使用此链接:

       int45      :{}>              INT45类型= VECT_INIT

    引导程序不显示。  INT45内存未在.map文件中使用。

    David

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

    gcc链接程序脚本中没有这种区别。

    “#‍pragma vector =44”实际上是否适合您?

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

    [报价用户="Clemens Ladisch"]

    gcc链接程序脚本中没有这种区别。

    “#‍pragma vector =44”实际上是否适合您?

    [/引述]
    是的,这就是CCS .cmd文件的设置方式。
    此致,
    David
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨,David,

    你是对的,我错了,必须提供某种名称,并指向中断向量号。 我将与工具团队成员联系,解释为什么必须发生这种情况。  如果我可以问,这一要求背后的原因是什么?

    此致,
    Ryan

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

    Ryan,

    是的,工具正在做一些我无法很好地解读的事情。  希望工具可以解释。

    我真正要做的是有选择地排除 某些(未使用的)中断向量的填充。  如果我不执行任何操作,编译器将从RTS库中提取ISR。  我不想这样做(我不想解释为什么,除了说我在内存中有两个使用向量表的非重叠程序)。  如果我对链接进行评论,我就会发现:

    /* ECOMP0:{*(.int45)}> INT45类型= VECT_INIT */

    它能满足我的需要,但我很惊讶,我没有收到关于没有指定链接的节的警告(我已选中-w,所以我希望链接程序会抱怨它找到了一个未指定用于分配的节)。  即使我自己使用矢量pragma在代码中指定了ISR,也会发生这种情况(无警告)。

    David