首页 > 其他分享 >看看硬件工程师是如何写代码的(二),榨干CPU的性能

看看硬件工程师是如何写代码的(二),榨干CPU的性能

时间:2024-10-21 09:17:38浏览次数:3  
标签:task 榨干 节拍 硬件 任务 num 100HZ CPU

 更多电路设计,PCB设计分享及分析,可关注本人微信公众号“核桃设计分享”!

目前本人已经不再写代码了,只是想把自己走过的弯路,踩过的坑分享出来,希望更多的小伙伴能看到,少走弯路,仅供参考哈

这章重点给新手们提供一个能最大利用CPU性能的程序架构思路,具体程序就不再展示了。

前言

在学习51单片机或者用51单片机做项目时,由于51单片机的资源配置都是有限的,所以当外围需要实现的功能较多时,就必须要从程序的架构上下功夫,如果使用“单一任务”的思维去写程序,会直接影响效果甚至运行不起来。

架构思路

而在上一篇文章中,我们使用定时器的方式,避免了CPU空等待的情况,没看过的小伙伴可以戳这里:

看看硬件工程师是如何写代码的(一),巧妙的程序!

其实思路也是比较简单的,如下图所示:

上图中的任务体其实就是CPU在一定的时间内需要“光顾”的事件,比如想让LED在1S的时间做亮灭的动作,那CPU就不用一直“盯着”LED,可以先去做其他“事件”,等1S时间到了之后再去控制LED就行。

举个日常生活的例子:

假如水烧开需要8分钟,那在这8分钟里,我们可以不用一直在等着,我们可以利用这8分钟去做其他事情,比如画板子和写代码都是没问题的,等8分钟到了之后我们再回来把热水壶关掉(现实中热水壶开了会自动断电,这里只是举例说明)。

那在实际的项目中,比如LCD显示屏的刷新和ADC的采集,都是不用CPU一直盯着的,特别是ADC采集转化时是需要时间的,如果ADC转换时间CPU一直在等,那将是致命的,LCD面对的对象是人眼,所以刷新的频率并不需要太快。

还有按键的扫描,数码管的显示等等!

但需要注意的一点就是:CPU不会像人一样,工作起来可以随时停下来,CPU是需要借助“中断”来把CPU“拉回来”,从而实现任务的切换。

如下图1和图2所示

图1

图2

图1和图2是两种不同的方式,图1中CPU在没有任务需要执行的时候,都是在空闲任务里面循环运行,定时器中断隔一段时间把CPU拉回来。不同的任务当满足要求时,就可以获得CPU的“关照”,关照完后就回到空闲任务重进行循环。

图2中,中断可以发生在任何时候,包括任务执行的时候,但是需要提前定义不同任务需要CPU啥时候回来“关照”。一般以200HZ或者100HZ作为“基准”时间,再加上“节拍计数器”让不同的任务获得CPU短暂的“关照”,任务而不至于被CPU“冷落”。

一般来说LCD刷新的频率10HZ左右即可满足,按键做到20HZ基本上不会出现丢键的情况,数码管刷新率做到50HZ左右即可满足人眼的需求。

我们以100HZ作为定时器中断时间,也就是任务切换的基准时间,则:

LCD的节拍数:100HZ/10HZ=10

按键的节拍数:100HZ/20HZ=5

数码管的节拍数:100HZ/50HZ=2

那任务切换代码是如何实现的,其实很简单,只需要在大循环里面用if做判断即可,给每一个任务做条件判断,满足条件即可让CPU执行相应的任务,如下:

while(1)

