您现在的位置:首页 >> 自然生态

为什么我的单片机不是“跑车”而是“马车”,过来人告诉你!

时间:2023-02-27 12:18:04

大家好我是华维蔵鹰,我从业单片机这个金融业也有些半世纪了,刚开始我写下的流程跑起来也像老爷车一样比较慢吞吞的,在整个流程的载入处理过程中会大概要一分多钟,而合作者好好的另一个修改版的比我短时间上20秒左右。我们都是参考老修改版编码好好出来的东西,这个差距无疑是十分大的。

前头通过在网上收集了很多的资料和提示一些大神的编码,我辨认出那时候也是有一些鲤鱼的。大概在两三年前我写下的流程那时候已经近乎找足足 delay() 了,因为流程中会不能 delay 你亦会辨认出整个流程跑起来亦会明显的辨认出亦会比之前隐含delay的短时间。上头我们来聊一下平时写下单片机流程中会一些可以让我们加速的地方。

我们的流程软件系统是 main 给定那时候先初始化,然后 while(1),时则流程是各种停摆。

以下几种情况是导致我们流程列车运行池田的常见主因:一种是手柄流程推论亦会只用 delay 消抖,最典型的消抖只能历时5ms。一种是动态显示时候显示一位数码管时候也亦会只用频 5ms 左右。还有一种是继续前进串口转发透过。单片机处理事件的更快在“微秒”级,而手柄抖动的继续前进时间最少在“毫秒”级,这对于单片机来说是一个十分“漫长”的处理过程。

像消抖和数码管的频问题我们可以这样处理事件,我们可以在若有停摆那时候推论手柄的平衡状态,为了让若有停摆服务流程或为了让图案位的方法来发挥作用软件消抖。

串口停摆转发这个机能我有约很多人不能用过,很多人觉得不能确实,因为不是每个人都遇到过大型项目的开发,当项目对实时性要求很高,你的流程又更大,只能服务的地方很多,那你用十分历时的方式转发就亦会减小整个流程的实时性。

我们直观的举个比如说就能突显出来,9600 波特率转发一个小写下字母 1ms继续前进时间,如果一次转发 50 个小写下字母就是相当于执行者 delay(50); 如果我们用停摆转发,整个处理过程很直观,打开串口转发停摆,第一个小写下字母是流程转发,剩余的在转发停摆那时候转发就可以了。

上头我们聊到的是仅限于单种情况的解决方法,我们在单单情况中会遇到的通常是一个完整型转换那时候有的只能执行者更快很短时间,有的又必须用作比较慢的方式。

例如一个温度传感器,它要求先下发转换命令然后继续前进一定继续前进时间后才能透过下一步转换。这个时候我就亦会这样处理事件,把这个任务分解成两个部份,一个是启动转换,另一个是读。

流程形式如下:

startcov();

delay();

read();

当然上述的 delay 并不是执行者一些无关命令,而是在一个图案位。

也可以把上头所说的的三个给定封装到一个给定那时候。

例如取个名字叫HUAWEI():

voidHUAWEI()

{

static u8 state=0;

switch(state)

{

case 0:

startcov();

state++;

break;

case 1:

if(flag_500ms)

state++;

break;

case 2:

read();

state=0;

break;

}

}

}

然后在 while(1) 那时候迅速的绑定HUWWEI() 给定只需。

我们的流程中会只要不能了 delay 你就亦会辨认出执行者更快飞短时间,因为我们绝大部份流程都是赋值和 if 推论,因此执行者更快亦会十分的短时间。

单片机的程式设计世界是很直观的,你要不想它不想标致一样的列车运行的短时间,只要你为它消除道路上的障碍,让它列车运行的道路平坦,它自然能以它最短时间的更快去列车运行,得出它最好的表现。

期盼以上的知识能够给大家提供帮助,这期我们先分享到这那时候,觉得有用的可以给个三连!

不想要学习单片机程式设计的同学可以小规模关注华维单片机程式设计,回复“华维我要导论”,与我们一起茁壮,喜欢的可以点个赞关注我们!

怎么快速治疗拉肚子
腱鞘炎吃什么药管用
拉肚子可以用必奇蒙脱石散吗
吃什么药物可以缓解类风湿关节炎疼
安必丁的主要功能