同学们好,我是超子,那么今天呢,我们进入到定时器篇章第二十六节,我们再来做一个三通道的疑惑啊,只不过本次呢,我们就不去接他这个无刷电机的霍尔传感器了 啊,我们呢,也就不走这个 ad 边缘了啊,也就不走 trc, 那么同时呢,也就不用这个铜模式的复位了啊,我们就走一个我们,呃,前面章节啊,就是最基本的一个补货通道的一个路径啊,也就是我们什么呢,我们给他画二图啊, 我们过这个通道一的绿波,对吧?好,过了绿波之后啊,我们这个边沿的补货要么是上升,要么是下降,对吧?那么对,幺零三啊,过绿波之后是没有双边沿的对吧?好,那么这个时候呢,我们来看啊,通道 c 是一, c 是二, c 是三啊,依然是走这个异货, 对吧?到这个翼或门,然后这个单刀双置开关啊,依然呢是制造咱们翼或门的输出。好,此时咱们通过 f p e 啊通道一的滤波, 记住,到咱们 input capture 一啊,补货通道一啊,咱们呢也就不用这个从模式的复位了,对吧?啊,你每次呢就把这个补货值补货到 c c 二一,对吧,然后呢你这个计数器呢,你就接着往上,记住啊,每次补货之后,你就接着往上记,对吧?没有清零这个操作了。 好,咱们先把这个基本的路径啊,咱们给他拿下。 好,咱们放到我们的这个位置,咱们一会呢就按照这个路径啊,咱们去修改一下咱们的程序。 好,本次呢,我们呢,呃,就用数码管上方的这个 s w 五, s w 六和 s w 七啊,我们这三个按键啊,连接上我们 a 八, a 九和 a 十,好,然后呢,这三个按键啊,我们来看一下他们接的都是什么按键,接的是 d, 对吧?好,所以 按下的时候啊,是低电平零,对吧?那么没有按下的时候,那必须是相反的,什么高电平一,对吧?好,所以说你看 l 口内部开始拉电阻,好,那么在按下的这一瞬间会产生一个什么下降点, 好,那么这个时候呢,我们走的是通道一的 fp 啊,我们呢只要么补货上升,要么补货下降二选一,好,我们选的是什么呢?补货按键按一下时的下降沿,好,那么上升沿呢,就是抬起的时候就不补货了, 对吧?和咱们这个上一个章节,呃,霍尔传感器是不一样的,对吧?因为霍尔咱们走的是谁呢?霍尔,咱们走的是异地,异地就是边沿,只要有边沿变化,哎,他就补货, 哎,所以这个区别点啊,咱们要,呃,要知道,好,然后呢,咱们呢,就是捕获两两案件之间的一个间隔,对吧?也就是 呃, a 八, a 九 a 十所对应的 s w 五, s w 六和 s w 七,好,那么这个两两按键啊,五六之间对吧?六七之间,七五之间,对吧?或者是五五之间,六六之间, 哎,也就是说甭管你按哪个按键啊,就只要我检测到或者捕获到了两个啊有效的下降沿,那么我可以计算一下他们之间的这个,哎,间隔值,对吧?好,那么此时呢,我们不使用铜膜式辅助功能了,所以说我们要干什么呢?我们是不是要打开我们的更新中断,是不是要对这个圈数进行哪家了? 哎,那么如果说我这个间隔时间比较长的话,套圈了,你得能什么呀?哎,你得能给他就计算出来,对吧?嗯,因为对于定,因为,对于霍尔而言啊,你看我们上一个章节,对吧?咱们接的是,呃,无刷电机的霍尔传感器啊,电机转动起来速度是非常快的,对吧?所以他间隔时间呢,不会太长啊,那么对于本 本次实验呢,咱们聊两按键啊,咱们就把这个圈数啊,咱们给他统计上,好,咱们掌握好这些点之后呢,咱们就开始做这个程序, 好,我们来看程序啊,那么首先呢,呃,本次程序呢,我们开了更新中断,对吧?我们可以记住这个圈数了,所以说呢,我们把这个分频值啊,给他拉低一点啊,那么一个数呢?零点一毫秒,那么这样话呢,咱们这个技术的分辨率啊,他就比较高,对吧? 好,然后呢,我们跳转到处置化啊,首先来看我们的通道,那么此时咱们这个路径啊,我们是不是不走这个异地了,哎,是不是不走这个 trc 了,哎,我们就走这个什么通道? f 一的滤波 好,通道 f 一的滤波连接咱们通道一的补货,哎,那这个这个方式就是直连,对吧?哎,那就是 direct 好, direct 好,我们再来看啊,本次呢,我们捕获什么呢?只捕获按键按下的下降眼,对吧?好,那我们就是 folly, 好,我们来看这句话啊,呃,我们现在需要用到更新中断了,对吧?而且我们这个 star 啊, star 挂 it 的话,哎,他只会开什么呢?他只开,哎,补货中断,对吧?所以说我们这个更新中断呢,是我们自己手动的给它打开,对吧?好,我们再往后看。 好,那么这个是什么呢?是不是单刀双制开关的设置在我们的路径当中,对吧?我们依然是三通道易货,也就说这个单刀双制开关是依然制到上方连接我们易货门的输出,对吧?啊,所以这个呢,不用改啊,然后呢,我们这个异地边沿啊,还有我们这个铜模式的辅位啊,咱们就不用了, 对吧?咱们现在走的就是最基本的一个通道路径啊,好,把它注视掉。然后呢? star it 啊,开补货中断,开,开我们的通道一。 好,我们再来确认一下 s w 五到 s w 七啊, a o 口需要开内部的上拉,对吧? a 八到 a 十,好,我们确认一下啊, up up up up, 内部上拉没有问题。 好,然后此时咱们用到了更新中断,那我们是不是需要把这个更新中断再给他打开啊?好,打开我们的优先机啊,打开我们的使能。好,然后转到 interrupt 点 c 当中, up, 中断,更新中断的中断服务处理函数,我们是不需要打开。好,打开, 那么然后呢,我们需要去关注一下这回调了啊,回调,首先呢,咱们需要把这个更新中段的回调来,咱们把这个注释给他去掉。好,在这个回调函数 当中呢,我们就是对这个 counter 就是对这个圈数啊进行计数。好,然后呢,最后我们重点来了啊,那么本节的重点呢,就是我们来处理一下通道一的补货。好,补货之后你要干什么呢?计算这个间隔时间,好,我们来画一画图啊, 此时我们先来思考下这个问题啊,就是当我们抚慰之后,对吧?我们现在计算的是两两按键,好,系统抚慰之后啊,我第一次假设第一次啊, nsw 五,那么这是第一个按键,对吧?还没有两两嘞,所以说在第一次按键啊,我们是不输出信息的, 对吧?哎,我们只是什么?只是进行一次记录,哎,就记录一下 s w 五当前的补货值,补货到的计数器的值,然后呢,还有什么还要加上咱们这个累计的这个圈数,哎,就对它进行一个记录,好,那么假设我第二次,哎,我又摁了个 s w 六,对吧?啊,好, 好,那么这个时候呢,我这个 s w 六的值,我减去 s w 五第一次的,哎,然后这个时候呢,我们通过 printf, 哎,我们可以输出到咱们的什么串口条的助手之上,哎,就是六和五之间的什么这个时间间隔,对吧?好,那么这个时候呢,咱们注意个问题啊, 我如何来判断你是第一次案件呢,对吧?而且呢,我们两次案件之间的间隔,我们是要通过一个减法来实现的, 对吧?不像咱们霍尔了,哎,你每次呢都是有这个抚慰功能,对吧?你每次都从零记啊,然后呢,也不不会产生套圈,对吧?你就直接补货值就完事了。所以这时候你看啊,咱们这样来做, 我们做一个变量啊,可以把它作为一个标志位,哎,也把它作为什么呢?作为一个,呃,记录值,好,我们边写来边说啊,由于你的三十二, 呃,我们可以给它起个名字啊,叫 old 旧的,对吧?旧值好,而是它的初始值呢,我给它设置一个什么呀? u h 三十二的最大值 f f f f, 好,给它设置成了一个最大的一种情况,好,那么这时候你看啊,我要来判断它 if, 如果说啊,它等于什么?它等于零 x 一二三四五六七八等于最大值,好,此时我认为什么呢?我认为它是第一次按键,就是第一次按我这个 s w 五, 好,那么大家思考一个问题啊,就是当我系统处理化之后,对吧?我在第一次按键的时候,哎,我这个值应该是比较小的情况,对吧?你不可能就是说你刚 话,对吧?你刚开始按键就达到了一个 you inter 三十二位的一个最高的值, f f f f, 那是不会的,对吧?哎,所以说我们在第一次的时候啊,这个 o 的 number, 哎,可以把它作为一个标记位, 对吧?哎,如果说你等于等于等于这个 f f f, 就表示是系统刚刚开始初始化,对吧?因为 o 的 number 是我在系统初始化的时候,对吧?我在声明建立这个变量的时候给它赋予的一个什么?一个初始值, 对吧?好,进了我们这个 number 啊,进了我们这个衣服分支之后干什么?我要赶紧改这个 number, 哎,这个 number 为什么要改?表示什么呢?表示我第一次按下了 s w 五了, 对不对?好,那么这个时候呢?我这个 open number 可以,又能当标记位,又能干什么?又能记录把谁记下来?把 s w 五按下时所对应的这个什么? 看啊?首先把这个谁记录下来,把我们这个补货值给他记录下来,对不对?好,然后还要还要把谁记录下来?把这个圈数,对吧?好,那我们就是什么?就是 counter 乘以六五五三六, 对不对?好,那么说,对于这个 ef 分支而言啊,它首先是做了一个标记位, 哎,可以判断出来,我这是系统初始化之后的第一次按键,所以说我在这个 if 里面,我没有调用 u e print for, 我没有输出, 对吧?因为第一次按键呢,两两间隔,还没两次呢,你怎么间隔呀?你怎么输出啊,对吧?好,然后呢,判断出来第一次按键之后,我又把这个 o 的 number, 哎,作为了一个什么?作为一个记录值记录下来,我第一次按下 s w 五十所对 对应的什么?这个数,对吧?好,然后呢,我们再来看啊, 好,我们再来看 l s 这个分值。好,假设此时啊,我又按下了 s w 六, 好,那么这个时候,你说我这个义务还能还能成立吗?还等于 ffff 吗?不等于了,对吧?因为我已经什么在第一次按 sw 五的时候,我把 onm 值变了,对吧?变成你 sw 五按下时的技术值了。 好,所以这个时候在 l 这个分支,我们是不是就意味着什么?至少现在有俩按键了,对吧?好,我就可以通过减法来运算进行什么,进行时间间隔的输出了, 对不对?好,我们来看一下啊,那么在 l 四分之内,我们就应该对这个值进行输出了。好,间隔时间,我们现在注意啊,一样是要减法。减法。好,首先 听到了吗?呃,我们先来补货, s 就是第二次按下时,对吧?这个计数器的补货值,然后还要加上什么呀?是不是要加上我们这个圈数的这个记录啊,对不对?哎,加上咱们这个圈数的记录,好,然后呢?我们干什么呢?两两相减啊,好,我们减谁? 我们是不是要减去第一次的 o 的 number 啊,对不对?好,不要忘了加这个括号啊,然后呢?我们在什么呀?哎,把这个技术值两两一相减计算出来这个间隔,然后我们现在此时要除以十了啊,因为刚才我们改了,对不对?我们改成什么?零点一毫秒了, 哎,所以说我们在 l 四这个分值内啊,通过 print for 输出到串口上啊,进行一个什么一个减法的运算。好,此时大家我们再来想一下这个问题啊,那么如果说啊,我现在是摁了两次了。好,那如果说我是第三次呢?我第三 三次按了个 s w 七,好, s w 七应该减谁,对吧?好,你像现在这个 o 的 number 啊,现在这个 o number 记录是 s w 五的时间,对不对?好,如果是第三次 s w 七,我说你说我是减六呢还是减五呢? 完了,自然是减六,是两两间隔,你要减五的话,那就相当于这三次按键就第三次和第一次间隔,那这个逻辑就不对了,对吧?哎,所以说我第三次按下 sw 七之后,我要减 sw 六的值,好,那你说我把 sw 六值记在哪?哎,那是不是把它记到咱们 o 的里啊, 对不对?哎,所以就是说呢,我们再来往后看啊,我们由于 printf 输出之后,那我再把这个 o 的 number, 哎,在记录上。什么?我本次就是第二次 n s w 六十的啊,这个补货值 给它记录下来,对吧?以便于什么呢?以便于我第三次,对吧?比如说我第三次按下 s w 七了,对吧?哎, s w 七可以减, s w 六可以输出,好,那么假设我第四次啊,我又,我又按了个 s w 五, 好,那么这个时候 s m 六五,是不是应该再减五?第三次的 s m 六七了,哎,这个 s m 六七呢?也就是说我们每次,对吧输出完了之后,都会把本次的寄过到这个 o 的 number, 以便于我们下次怎么再减这个 o 的 number, 对不对啊?那么同学们,如果说咱们有哪些地方没有没有倒过弯的啊?咱们下来之后呢,自己再好好绕一绕,好,咱们现在变异啊,看看程序呢,有没有什么问题? 好,没有错误的情况下呢,咱们打啊,下载程序,我们打开我们的秒表啊,好,打开咱们的 创口条助手,好,此时你看他下载完了之后还有更新了,对吧?他六秒多钟就会产生更新,对不对? 好,打开咱们的摄像头。好,那么第一次按键的时候啊,他不会有输出,对吧?好,你看我第一次假设咱们按个 s w 五啊,好, s w 五要和这个开始一起按,对吧?嗯,就开始计数了,对吧?好, 按下,好,此时你看他并没有输出,对吧?因为这是只是第一次按键,对吧?好,那么这时候如果说我按 f w 六了, 呃,有两次了,对吧?可以计算两两间隔了,他就有输出了,对不对?好,那么这个时候我用这个标记啊,用这个标记,好, s w 六来一次,行吧,我再来一次 w 七的,好,我再来一次 s w 五的,好,你看,此时有三次这个间隔时间,对吧? 咱们第一次时间比较长啊,十四点九五,哎,十四点九三五,好,第二次三点五七啊,三点五七,第三次二点六五,这是二点六六啊,咱们这个同步时间呢?啊,还可以,是吧?好,那么这个时候你看又过了一段时间,我可以再按一次,对吧?哎,我再标记一次, 你看呢?是二十一点一二,二十一点一一。好,那么今天啊,咱们呢就通过,呃,这种方式啊,咱们呢?呃,我们打开这个手册啊,打开这个讲义啊。 哎,咱们走了一个最通用的一种方式,对吧?哎,就是通过哎,通道一的绿波啊,咱们这块呢接一个这个疑惑。 ok 啊,咱们今天的任务完成。
粉丝1.2万获赞2.0万

