打印
[技术问答]

谁能具体讲讲UART_loopback_demo中这个回调函数的操作过程?

[复制链接]
1636|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
waiter|  楼主 | 2016-7-20 20:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
ianhom| | 2016-7-21 08:59 | 只看该作者
简单说来就是:
1、定义了一个函数指针UART_Callback;
2、调用UART_SetCallback(UART_HandleInt);,把UART_HandleInt这个函数的地址赋值给UART_Callback,这样就可以通过UART_Callback来调用UART_HandleInt。
3、发生UART中断
4、在中断处理函数UART0_Isr中调用UART_Callback

使用特权

评论回复
板凳
waiter|  楼主 | 2016-7-21 16:13 | 只看该作者
本帖最后由 waiter 于 2016-7-21 16:17 编辑

谢谢 ianhom。下图是我对这个“回调函数”的关联关系的整理图:
到了UART_Callback(UART0); 这一步后,我就没有完全理解了。主要有以下几个问题:
1,你说的“UART0_Isr这个函数与uart0中断事件的关联建立就是在isr.h中”,这个我可以理解。调用 VECTOR_028就相当于调用 UART_Isr。
但是, UART0_Isr的功能是UART_Callback(UART0);  而UART_SetCallback中的功能是:
        UART_Callback = pfnCallback;
这两者之间是怎么联系起来的?
    ------ main函数中函数调用 UART_SetCallback(UART_HandleInt);,我理解就是"注册回调函数",如果UART0有中断产生,就会执行UART_Callback(UART0),就相当于通知main函数,回调函数该执行了,因为是执行UART_Callback(UART0)触发的,所以回调函数执行时,就是 UART_HandleInt(UART0),是这样吗?
2,上面我把“中断”用红色粗体表示,是因为我没有理解什么情况下会产生中断。main函数中,有如下语句:
    UART_DisableInterrupt(TERM_PORT, UART_RxBuffFullInt);
    UART_DisableInterrupt(TERM_PORT, UART_TxBuffEmptyInt);
    UART_EnableInterrupt(UART1, UART_RxOverrunInt);
  我理解是disable了一些UART中断,并使能RXOverRun中断,其他的没有特别操作的,就是默认的状态。
  至少这里就是UART1有RxOverRun中断后,才会触发回调函数,是这样吗?
       但是我如果在UART_HandleInt中加一个打印函数,再运行这个demo,发现从UART1(串口调试工具)输入一个字符,这个打印函数并没有运行,这是怎么回事?             ====, 刚刚受自己写这个帖子的影响,“overrun”,是不是要溢出才会触发,,,于是我在串口工具中,一次输入很多字符,发现这个打印函数工作了,也就是说main函数中设置的是在产生溢出时才触发回调函数...
        === OK,再改改,只要UART1有输入就触发shishi....................
https://bbs.21ic.com/forum.php?mod=attachment&aid=NjkzMzE0fGFjMTc1ZTBmNGIzNTlmOTdlOGJiYWVmYWUzNjBkZmRhfDE3MzIyNjYwNzM%3D&request=yes&_f=.png

uart_loopback_demo回调函数.png (420.08 KB )

uart_loopback_demo回调函数.png

使用特权

评论回复
地板
waiter|  楼主 | 2016-7-21 22:12 | 只看该作者
谢谢 ianhom。
我今天自己详细分析了一下,感觉基本搞清楚了这个回调函数。并且也算更加理解了UART的使用。附件是我的作业,欢迎大家拍砖!

回调函数及其UART中的回调理解.rar

56.21 KB

使用特权

评论回复
5
waiter|  楼主 | 2016-7-22 07:55 | 只看该作者
顺便说说,上楼的文档适合初学者....:)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

187

帖子

2

粉丝