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.

[参考译文] MSP430G2755:将复位矢量设置为指向一个特定地址(即、在连接器中设置入口点)

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1043156/msp430g2755-setting-the-reset-vector-to-point-at-a-specific-address-i-e-set-entry-point-in-linker

器件型号:MSP430G2755

您好!

我一直在寻找一种在 CCS 中的 MSP430G2755上设置程序入口点的方法。 到目前为止、我一直在 MSP430链接器用户指南中阅读以使用"-entry_point=my_global_entry_point_function_symbol"、但没有成功、因为链接器会发出警告我在 E2E 上看到其他文章提到:

警告#10063-D:指定了"_c_int00"以外的入口点符号: "my_global_entry_point_function_symbol"

尽管这似乎是一个警告、说明默认入口点已被覆盖、但它仍然将复位矢量指向 _c_int00  函数(放置在链接器决定的存储器地址上)、而不是 my_global_entry_point_function_symbol

我还在"4.3.7  指定全局变量初始化类型"下的 MSP430优化 C/C++编译 器中阅读了-rom_model 和-ram_model 选项、这些选项显然会强制使用_c_int00作为入口点。 但是、当我从链接器命令中删除该标志(-rom_model)时、指南指定将需要将入口点默认设置 为地址0、但是、它仍然默认使用_c_int00 入口点。

我遇到的主要问题是、_c_int00不是固定的、也不是用户确定的存储器地址、也就是说、如果我更改代码、它可能会移动到其他地址。

我看过其他几篇文章、其中回复建议不要在小型单闪存扇区器件上编写引导加载程序、但这正是我现在所做的。

我要问的是、我是否可以指定一个特定函数作为入口点、或者我是否可以将 _c_int00放置 在一个特定的存储器地址。 两种方法都可以正常工作。

此致、

Felix。

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

    您好、

    结算此 帖子

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

    这似乎是一种浪费的努力。 为了使程序正常工作、您必须处理中断矢量。 这意味着查找复位矢量同样有效。 您无法将其编程到其常规位置、但您可以在某个位置进行堆存。 然后在启动期间引导加载程序决定运行目标时使用它。

    如果这对您不起作用、另一种方法是在目标程序区域的开头为分支保留几个字。 然后在分支中编程到起始地址。 现在您有一个固定的入口点。 除了编辑链接器脚本以保留该空间的麻烦之外、几乎完全相同。

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

    感谢您的建议、

    但是、我最后通过取消链接器脚本中包含复位矢量的输出扇区、然后在同一位置写入我自己保留的常量、来覆盖复位矢量。 我想避免这样做,但我没有找到任何其他合适的选择。 我只需要设置我自己的复位矢量、到目前为止、这似乎是最简单的选择。

    此致、

    Felix。