stm 三二 hail 库定时器中段配置本期教大家使用 cobamx hail 库配置一下定时器中段,打开我们之前视频串口重定向的工程文件夹一点 ioc 结尾的这个是 cobex 工程,我们打开它 可以看到之前的配置还在,我们可以基于这个再次配置配置定时器,在这边 timer 选项看, 如果是第一次配置工程,不要忘记了这里的时钟和 debug 配置。和上期标准库定时器中断视频一样,我们还是以 t m 二举例, 上方这里有很多配置选项,这都是定时器的其他功能,我们本期视频只需要配置一下这里定时器的时钟源,选择内部时钟源。下方这里第一个就是预分频值,我们填写七千 一百九十九,第二个参数就是技术模式,选择向上技术。第三个参数就是自动重装载值,我们填四千九百九十九,下面这个参数是自动重装载使能选择 in a book, 下面我们该配置中段时能了,选择这里的 nvic 选项卡,勾选这里的 enable 就可以了,这样零点五秒定时中段就配置好了,你也可以在这里的 nvic 选项卡更详细的配置中段,这个就是刚才勾选的 tm 二中段, 可以在这里选择中断优先级分组,现在我们生成。打开一下代码,可以看到这里有些错误,就是因为之前的头文件没有写到 begin 和 end 之间,导致丢失了包含的头文件,重新包含一下头文件就好了, 可以看到这里已经没有错误了,我们编译一下生成的 hell 库代码已经帮我们初始画好了定时器,现在定时器还没有开始工作,我们打开定时器中断,使用 hltm basedard it 这个函数来开启定时器中断,可以右键看下参数, 参数只有一个,就是填写 team 结构体句柄的地址,回到这里填写 team 二结构体地址。 想让定时器中断开始正常工作,我们还需要写一下中段函数。中段函数本来应该在这里, stm 三二 fe x x c 的电 a 存件内,黑奥库又在这里封装了一下中段处理函数, 我们可以搜索看下这个函数,这里是这个函数的原型,因为定时器的中段有很多,可以看到里面有很 多中断处理,我们要找到 update 更新中断,这个就是定时时间到的中断,可以看到里面中断处理调用了 h a l team period elapsed callback 这个函数,我们搜索一下它的原型, 这个就是他的函数原型了。这个函数其实就是中段处理的回调函数,他是若定义,我们可以重写这个函数,将中段需要处理的任务都放到这个函数里,我们复制一下,回到内函数,把它粘贴到下方,这里就可以了。 接下来我们写一下测试代码,让他每零点五秒加一次数字,并打印一次。你好,世界 测试代码就写好了,将上面这里之前的代码屏蔽掉,现在就可以编一下再进版子了,我们看一下现象吧。 连接好串口工具,打开串口助手,配置好波特绿等。打开串口,复位一下板子,可以看到已经正常打印内容了。今天的视频就到这里了,欢迎留言评论,我们下期见。

