0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

DSP实时多任务调度的解决方案

电子工程师 来源:网络整理 作者:佚名 2021-03-24 15:22 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

DSP处理器是一种嵌入式处理器(embedded microprocessor),它专门用于数字信号处理,其在系统结构和指令算法方面进行了特殊设计,具有很高的编译效率和指令执行速度。

嵌入式系统在当今是一种非常活跃的应用,在工业、服务业、消费电子等领域的应用范围都不断扩大。为了方便嵌入式系统的开发,人们研发了许多嵌入式操作系统,如WinCE、uc/OS、嵌入式LinuxVxWorks、pSOS、QNX、Palm OS等,由于嵌入式系统往往用于一些较为实时性的用途,这些操作系统也往往被称为实时多任务操作系统(RTOS, Real Time Operation System)。这些系统往往被用在通用嵌入式处理器上(如ARM等)。

DSP系统和通用嵌入式系统的区别

虽然说DSP也是一种嵌入式系统,但是由于其“专用于数字信号处理”的特点,其系统架构也会同通用嵌入式系统略有区别(当然,只是“略有区别”而已)。DSP往往用来跑高速的数学算法,而不牵涉到人机界面、数据库、高层应用等功能(从PC角度来理解的话,DSP在一个嵌入式系统中的功能类似于底层驱动,例如3D图象的演算、环绕声的演算、网络协议处理等)。

因此,从这样的认识角度来看,DSP中的各种任务的调度在过程上相对“单纯”些。DSP中的任务更加侧重于“实时性”和“并行性”。实际上,对于单核的DSP芯片来说,并不可能存在真正的“并行计算”,所谓的并行只不过是通过高速切换几个“串行的线程”来实现。而对于“实时性”,则要求尽可能多的将CPU时间用于计算,并且不同的线程间不能有阻塞的现象发生(从软件角度看,就是执行任务的代码执行时间要短,如果是复杂的算法,就需要对算法进行优化使得算法可以“分步执行”)。

DSP实时多任务调度的解决方案

根据以上的分析,我们可以大致的得出一个简单的DSP RTOS的雏形,它的核心就是创建一种可以实时执行的线程。这种线程被称为“PRD Task”(period task),指的是这种线程一旦创建,就由系统内核自动的周期性调用,而调度周期可以保证相当高的时间精度。管理这个机制的部件叫做“PRD模块”。

创建PRD任务的方法是在初始化的时候向内核注册一个PRD任务。

int Thread_PRD_Append(long TimeSlinceCount/*执行周期

*/,void (*CallBackHandle)()/* 函数句柄*/)

返回值: TRUE / FALSE

函数功能:向系统注册一个新的线程,指定执行周期以及需要调度的函数句柄,系统便会在指定的时间间隔自动调用这个函数。

这个注册任务等待执行的方式叫做“回调”,注册的时候向内核提交一个指定的执行周期和任务函数的入口函数指针。内核在通过计时,在达到执行周期的时候通过函数指针调用任务函数。

内核为了管理这个功能,需要一张“PRD任务表”。它的定义如下:

typedef struct {

long TimeSlice_Current; //当前时间片

long TimeSlice_Count; //总时间片

void (*Callback_Handle)(); //调用句柄

} Type_PRD_Table;

Type_PRD_Table PRD_Table[SYS__THREAD_PRD_TABLE_SIZE];//PRD表

int PRD_Table_ItemCount=0;//当前的PRD表最大项目数

TimeSlice_Current和TimeSlice_Count两个变量构成了一个软件定时器,内核通过对于TimeSlice_Current的操作即可知道何时可以调用相关的任务函数。

相关的代码如下。这是一个典型的减法计时器的代码。

for(i=0;i 0)

