完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我写了这样一个函数
int drv_test_hw_init(void) { rt_kprintf("in drv_test_hw_init 000 "); return 0; } INIT_DEVICE_EXPORT(drv_test_hw_init); 这些代码放到bsp/my_board/drivers/uart_drv.c中可以正常启动,也会有打印drv_test_hw_init; 放到另外一个c文件里面就报错,如图,从map里面看 drv_test_hw_init的地址0x8000b800 __rt_init_drv_test_hw_init的地址0x8008b460,而从报错信息看 8008b460对应的函数是8008bbf8 initialize desc = 8008b460 desc->fn = 8008bbf8 undefined instruction: |
|
相关推荐
4个回答
|
|
你在使用 rt_kprintf 的时候,在这之前需要把串口初始化一下,放在 uart_drv.c 里面的时候系统编译后你可以看一下 map 文件,自定义的 drv_test_hw_init 应该在串口初始化之后,放在别的文件自定义的 drv_test_hw_init 可能导致在串口初始化之前进行调用了,所以导致了错误。
自定义的话,可以使用别的自动初始化比如 INIT_APP_EXPORT ,这样就能避免类似的错误了。 |
|
|
|
降低一个等级后,component到app均可,再放到不同文件中编译应该不会出问题了。
自动初始化时,如果需要串口输出,不要用int device等级,usart在这个时候都不一定成功初始化了,在函数中调用rt_kprintf当然会出问题。 lz debug一下,并且结合查看map文件中.rti_fn.3的函数顺序,看看到底是usart先被驱动,还是你自定义的drv_test_hw_init函数先被调用,应该就能知道原因了。 断点设置rt_components_board_init函数中,即可清晰看到各个自动初始化的调用顺序。 |
|
|
|
换个文件就出错?怎么可能。
这几行代码无论放到那个c文件里,只要它被编译了。最终的执行顺序都是一样的。 不一样的可能是函数实体在flash中的位置。还可能影响到全局变量内存布局顺序。 可以肯定的是问题不在这个函数上,别在这里浪费时间 |
|
|
|
大概率是在串口初始化之前被调用了吧
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
1209 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1058 浏览 0 评论
1444 浏览 0 评论
1371 浏览 0 评论
1023 浏览 0 评论
74580 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 10:26 , Processed in 0.748267 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号