完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
给各位大佬倒茶,想求助下在开启RT_USING_POSIX时,串口getc()函数到系统getchar()函数之间的调用路径。 小弟在调试大佬编写的的web_terminal组件时发现如果开启了RT_USING_POSIX和RT_USING_DEVICE时,宏配置开关为: 此时的finsh_get_device(),finsh_set_device()无效,web_terminal不能正确的将数据读取至finsh模组,想通过自己的方式来实现web_terminal这部分所需要的接口,同时也能学习下finsh的运作原理,但是跟踪到getchar()函数时断了思路,始终不明白串口的数据是怎么样输出到这个函数并返回的 在未启用RT_USING_POSIX时都还能理解,通过设备注册的read,write函数来传递数据,单是当启动了RT_USING_POSIX,就找不到数据传递路径了,特在此求助,感谢回复。 |
|
相关推荐
5个回答
|
|
|
|
|
|
感谢你的回复朋友,我之前描述的有歧义,实在抱歉。我就是尝试单步跟踪无果后才来提问,结果并没有显示出明确的调用关系。仍然无法弄明白getchar()的实现原理 这里getchar()的定义是getc(stdin),但是看汇编显示调用的是fgetc(),检索整个工程确实有fgetc()函数,但是从map文件分析,这个函数并没有被链接至目标文件,也就是说这个被调用的fgetc()并不是这个文件中的fgetc(). 这个fgetc()中间经历了一些列过程,最终到了 _sys_read()函数。 我现在的疑问就是为什么最终会走到_sys_read()函数,有没有这里运作原理的资料内容可以学习。还望不吝赐教 |
|
|
|
(1)搜下struct rt_uart_ops,看看是否存在?类似于下面的,这个是串口最终调用的收发接口
static const struct rt_uart_ops mcu_uart_ops = { .configure = mcu_uart_configure, .control = mcu_uart_control, .putc = mcu_uart_putc, .getc = mcu_uart_getc, }; (2)rt_hw_usart_init 这个函数是否存在? (3)list_device,看下是否有串口设备。 怀疑你操作了空设备(空气) |
|
|
|
以上这些都是存在的,设备也是正常使用的,只是对调用过程比较谜。不知道你手上的板子方不方便这样调试,如果方便的话,可以截一张开启了“RT_USEING_POSIX”后的从get_char()跳转到哪里的截图吗?万分感谢
|
|
|
|
遇到同样的问题,暂时没有思路,但是只要把RT_USING_POSIX关闭finsh就可以输入,插个眼等待后续
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
AI模型部署边缘设备的奇妙之旅:边缘端设备的局域网视频流传输方案
914 浏览 0 评论
1350 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
5505 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1756 浏览 0 评论
2728 浏览 0 评论
76581 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-8 11:54 , Processed in 0.836553 second(s), Total 79, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号