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从 boot.c 调用 main()的正确语法是什么?

Guru**** 2589280 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/956891/compiler-msp430-what-is-the-proper-syntax-to-call-main-from-boot-c

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

我已经注意到、在不同版本的 CCS 中、它们为 MSP430提供了不同的 boot.c 文件。 唯一的区别是调用 main()将传递数据或不传递数据,但我们项目中的 main()函数被声明为参数的空值。

我有点担心编译器可能会因这种情况而无意中产生错误。

从 boot.c 调用 main()的正确语法是什么?

  • main();
  • MAIN (空);
  • MAIN (0);

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

    我认为你打算不向 main 传递任何参数。

    对于这种情况、请查看编译器 RTS 库中的引导例程如何调用 main。  RTS 库的源代码是编译器安装的一部分。  该文件名为 boot.c,一个典型的目录位置是...

    C:\ti\ccs1011\ccs\tools\compiler\ti-cgt-msp430_20.2.1.LTS \lib\src\boot.c

    该文件中使用的语法是...

    MAIN (0); 

    为什么0作为参数传递?  在大多数情况下、例如您的情况下、它是无害的。  但是,考虑一种情况,即某些代码从其他地方快速移植,并且在 main 的开头有代码,其启动方式与...类似。

    int main (int argc、char * argv[])
    {
    int i;
    for (i = 0;i < argc;i++)
    process_argument (argv[i]);
    
    /*此处提供更多代码*/
    } 

    通过将0作为第一个参数传递给 main、可以安全地绕过该代码。   

    谢谢、此致、

    乔治

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

    答案很好。 谢谢 George。

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

    还有一个问题。 我不认为这样将数据传递到 main()是个好主意。 相反,我会使用_system_pre_init()函数。 是否将 (intargc, char*argv[]) to数据传递到 main()?

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

    请描述您需要 main 作为输入接收的数据。  它来自哪里?   

    谢谢、此致、

    乔治