完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
新接触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+安装目录CA78K0RV1.41Srccc78k0rsrc中的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()中调用初始化操作函数 |
|
相关推荐
3 个讨论
|
|
只有小组成员才能发言,加入小组>>
785 浏览 0 评论
【瑞萨RA6E2】 配置Keil开发环境+使用按键控制LED+串口/调试器烧录程序
525 浏览 0 评论
1087 浏览 0 评论
【瑞萨RA6E2】驱动 WS2812 实现 RGB 跑马灯效果
1008 浏览 0 评论
776 浏览 0 评论
2581浏览 6评论
【RA-Eco-RA0E1-32PIN-V1.0开发板试用】RA0E1-32PIN-V1.0开发板测试一下点灯
3266浏览 3评论
3718浏览 2评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】使用Jlink RTT完成printf打印功能
1471浏览 2评论
【RA-Eco-RA0E1-32PIN-V1.0开发板试用】配置开发环境和编写一个点灯程序
2378浏览 2评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 12:31 , Processed in 0.800203 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
10086