{ PRD_Table[i].TimeSlice_Current --; //递减时间片 }}

而在另外一处,需要判断时间片计数器是否已经计到0。

if((PRD_Table[i].TimeSlice_Current) == 0) {//调用相应的句柄

PRD_Table[i].TimeSlice_Current=PRD_Table[i].TimeSlice_Count;//恢复时间片

(*(PRD_Table[i].Callback_Handle))();//调用任务入口函数指针 }

接着,需要将减法计时器的代码放入一个硬件定时器中断中,这样便能保证这个减法计时的高度精确性。这个硬件定时器依赖于硬件,因此要求DSP芯片硬件上必须提供这样一个定时器,否则这个DSP内核便无法在这个DSP芯片上执行(幸好基本上不太会存在没有硬件定时器的DSP)。

而对于第二段代码,判别时间片计数是否“已经到点”的代码则应

当放在一个死循环中。例如在main函数中放置一个死循环。

Void Main() {

for(;;) { …。。判断时间片计数器是否已经计到0的代码}

…}

显然,除了计时是对“到点”的判别以外,我们还需要初始化和添加任务的函数。

int Thread_PRD_Append(long TimeSlinceCount,void *CallbackHandle)

{//给PRD表添加任务

if(PRD_Table_ItemCount

责任编辑:lq6

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • DSP处理器
    +关注

    关注

    0

    文章

    28

    浏览量

    12045
  • 计时器
    +关注

    关注

    1

    文章

    434

    浏览量

    34868
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux-RT特点及简单应用

    :CFS调度器的设计重点是优化多任务系统的整体吞吐量和响应时间,而不是严格保证任务实时性。这意味着在高负载情况下,某些任务可能会经历延迟或
    发表于 12-05 07:37

    多任务系统中,如何平衡任务调度以防止因高负载导致的再次进入低功耗模式的延迟?

    多任务系统中,如何平衡任务调度以防止因高负载导致的再次进入低功耗模式的延迟?
    发表于 12-04 06:37

    RK3576驱动高端显控系统升级:多屏拼控与AI视觉融合解决方案

    多任务可视化中枢在显控系统中,不同屏幕承担着差异化任务,RK3576 的三屏异显能力可在一台终端上完成全部画面输出,无需多主机联控,降低系统复杂度与成本。 主屏:用于显示实时生产数据或调度
    发表于 11-21 17:51

    freertos关闭任务调度的方法

    #include \"FreeRTOS.h\" #include \"task.h\" /* 关闭任务调度 */ void
    发表于 11-17 06:47

    嵌入式实时操作系统的特点

    任务的系统。 实时嵌入式操作系统与传统的桌面操作系统相比,更注重对实时任务的响应和精确控制。它们在资源利用、可靠性、可预测性、任务调度和中断
    发表于 11-13 06:30

    FreeRTOS任务调度及优先级问题

    大家好,最近本人在学习FreeRTOS ,之前有过一些裸机开发的经验,目前知道了FreeRTOS的任务是基于时间片轮转来调度,也就是知道了任务会基于各个时间片来运行。 于是联想了如果有一些外设芯片
    发表于 11-06 02:18

    深入解析米尔全志T536核心板的实时性技术突破

    复杂度增加,需要同时处理内核补丁和隔离策略,调试工作量较大。2.5 AMP:异构多核的优雅解决方案架构优势:充分利用SoC的异构架构,使用ARM Cortex-A其中一个核运行rtos系统专攻实时任务
    发表于 10-17 17:41

    爱普科技PSRAM加速wisun无线模块多任务处理

    爱普科技256Mb PSRAM(如APS256XXN-OBR-BG)为WiSUN无线模块提供高速数据缓存与临时存储解决方案,其166MHz速率、1.8V低功耗及小尺寸封装显著提升模块在智能电网、工业自动化中的多任务处理能力和稳定性。
    的头像 发表于 10-14 09:25 213次阅读
    爱普科技PSRAM加速wisun无线模块<b class='flag-5'>多任务</b>处理

    揭秘LuatOS Task:多任务管理的“智能中枢”

    Task任务作为LuatOS的核心组成部分,通过智能化的任务管理机制,实现任务的创建、调度与协同运行,让复杂应用得以高效并行处理,满足实时
    的头像 发表于 08-28 13:48 392次阅读
    揭秘LuatOS Task:<b class='flag-5'>多任务</b>管理的“智能中枢”

    一文读懂:嵌入式Linux实时性进阶

    能够在限定的时间内对外部时间做出相应的特性。 Linux可以通过任务调度与相应时间,中断延迟与抢占延迟,内核可抢占性与实时补丁,实时调度策略,硬件支持来提高其
    发表于 07-10 15:26

    快速入门——LuatOS:sys库多任务管理实战攻略!

    的开发者,这里将用最简明的步骤,助你轻松实现多任务应用开发! sys库是LuatOS的核心系统调度库,它基于Lua协程机制实现了实时多任务调度
    的头像 发表于 05-29 14:36 593次阅读
    快速入门——LuatOS:sys库<b class='flag-5'>多任务</b>管理实战攻略!

    工控一体机多线程任务调度优化:聚徽分享破解工业复杂流程高效协同密码

    在当今工业 4.0 的浪潮下,工业生产正朝着高度自动化、智能化的方向大步迈进。生产流程日益复杂,众多任务需要同时、高效地协同执行,这对工业控制系统的核心 —— 工控一体机提出了前所未有的挑战。多线程
    的头像 发表于 05-28 14:06 478次阅读

    鸿道Intewell操作系统实时虚拟化技术的优势

    实时性、安全性与多任务协同已成为工业控制系统的核心挑战。鸿道Intewell操作系统凭借其创新的实时虚拟化技术,打破了传统工业软件架构的局限,为智能制造、轨道交通、能源电力、机器人和航天航空等领域提供了颠覆性的
    的头像 发表于 05-15 15:13 364次阅读
    鸿道Intewell操作系统<b class='flag-5'>实时</b>虚拟化技术的优势

    XMOS直播声卡——可支持实时音频DSP处理的低延迟音频方案

    XMOS所提供的具有DSP处理功能的直播声卡解决方案凭借卓越的音质和超低延迟,非常适合用于诸如直播、播客广播、唱播(K歌)和游戏等实时应用。
    的头像 发表于 04-21 15:47 844次阅读
    XMOS直播声卡——可支持<b class='flag-5'>实时</b>音频<b class='flag-5'>DSP</b>处理的低延迟音频<b class='flag-5'>方案</b>

    智能控制,高效节能!ZLG致远电子能源智慧管理解决方案

    面对楼宇及建筑群能源管理与设备控制的复杂需求,ZLG致远电子推出了一套能源智慧管理解决方案。该方案集设备管理、任务调度和数据可视化于一体,不仅实现数据的
    的头像 发表于 02-10 16:43 1080次阅读
    智能控制,高效节能!ZLG致远电子能源智慧管理<b class='flag-5'>解决方案</b>