本帖最后由 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=NjkzMzE0fGQ2ZDJmOWNkfDE3NTYxMjIzNjR8MHw%3D
|