浅浅尝试一下 stm 三十二 hell 库编程, hell 库是 st 公司为 stm 三二的 mcu 推出的抽象层嵌入式软件,用户可以不需要关注底层复杂的外设初始化配置,而可以直接使用外设,极大地增加了开发者的开发效率。 我们现在就来浅浅点个灯吧,这是本期用到的工具, stm 三二、 cob max 和 q 五。这个软件可以到官网下载,可以看到这个软件就是初始化代码生成器,用来生成 help 初始化代码,我们现在打开它, 这就是打开后的页面,第一次安装后可能没有芯片支持包,我们在这里安装一下,选择 stm 三二 f 一,我这里已经安装好了,你如果 如果没有安装的话,就选择这个最新版本,然后点击 install 等待安装结束就好了。这个地方就是打开已经有的项目, 这边就是新建项目了,第一个是新建项目,第二个是基于 st 官方的一个开发版新建项目,第三个是基于一个视力工程新建项目。我们选择第一个 跳出的这个页面是要选择我们的芯片型号,可以在这里搜索,也可以在下面寻找,不过由于芯片型号太多,我们直接搜索就可以了。我使用的是 stm 三二 fe 零三 c 八 t 六,我们点击一下这个 搜索的结果会在下面这里显示出来,我们点击一下这个上面,这里可以看到芯片的介绍, 也可以看到芯片的结构图,还能看芯片的数据手册。最后这个是在线文档,我就不展示了, 我们双击一下芯片型号,这里就可以打开这个页面了,这个页面就是用来配置初始化代码的地方, 这个就是我们选择的芯片。进来之后我们首先配置一下 debug 功能,在这里的 s y s 选项里,这里的 debug 选择 serial wire 就是这个,这里千万不要选择 no debug, 否则你的芯片可能会被锁住。 下面这里是时钟圆,我们一般选择 system 就可以了,然后我们配置一下 r c c, 也就是时钟数,这里是 h s e 高速时钟和 l s e 低速时钟,两个我们都选择 crystal make resonator, 这里是是否输出时钟,我们不勾选,我们点击这里转到时钟数配置,我们选择这个,然后再在这里输入七十二,也就是配置成七十二兆赫兹,然后点击回车, 这里点击 ok 就可以了,这就配置好了时钟数,我们回到刚才的页面,我们开始配置 gpio, 我们可以在这里找到自己要配置的 gpl, 我用的是 pc 十三,就在这里,如果找不到也可以在下方搜索,搜索出来之后就会这样显示,我们单击它就会出来模式配置, 这里有输入输出,还有一些其他外设用到的配置,我们选择输出,我们选中右键选择。第一个可以给这个引脚起一个别名, 我们叫 led 一,这里就会显示我们起的名字了。我们到这里的 gpl 选项,这里可以看到刚才配置银角的详细信息,我们选中它,下方这里就会出现详细信息,第一个是银角默认电瓶,我们选择喽。 第二个是开漏输出还是推碗输出,我们选择推碗。第三个是选择上下拉模式,我们选择不上拉也不下拉。第四个是引脚的速率,我们选择最高,这样工程就配置好了。我们转到 project manager 选项卡,在这里写一下工程的名字, 这里可以选择保存的文件夹,我选择默认下方,这里是选择平台,我们选择 q 五,也就是 m d k, 我们再到这里配置 一下,这里的意思是我们是否复制用到的库文件,第一个是复制全部的库文件到工程,第二个是指复制用到的库文件,第三个是直接链接库文件,我们选择第二个。我们勾选这里的第一个,意思是把外设的代码分为点 c 和点 h 文件, 这样就已经全部配置好了,点击这里就可以生成代码了。我们点击打开工程, 这就是生成的工程了。我们打开 me 函数,可以看到所有的初始化工作已经全部帮我们做好了,我们直接写程序就好了,写之前先编译一下, 我们在写程序时要注意写到 begin 和 end 之间,这是因为如果我们有些地方忘记配置,打开 cobm x 重新配置生成代码, begin 和 end 之外的代码会被清除。我们现在就可以让 led 亮起来了,使用 hell g p i o red pin 这个函数就可以配置引脚的高低电瓶。因为我们已经给 g p i o 起过别名了,所以我们可以直接在这里这样写,可以看到这还需要一个状态参数, 我们可以右键转到函数定义,可以看到需要一个 reset 或者一个 set 参数。我们是低电频点亮 led, 所以选择 reset 复制过去就可以了。 现在编一下载到板子就可以看到 led 灯亮了,我已经下载好了,我们看下现象,可以看到已经点亮了,现在我们还可以让 led 闪烁起来。先把这个程序注视一下,我们使用 l g p i o to go pin 这个函数,这个函数每调用一次,就可以让 g p i o 翻转一下电瓶,我们传入 l e d e 的 g p i o 组合 pin, 然后再延时一千毫秒,就可以让 led 一秒亮一秒灭了。我们可以使用 hell delay 这个函数,这个函数也是黑奥库帮我们实现好的,直接用就可以了。 现在就可以编一下再到板子里了,我们看下现象吧。今天的视频就到这里了,我们下期见。

