mackcheng

导航

对接外部功能模块的一点心得

1.直接采用DMA+空闲中断 来及时接受串口数据 能够解决大部分的接受数据

2.针对某些模块 空闲中断不能解决,原因是传输数据过程中,模块传递的某些字节超过了空闲中断的时间,导致会接受不完全

  因此采用串口超时中断+DMA ,串口超时可以设置超时的字节数,假如设置三个字节超时。意味着当串口寄存器超过了三个字节的时间没有数据,则默认传输完成,然后在超时中断里面,第一步关闭DMA,获取已传输的长度,处理已接收到的正常数据并处理,继续开启DMA 等待下一次接受

3.回调函数的使用,可以避免 建立一个全局变量,然后在大循环中判定全局变量的状态,这样功能模块的移植性增强

 使用要点:  两个.C文件 x.c和 y.c     函数V是y.c文件里面的函数

                 在x.c中

                  1.定义一个函数指针类型  2.创建一个函数指针变量 p 3. 创建一个注册函数(作用是 把需要调用的函数V对应的指针,赋值给p)

                   4.创建一个调用函数 S内容是 判定P是否被注册,如果被注册,则直接跳转函数V

                   5.注册函数实质就是把需要调用的函数V的指针赋值给了P,写好一个通用的调用函数S ,假如要移植,只需要修改y.c文件里的函数V即可,这样就减少了x.c文件的修改

 

posted on 2023-03-06 11:46  一个小小种田人  阅读(34)  评论(0)    收藏  举报