{

if(task_num[0]==0) task0(); //task0 节拍数到,CPU执行task0

if(task_num[1]==0) task1(); //task1 节拍数到,CPU执行task1

if(task_num[2]==0) task2(); //task2节拍数到,CPU执行task2

if(task_num[3]==0) task3(); //task3节拍数到,CPU执行task3

最后,我们看一下定时中断服务函数里面该怎么写?(省略TH0和TL0部分代码)

void timer0(void) interrupt 1

{

if(task_num[0]) task_num[0]--;

if(task_num[1]) task_num[1]--;

if(task_num[2]) task_num[2]--;

if(task_num[3]) task_num[3]--;

这一类程序的架构思路,中心思想就是把“单一的CPU”划分成“多个CPU”的效果,充分利用CPU的资源,使外围电路较多的项目运行起来更为流畅。

好了,今天就先聊到这吧,以上纯属个人看法,仅供参考!

如果本文对你有所帮助,欢迎点赞关注

图片

你们的支持就是我创作最大的动力

图片

翻译

搜索

复制

标签:task,榨干,节拍,硬件,任务,num,100HZ,CPU
From: https://blog.csdn.net/peiorrong/article/details/143103988

相关文章

  • CPU与储存器连接(例题讲解)
    (1)地址线的连接         CPU的地址线数量往往比存储芯片的地址线数量要多。通常将CPU地址线的低位与存储芯片的地址线相连接,CPU地址线的高位用作对芯片的控制或其他用途。(2)数据线的连接        CPU的数据线数量也比存储芯片的数据线的数量要多。此时,必须对......
  • 视觉之相机硬件选型
    硬件1)相机2D相机类型:线阵(一行一行成像,拼接成图),像素高,速度慢面阵(瞬间成像),像素低,速度快(市面常见)芯片:CCD(性能好)CMOS(价格低,主导)颜色模式:黑白相机、彩色相机(颜色识别、深度学习)传感器大小:单位英寸,常见尺寸有1、2/3、1/2、1/3、1/4英寸等。1英寸cmos传感器是16mm。这里的......
  • 简易CPU设计入门:验证取指令模块
    项目代码下载还是请大家首先准备好本项目所用的源代码。如果已经下载了,那就不用重复下载了。如果还没有下载,那么,请大家点击下方链接,来了解下载本项目的CPU源代码的方法。下载本项目代码准备好了项目源代码以后,我们接着去讲解。本节前言想要学习本节,前提是,你得是学习过我讲......
  • IPMI(智能平台管理接口,Intelligent Platform Management Interface)是一种行业标准的接
    IPMI(智能平台管理接口,IntelligentPlatformManagementInterface)是一种行业标准的接口规范,主要用于服务器和计算机系统的管理。它提供了硬件监控和管理功能,使管理员能够远程监控和控制计算机系统。以下是IPMI的一些主要特点和功能:主要特点硬件监控:IPMI能够监控系统的硬件状态......
  • 主动管理技术(Active Management Technology,AMT)是英特尔(Intel)推出的一种硬件管理解决方
    主动管理技术(ActiveManagementTechnology,AMT)是英特尔(Intel)推出的一种硬件管理解决方案,专门用于企业级计算环境。AMT是英特尔管理引擎(IntelManagementEngine,ME)的一部分,旨在提供全面的远程管理和维护功能。以下是AMT的主要特点和功能:1. 远程管理远程访问:AMT允许IT管理员在操......
  • 性能提升:线程池大小与CPU的关系
    前言:线程池可以包含几个线程才能最大化提升整体系统性能,这个与CPU的处理能力有直接关系,线程池的线程数过多则在大多数线程处于等待状态,线程之间的切换反而性能开销变大,拖累整体效率,如果线程池里的线程过小,则没有充分利用CPU的处理能力。一、查看CPU并发处理的线程数 在Linu......
  • 嵌入式硬件设计
    1.引言在当今快速发展的科技时代,嵌入式系统已经成为众多应用领域的重要组成部分。从智能家居、物联网设备到汽车电子、医疗仪器,嵌入式系统无处不在。它们以其高效、低功耗和灵活性,满足了现代社会对智能化和自动化的迫切需求。随着技术的不断演进,嵌入式硬件设计也面临着越来越......
  • 基于STM32实现硬件SPI与W25Q128通讯步骤及程序
    为了大家更加直接了当的获取信息,我直接上干货一、硬件原理图:W25Q128模块图由上图可以看出,要和W25Q128通讯需要采用单片机上的SPI2W25Q128引脚连线图由上图看出:CS(片选)--------------PB12SCK--------------PB13MISO--------------PB14MOSI--------------PB15一、标......
  • Aubo Robotics 工业机器人系列编程:i10a_Aubo-i10a机器人的系统架构与硬件组成
    Aubo-i10a机器人的系统架构与硬件组成在上一节中,我们介绍了Aubo-i10a机器人的基本概念和应用场景。本节将深入探讨Aubo-i10a机器人的系统架构和硬件组成,帮助您更好地理解机器人内部的工作原理和各个组件的功能。1.系统架构概述1.1系统架构图Aubo-i10a机器人的系统架......
  • 计算机基础(cpu,内存,硬盘)
    计算机基础(cpu,内存,硬盘)内存:负责硬盘等硬件上的数据与CPU之间数据交换处理;缓存系统中的临时数据。断电后数据丢失。硬盘:​ 存储资料和软件等数据的设备,有容量大,断电数据不丢失的特点。流程​ 简单来说,硬盘用来存储程序和数据,当运行程序时,CPU首先接受到命令,之后CPU是告诉......