完善资料让更多小伙伴认识你,还能领取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 个讨论
|
|
只有小组成员才能发言,加入小组>>
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】RA4E2使用之SHA256加密解密
755 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】RA4E2使用之AES128加密和解密
632 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】+小白折腾瑞萨RA系列全过程02
770 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】按键点灯:使用轮询方式和中断方式实现
856 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】07、ADC采集PWM输出的电压值
854 浏览 0 评论
1886浏览 4评论
【RA-Eco-RA0E1-32PIN-V1.0开发板试用】RA0E1-32PIN-V1.0开发板测试一下点灯
2525浏览 3评论
【RA4M2设计挑战赛】智慧农业监测RA4M2采集数据上传阿里云
1642浏览 2评论
3060浏览 2评论
1261浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-28 13:56 , Processed in 0.445799 second(s), Total 47, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号