看了F429视频感觉HAL库的处理方式感觉好麻烦

2019-07-20 15:49发布

看了串口中断和外部中断,在中断里面去调用函数,而且调用的函数里面再去调用回调函数,难道调用函数不要开销,像标准库一样直接在中断里面写要实现的功能多好,还有串口中断调用那个函数,还要先确定接收到的是几个字符,万一数据有长有短,并且不知道即将来的数据个数,又怎么去处理?刚从标准库过来,还不习惯,还望大神解惑
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
whyviking
1楼-- · 2019-07-22 02:33
而且原子的源码里  串口的处理是在回调函数中的另一个数组,在原子的源码里UART_Receive_IT()中的buffer实际上只用了1个位,然后在中断回调里不停的读buffer[0]到自己的数组里。结束符是0X0D 0X0A 来判断,这里0X0D 0X0A 是根据调试助手的发送新行选项来的也就是   你要想自己的写的话可以用定时器定个100ms 然后接收一个字节就喂一次狗,定时器溢出了就说明接完了
1491430114
2楼-- · 2019-07-22 07:12
 精彩回答 2  元偷偷看……
whyviking
3楼-- · 2019-07-22 09:31
1491430114 发表于 2017-3-26 20:17
在UART_Receive_IT()中有这么一个判断if(--huart->RxXferCount == 0)后才进回调函数,如果按最大设置,可 ...

RxXferCount 的值是1   每收到一个字节都会调回调函数  并且再重新调用HAL_UART_Receive_IT()
1491430114
4楼-- · 2019-07-22 10:33
whyviking 发表于 2017-3-26 20:12
而且原子的源码里  串口的处理是在回调函数中的另一个数组,在原子的源码里UART_Receive_IT()中的buffer实 ...

在标准库里面我直接定义一个临时变量,让它自减,如果减完前接收到一个新的字符就重置,减完所用的时间大概为串口接收三五个字符的时间,这样可以一次性接收一组完整数据
1491430114
5楼-- · 2019-07-22 16:00
 精彩回答 2  元偷偷看……
1491430114
6楼-- · 2019-07-22 16:56
whyviking 发表于 2017-3-26 20:33
实际上 类似Linux系统 这种回调函数的模式还是挺多的。 这么做的目的我认为主要还是把软件分层,做上层应 ...

或许真如你所说吧,而且ST这么大个公司主推HAL库想必也不会自砸招牌的,先忍着学下去,期待哪一天会有意想不到惊喜吧

一周热门 更多>