这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Renesas » Cubesuite+的困惑,求解答

共10条 1/1 1 跳转至

Cubesuite+的困惑,求解答

助工
2012-08-28 08:52:48     打赏
1、新接触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函数为入口吗
2、想写个跑马灯,在P1端口输出,在r_main().c编辑如下
void main(void)
{
    /* Start user code. Do not edit comment generated here */
   
    uint8_t j;
    uint8_t m;
    PM1 &=0x00;
    
while (1U)
{
        m=0xff;
        for(j=0; j<8; j++)
       {
                m=m<<1;
                P1&=m;
                delay(2000);
        }
        m=0xff;;
}
    /* End user code. Do not edit comment generated here */
}

发光二极管为低电平点亮,延时函数delay事先写好并声明,但是下载到板子上总是和在Project Tree下Port选项中设定的结果一致,即端口固定为事先设定的电平



关键词: Cubesuite+     困惑     解答    

院士
2012-08-28 09:22:44     打赏
2楼
系统的进入main()函数前先行执行了硬件资源的初始化。
楼主可以自行查找一下那个函数。

如果查找不到可以到群里 @jobs

助工
2012-08-28 12:19:45     打赏
3楼

已经解决,谢谢jobs的提示


助工
2012-08-28 14:38:32     打赏
4楼
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()中调用初始化操作函数

助工
2012-10-16 22:31:55     打赏
5楼
好帖!赞一个!

助工
2012-10-18 17:33:30     打赏
6楼
说的好 顶一个

菜鸟
2013-09-02 10:25:17     打赏
7楼
我想问一下,那个main(1U)中的“1U”是什么意思来的呢?

菜鸟
2013-09-02 10:27:28     打赏
8楼

还有

/***********************************************************************************************************************
* Function Name: R_TAU0_Create
* Description  : This function initializes the TAU0 module.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
void R_TAU0_Create(void)
{
    TAU0EN = 1U;    /* supplies input clock */
    TPS0 = _0000_TAU_CKM0_FCLK_0 | _0000_TAU_CKM1_FCLK_0 | _0000_TAU_CKM2_FCLK_1 | _0000_TAU_CKM3_FCLK_8;
    /* Stop all channels */
    TT0 = _0001_TAU_CH0_STOP_TRG_ON | _0002_TAU_CH1_STOP_TRG_ON | _0004_TAU_CH2_STOP_TRG_ON |
          _0008_TAU_CH3_STOP_TRG_ON | _0010_TAU_CH4_STOP_TRG_ON | _0020_TAU_CH5_STOP_TRG_ON |
          _0040_TAU_CH6_STOP_TRG_ON | _0080_TAU_CH7_STOP_TRG_ON | _0200_TAU_CH1_H8_STOP_TRG_ON |
          _0800_TAU_CH3_H8_STOP_TRG_ON;
    /* Mask channel 0 interrupt */
    TMMK00 = 1U;    /* disable INTTM00 interrupt */
    TMIF00 = 0U;    /* clear INTTM00 interrupt flag */
    /* Mask channel 1 interrupt */
    TMMK01 = 1U;    /* disable INTTM01 interrupt */
    TMIF01 = 0U;    /* clear INTTM01 interrupt flag */
    /* Mask channel 1 higher 8 bits interrupt */
    TMMK01H = 1U;    /* disable INTTM01H interrupt */
    TMIF01H = 0U;    /* clear INTTM01H interrupt flag */
    /* Mask channel 2 interrupt */
    TMMK02 = 1U;    /* disable INTTM02 interrupt */
    TMIF02 = 0U;    /* clear INTTM02 interrupt flag */
    /* Mask channel 3 interrupt */
    TMMK03 = 1U;    /* disable INTTM03 interrupt */
    TMIF03 = 0U;    /* clear INTTM03 interrupt flag */
    /* Mask channel 3 higher 8 bits interrupt */
    TMMK03H = 1U;    /* disable INTTM03H interrupt */
    TMIF03H = 0U;    /* clear INTTM03H interrupt flag */
    /* Mask channel 4 interrupt */
    TMMK04 = 1U;    /* disable INTTM04 interrupt */
    TMIF04 = 0U;    /* clear INTTM04 interrupt flag */
    /* Mask channel 5 interrupt */
    TMMK05 = 1U;    /* disable INTTM05 interrupt */
    TMIF05 = 0U;    /* clear INTTM05 interrupt flag */
    /* Mask channel 6 interrupt */
    TMMK06 = 1U;    /* disable INTTM06 interrupt */
    TMIF06 = 0U;    /* clear INTTM06 interrupt flag */
    /* Mask channel 7 interrupt */
    TMMK07 = 1U;    /* disable INTTM07 interrupt */
    TMIF07 = 0U;    /* clear INTTM07 interrupt flag */
    /* Set INTTM00 low priority */
    TMPR100 = 1U;
    TMPR000 = 1U;
    /* Set INTTM01 low priority */
    TMPR101 = 1U;
    TMPR001 = 1U;
    /* Set INTTM02 low priority */
    TMPR102 = 1U;
    TMPR002 = 1U;
    /* Set INTTM03 low priority */
    TMPR103 = 1U;
    TMPR003 = 1U;
    /* Set INTTM04 low priority */
    TMPR104 = 1U;
    TMPR004 = 1U;

这里面的“0U”又是什么意思来的呢?

求指点……!!!!


菜鸟
2013-09-02 12:54:50     打赏
9楼
U就是 unsigned 的缩写啊 

菜鸟
2013-09-02 13:19:40     打赏
10楼

从什么地方定义的?


共10条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]