stm 三的中断优先级的一个基本概念,到底有哪一些概念呢?先来看下第一个抢占优先级,那么这一个呢,在我们上一节课呢,有给大家提到过一下,这里呢,就来了解一下什么是抢占优先级。 简单来说,高的抢占优先级,那么是可以打断正在执行的低。抢占优先级的这个中断高的可以打断低的,那么可以通过这个关键字就可以知道了,点赞嘛,也就是抢夺我们的 cpu 的一个使用权, 那么这是抢占优先级。再来看一下,还有一个叫响应优先级的,那么也称为这一个子优先级,有的地方你可以看到,他称为这个子优先级, 就是当我们的这个抢占优先级相同的情况下啊,这一个相同,那么响应优先级高的先执行, 但是呢,响应优升级它是不能相互打断的,这个是重点,响应优升级是不能相互打断的,而这个抢占优升级呢,是可以相互打断的。 那么举一个例子吧,比如说我是 k 级干部,你也是 k 级干部,那么这时候呢,我们的这个抢占优先级呢,就相同了, 但是呢,你的年纪比我略大,是吧?你比较年长一点,那么你的这个响应又升级呢,就高了。那么这时候我们一起走到会场,因为你的年纪大一点,那么我让你先走,那么你就先执行吧, 但是呢,如果我已经走在前面了,你在我后面,你就不能把我拽到后面,让你先走,所以说呢,他就不能进行这个打断。同样呢,如果你在我前面,我也不能把你拽到我后面,让我先走,所以说呢,他就是 不能才会打断,知道了吧?不能才会打断,那么再来看一下我们下一个抢占优先级和响应优先级相同的情况下,那么这两个都相同, 自然优先级越高先执行。什么是自然优先级啊?自然优先级,那么又到我们这个自然优先级的概念了,自然优先级呢,他就是属于这个中段销量表里面的优先级了,待会再给大家看一下中段销量表里面的优先级, 这一个数值越小表示优先值越高,在我们 stm 三二里面数值越小代表他的优先值越高, 那比如说我们的优先级为零,那么就比优先级为一的高,优先级为一的要比优先级为二的高,就是这一个意思,给大家三 三秒钟来强行记忆一下。 话是这么说是吧?但是大家有没有记得住呢?我希望通过这一个方法,希望大家能记住。

写 s d m 三二代码不要用海尔迪内做长延时,海尔迪内啊,是阻设式的,延时期间 cpu 完全卡死,什么都干不了,除非啊被中断打断。这不是一个专业气用式该有的写法, 正确的做法有两种,第一种用定时器中断,配合标志位。定时器啊,后台计时时间到了,就置个标志位,主程序检测标志位就行了。上面的代码,这是我写的一个例子。 第二种更优雅的是状态机,看上面的代码,这是一个 modelbox 重建协议解析的代码。怎么把不同的协议解析阶段拆成一个个状态?用定时器啊,配合标志位定时调,用这个状态机执行函数,控制解析状态的切换, 这样逻辑清晰,代码更容易维护。所以啊,常言时咱们就用定时器加标志位,复杂时需要控制啊,一定要用状态机,你学会了吗?记得关注再走哦!