【研发日记】嵌入式处理器技能解锁(一)——多任务异步执行调度的三种方法

文章目录

前言

Timer中断调度

Event中断调度

StateFlow调度

分析和应用

总结

参考资料


前言

        近期在一些嵌入式系统开发项目中,在使用嵌入式处理器时,遇到了挺多费时费力的事情。所以利用晚上和周末时间,在这些方面深入研究了一下,解锁了一些新技能。后面会用若干篇文章把它总结分享出来,以备将来翻看,同时也希望能够帮到这一领域的粉丝朋友们。

        由于实际项目比较庞大,而且不便在网络公开,所以就另起了一个Demo工程,重点介绍其中的原理、方法和特性分析

Timer中断调度

        Timer中断是硬件中断的一种,其在处理器中断框架中的位置如下图所示:

        Timer中断工作的过程如下:

        TDDRH:TDDR是一个16位的时钟分频因子寄存器,需要开发者写入分频的倍数。

        PSCH:PSC是一个16位的分频计数寄存器,能随着时钟节拍递减,递减到0时重新装载TDDRH:TDDR寄存器的值,然后继续循环。每循环一次后TIMH:TIM计数器减1。

        PRDH:PRD是一个32位的周期寄存器,需要开发者写入循环周期的长度。

        TIMH:TIM是一个32位的计数寄存器,能随着分频后的时钟节拍递减。递减到0时重新装载PRDH:PRD寄存器的值,然后继续循环。每循环一次后产生一个Timer中断脉冲。当Timer中断脉冲产生时,就可以作为一个Task调度的Flag,如果有多个不同周期的异步Task,就可以使用多个Timer中断来调度。

        举例:如果我们想制造一个0.01s的Timer中断,并且已知处理器的系统时钟是120MHz。首先设定分频因子为2,那么分频后的时钟频率是60MHz。PRDH:PRD = 0.01s/(1/60,000,000) = 600,000。

        Tips:如果循环周期计算出来不是整数,四舍五入的话就会引入设计误差,这时就可以通过调整分频因子来弥补这种误差。或者循环周期超出了32位的最大值,也可以调整分频因子来修正

Event中断调度

        Event中断是硬件中断的一大类,其在处理器中断框架中的位置如下图所示:

        Event中断工作的过程如下:

        本文以SCI通信事件为例,来讲解异步任务的调度。

        第一步,在Hardware Settings中勾上SCI数据接收后中断使能,并配置优先级level,示例如下:

        第二步,从模块库Scheduling中拖出ISR模块,示例如下:

        第三步,在硬Hardware Mapping中选择SCI接收中断,并勾上中断服务后清除状态flag,示例如下:

        第四步,在Simulink Model中创建f()函数调用子系统,连接到前面的ISR模块event端口上,示例如下:

        当SCI接收到数据时,就会产生一个中断脉冲。可以作为一个Task调度的Flag,比如响应SCI命令的Task。如果有多个类似的触发型异步Task,就可以使用多个event中断来调度。

StateFlow调度

        前面两种任务调度的方法都是依赖于处理器硬件的中断和对应的中断服务程序,这种调用方式通常只适用于小负荷的任务,因为软件不能长时间处于中断服务程序中。如果有大负荷的任务,就要引入Idel Task调度模块,在其内部使用StateFlow等纯软件的方法调度各个任务,示例如下:

        Idel Task调度的任务生成C语言中后,实际上就是在main()的while(1){}中全速循环的任务。大部分的软件任务实际上不需要这么快的循环速度,所以也可以用前面Timer周期的思想,用软件变量递减的方式做一些周期性的Flag。示例如下:

flag = 0;for(i=0;i<50000;i++){for(j=0;j<8;j++){Cnt1 -= 1;if(Cnt1 == 0){Cnt1 = 8;     }}Cnt2 -= 1;if(Cnt2 == 0){Cnt1 = 50000;flag = 1;}}

        Tips:这种软件循环周期,精度不如Timer中断周期高。

        有了周期循环的基础后,就可以使用StateFlow调用子系统的方式来调度多任务异步执行,示例如下:

分析和应用

        1、使用Timer中断调度任务的方法,任务周期的精度非常高,几乎不会波动,因为它的节拍源是非常稳定的系统时钟。

        2、能引起Timer中断周期波动的唯一因素是中断冲突。可以设置Timer中断的优先级,来决定当发生中断冲突时先执行哪个中断。也可以设置Timer中断是否允许抢占,来确定当有新中断产生时Timer中断是否会被打断。

        3、使用Event中断调度任务,与Timer中断的工作机制比较相似。并且依赖于处理器中断的原理,可以保证外部Event产生时可以非常快速地响应,也保证了嵌入式系统的实时性

        4、使用StateFlow调度任务,他的基础是软件延时控制的周期循环,很容易受到处理器负荷变化引起的波动。使用StateFlow调度任务的优点是调度非常灵活,能处理的任务量也可以比较大。

        5、一种比较完美的任务调度方法时把上述三种方式结合起来,避开各自的劣势,发挥各自的优势。首先可以使用Timer中断产生一个最小的单位周期(例如10ms),然后在此基础上利用软件计数延时的方式产生20ms和50ms的周期Flag,然后进一步开发Stateflow调度任务。这样既可以保证控制周期在一定程度上的稳定性,也能充分发挥Stateflow调度任务的灵活性,同时保留Event中断调度方式的实时性,这样整体嵌入式系统的性能就比较均衡了。如果具体的嵌入式系统应用场景中,值要求哪一方面的绝对性能,那么就可以完全只依赖于其中一种任务调度方式,抛弃其他的调度方式。

总结

        以上就是本人在研发中使用嵌入式处理器异步任务调度时,一些个人理解和分析的总结,主要介绍了三种异步任务调度的工作原理,展示了具体的使用方法,并对比分析了这些不同方式的特点差异和各自的适用场景

        后续还会分享另外几个最近解锁的嵌入式处理器新技能,欢迎评论区留言、点赞、收藏和关注,这些鼓励和支持都将成文本人持续分享的动力。

        另外,上述例程使用的Demo工程,可以到笔者的主页查找和下载。

参考资料

    TMS320F28003x Real-Time Microcontrollers datasheet.pdf


        版权声明,原创文章,转载和引用请注明出处和链接,侵权必究!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/330702.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年学浪视频怎么下载到手机相册

随着2024年的到来&#xff0c;学浪平台继续为广大学习者提供优质的在线教育资源。然而&#xff0c;如何将这些宝贵的视频内容下载到手机相册&#xff0c;方便随时离线观看呢&#xff1f;无论您是想在旅途中学习&#xff0c;还是希望在没有网络的情况下复习课程&#xff0c;本文…

selenium安装出错

selenium安装步骤&#xff08;法1&#xff09;&#xff1a; 安装失败法1 第一次实验&#xff0c;失败 又试了一次&#xff0c;失败 安装法2-失败&#xff1a; ERROR: Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问。: c:\\programdata\\a…

YoloV9实战与改进——专栏目录

摘要 &#x1f525;&#x1f680;本专栏教你如何嗨翻Yolov9&#xff01;&#x1f680;&#x1f525; &#x1f680;炸裂升级&#xff1a;嗨&#xff0c;小伙伴们&#xff01;这里有一波Yolov9的升级大招&#xff0c;带你领略最新论文的精华&#xff01;&#x1f4a5; 什么注意…

【EXCEL_VBA_基础知识】08 在VBA中使用公式 ※

课程来源&#xff1a;王佩丰老师的《王佩丰学VBA视频教程》&#xff0c;如有侵权&#xff0c;请联系删除&#xff01; 目录 1. 函数在哪找&#xff1f; 1.1 工作表函数&#xff08;Application.WorksheetFunction.func&#xff09; 1.2 VBA函数 2. 常用VBA变量 3. 函数应用…

乡村振兴与乡村文化传承创新:保护和传承乡村文化,推动乡村文化创新发展,打造具有文化魅力的美丽乡村

一、引言 在当代中国&#xff0c;乡村振兴已成为国家发展的重要战略之一。乡村不仅是自然资源的富集地&#xff0c;更是中华优秀传统文化的发源地。保护和传承乡村文化&#xff0c;推动乡村文化创新发展&#xff0c;对于打造具有文化魅力的美丽乡村&#xff0c;实现乡村全面振…

从需求角度介绍PasteSpider(K8S平替部署工具适合于任何开发语言)

你是否被K8S的强大而吸引&#xff0c;我相信一部分人是被那复杂的配置和各种专业知识而劝退&#xff0c;应该还有一部分人是因为K8S太吃资源而放手&#xff01; 这里介绍一款平替工具PasteSpider&#xff0c;PasteSpider是一款使用c#编写的linux容器部署工具(使用PasteSpider和…

基于Docker部署GitLab环境搭建

文件在D:\E\学习文档子目录压缩\专项进阶&#xff0c;如ngnix,webservice,linux,redis等\docker 建议虚拟机内存2G以上 1.下载镜像文件 docker pull beginor/gitlab-ce:11.0.1-ce.0 注意&#xff1a;一定要配置阿里云的加速镜像 创建GitLab 的配置 (etc) 、 日志 (log) 、数…

Eclipse下载安装教程(包含JDK安装)【保姆级教学】【2024.4已更新】

