微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > CubeSuite+生成c文件的执行入口问题

CubeSuite+生成c文件的执行入口问题

时间:10-02 整理:3721RD 点击:
  新接触RL78G13,感觉步履维艰啊,可能是习惯于keil软件的思维,使用CubeSuite+生成代码的话,会产生一个r_main().c,
void main(void)
{
    /* Start user code. Do not edit comment generated here */
    while (1U)
    {
        ;
    }
    /* End user code. Do not edit comment generated here */
}
   为什么main函数不调用r_cg_port.c中的R_PORT_Create(void)函数,编译下载后仍然会产生事先设定的结果?不明白CubeSuite+生成的一堆.c文件到底是怎么组织并实现编译的,c语言不是从main函数为入口吗。

   其实,C可以从main开始,但是单片机在执行到main()前已经进行了很多初始化操作了,一般不会从复位地址直接跳转到main的。复位后执行的是启动程序,启动程序在工程里看不到,但却调用了.具体的操作可以看看CubeSuite+安装目录\CA78K0R\V1.41\Src\cc78k0r\src中的cstart.asm
其中先执行
    MOVW    SP,#LOWW _@STBEG    ;SP <- stack begin address
    CALL    !_hdwinit
后面再执行
;-----------------------------------------------------------------------------
; call main function
;-----------------------------------------------------------------------------
    CALL    !_main        ;main();
而hdwinit在CodeGenerator生成的r_systeminit.c中定义了
void hdwinit(void)
{
    DI();
    R_Systeminit();
    EI();
}
再看看 这个文件里R_Systeminit()的定义,举例说
void R_Systeminit(void)
{
    PIOR = 0x00U;
    R_CGC_Get_ResetSource();
    R_PORT_Create();
    R_CGC_Create();
    R_TAU0_Create();
    CRC0CTL = 0x00U;
    IAWCTL = 0x00U;
}
所以 Create结尾的函数在main()前都已经调用了,用户只需要调Start/Stop等函数即可
如果不用Code Generator生成的代码自己写程序的话,可以不定义hdwinit(),直接在main()中调用初始化操作函数

确实跟其他单片机有点不一样,搞了两天还没整明白
想问问小编,如果不用代码生成器,主机建立工程如何操作,我还不知道应该把哪个头文件包含进去

1) 如果你确定自己是小白,而且大神已经告诉你了,怎么玩,你就跟着大神这么建工程师绝对没有错的;
2) 跟大神学得一点点手艺了,再把这个工程复制过来,重建自己的另一个工程,CS+还是很不错的

如此复杂呀,学习了,谢谢了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top