完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
问题硬件:GD32VF103CBT6
IDE :NucleiStudio IDE Version:2021-02 Build id:20210202 问题代码: 为例避免干扰,已经最大限度减少无关代码;已省略中断处理函数内容。 void USART2_IRQHandler() {}int main(void){ printf("func=%x\r\n",USART2_IRQHandler); // 打印中断函数的时间地址// ECLIC_Register_IRQ(USART2_IRQn, ECLIC_NON_VECTOR_INTERRUPT,ECLIC_LEVEL_TRIGGER, 1, 0, (void *)USART2_IRQHandler); ECLIC_SetVector(USART2_IRQn, (rv_csr_t)USART2_IRQHandler); int vector_usart2 = ECLIC_GetVector(USART2_IRQn); // 获取中断向量表中中断函数的地址 printf("vector=%x\r\n",vector_usart2); return 0;} 问题现象1: 操作步骤: 新建工程:File -> New -> C/C++ Project -> C++ Managed Build -> Nuclei SDK Project For GD32VF103 SoC -> gd32vf103c_longan_nano -> baremetal_helloworld 替换源码文件内容为以上内容。 当源码名为main.c时,可以正常输出: func=800168a vector=800168a 当源码名为main.cpp时,输出: func=800168a vector=0 通过GDB单步调试,以及肉眼disaeembly比对,均未发现任何有意义的线索 问题现象2: 使用rv_start新建工程在QEMU中正常 |
|
相关推荐
1个回答
|
|
不是说C代码写的可以放进flash里面,C代码写的也没有放进去,只有因为原本中断向量表里面定义的服务程序名跟你这边申明的是一样的,所以看起来是有效的。C++之所以不行,是因为按照你原先的写法,C++里面会把那个函数名给改掉,你可以看下编译后的map文件,这样就跟原本中断向量表中的对应不上了,如果中断向量表没有放在flash里面,是程序可写的话,你这么操作是没啥问题的,不管是C还是C++
|
|
|
|
只有小组成员才能发言,加入小组>>
在软件SDK中选择不同的下载模式时,是哪个部件更改了QSPI0中寄存器的值?
406 浏览 2 评论
cmt_instret_ena的使能为什么要排除branch等指令造成流水线冲刷的情况?
549 浏览 1 评论
e203 rom启动仅仅是引导到itcm执行指令吗?flash启动就是加载指令到itcm中吗?
575 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 13:33 , Processed in 0.668824 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号