目录 文章最后附下载链接 第一步&#xff1a;下载Eclipse&#xff0c;并安装 第二步&#xff1a;下载JDK&#xff0c;并安装 第三步&#xff1a;Java运行环境配置 安装Eclipse必须同时安装JDK &#xff01;&#xff01;&#xff01; 文章最后附下载链接 第一步&#xf…

上位机图像处理和嵌入式模块部署(mcu常见三种烧录方法)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 和单纯的windows上位机开发、嵌入式linux开发不一样&#xff0c;mcu的开发&#xff0c;是需要通过烧录器把编译好的镜像烧入到开发板里面的。这是很…

Unreal Engine5 Landscape地形材质无法显示加载

UE5系列文章目录 文章目录 UE5系列文章目录前言一、解决办法 前言 在使用ue5做地形编辑的时候&#xff0c;明明刚才就保存的Landscape地形完全消失不见&#xff0c;或者是地形的材质不见了。重新打开UE5发现有时候能解决&#xff0c;但大多数时候还是没有解决&#xff0c;我下…

QT5.15.2及以上版本安装

更新时间&#xff1a;2024-05-20 安装qt5.15以上版本 系统&#xff1a;ubuntu20.04.06 本文安装&#xff1a;linux-5.15.2 下载安装 # 安装编译套件g sudo apt-get install build-essential #安装OpenGL sudo apt-get install libgl1-mesa-dev# 下载qt安装器 https://downl…

Java之SpringSecurity使用心得

文章目录 一、内存身份认证二、jdbc身份认证三、自定义登录页 一、内存身份认证 添加pom依赖 <!-- Spring Security提供的安全管理依赖启动器 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-s…

必示科技参与智能运维国家标准预研线下编写会议并做主题分享

近日&#xff0c;《信息技术服务 智能运维 第3部分&#xff1a;算法治理》&#xff08;拟定名&#xff09;国家标准预研阶段第一次编写工作会议在杭州举行。本次会议由浙商证券承办。 此次编写有来自银行、证券、保险、通信、高校研究机构、互联网以及技术方等29家单位&#xf…

YoloV8改进策略:蒸馏改进|CWDLoss|使用蒸馏模型实现YoloV8无损涨点|特征蒸馏

摘要 在本文中&#xff0c;我们成功应用蒸馏策略以实现YoloV8小模型的无损性能提升。我们采用了CWDLoss作为蒸馏方法的核心&#xff0c;通过对比在线和离线两种蒸馏方式&#xff0c;我们发现离线蒸馏在效果上更为出色。因此&#xff0c;为了方便广大读者和研究者应用&#xff…

1076: 判断给定有向图是否存在回路

解法&#xff1a; 直观的方法用邻接矩阵dfs,这是错误的代码 #include<iostream> #include<vector> using namespace std; int arr[100][100]; int f 0; void dfs(vector<int>& a, int u) {a[u] 1;for (int i 0; i < a.size(); i) {if (arr[u][i]…

Github 2024-05-25 Rust开源项目日报Top10

根据Github Trendings的统计,今日(2024-05-25统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Svelte项目1TypeScript项目1Python项目1Go项目1Dart项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust…

Linux--动静态库制作使用及使用

目录 0.文件系统 1.软硬链接 2.静态库 2.1先见一见 2.2 制作静态库&#xff0c;并使用制作的静态库 3.动态库 3.1制作动态库&#xff0c;并使用制作的动态库 4.推荐一个第三方库&#xff08;ncurses&#xff09; 5.动态库的加载 6.动态库VS静态库 0.文件系统 Linux…

北理工提出 LTrack 双摄像头系统 | 专注于暗场景多目标跟踪,自动驾驶和夜间监控的福音!

低光照场景在现实世界应用中很普遍&#xff08;例如自动驾驶和夜间监控&#xff09;。最近&#xff0c;在各种实际用例中的多目标跟踪受到了很多关注&#xff0c;但在暗场景中的多目标跟踪却鲜少被考虑。 在本文中&#xff0c;作者专注于暗场景中的多目标跟踪。为了解决数据集…

9.5 Go语言入门(条件语句和循环语句)

Go语言入门&#xff08;条件语句和循环语句&#xff09; 目录四、条件语句和循环语句1. 条件语句1.1 if 语句1.2 if-else 语句1.3 if-else if-else 语句1.4 带初始化语句的 if1.5 switch 语句1.6 带条件的 switch1.7 多个条件的 case 2. 循环语句2.1 基本 for 循环2.2 省略初始…

转行3年涨薪300%,我总结了一套产品经理快速入门指南!

想转行的产品小白&#xff0c;初期一定会遇到这个问题——我要如何 0 基础转行产品经理&#xff1f; 要想 0 基础快速转行产品经理&#xff0c;我通过个人实践总结了 5 个关键点&#xff0c;可以参考。 一、熟悉产品经理的工作全流程 转行的产品小白&#xff0c;首先要建立产…