当前位置:首页 > 电源 > 数字电源
[导读]本文实现了uC/OS-II在TMS320C54X上的移植,并设计了基于uC/OS-II的低速率语音编码器。

摘要:uC/OS-II是一种免费且源代码公开的实时内核,经过多年的实际应用,显示出强大的功能和巨大的商业价值。本文实现了uC/OS-II在TMS320C54X上的移植,并设计了基于uC/OS-II的低速率语音编码器
关键字: uC/OS-II; TMS320C54X;低速率语音编码

引言
随着数字信号处理技术的发展,越来越多的数字信号处理芯片应用于各行各业。但是,以往多数的DSP 系统是基于流程图的设计方法,该方法设计的程序稳定性不高,流程中任意一个环节出错都将导致系统崩溃甚至死机。使用RTOS将对系统的稳定性有很大的改善。使应用模块化,可极大提高程序的可读性、可扩展性和可移植性。
TI公司的定点DSP处理芯片TMS320C54X是目前应用比较广泛的一种DSP芯片,具有功耗低、运行速度快等优点,适合低速率语音编码的应用。
uC/OS-II是一种免费应且源代码公开的实时内核,经过多年的实际应用,显示出强大的功能和巨大的商业价值。本文实现了uC/OS-II在TMS320C54X上的移植,并提出了在uC/OS-II的平台上的低速率语音编码器的系统设计方案。

图1 系统结构图

图2 任务状态转移图

uC/OS-II在TMS320C54X上的移植
要实现uC/OS-II的移植,主要改写以下三个文件
OS_CPU.H文件
包括定义数据类型、代码值界区的中断控制、堆栈增长方向变量、任务切换函数定义和变量声明。TMS320C54X中的堆栈数据类型为16位,定义为:
typedef unsigned int OS_STK
在TMS320C54X中所有的堆栈都必须用OS_STK声明。
RTOS在进入系统临界区之前必须关闭中断,退出临界区后再打开中断。uC/OS-II定义了两个宏来关闭/打开中断:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()。
用OS_STK_GROWTH来设置,OS_STK_GROWTH为0表示堆栈从低地址向高地址递增;OS_STK_GROWTH为1表示堆栈从高向低地址递减,TMS320C54X中,堆栈地址是由高向低递减的。
在uC/OS-II中,OS_TASK_SW()用来实现任务切换。OS_TASK_SW()函数模拟一次中断过程,在中断返回时进行任务切换。
另外,还声明了一个8位变量,用来调用DOS的时钟节拍函数,在TMS320C54X中应该屏蔽掉。
OS_CPU_A.ASM文件
在此文件中,需改写函数:OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()。
OSStartHighRdy (0)函数由Sstart()函数调用,功能是运行优先级最高的就绪任务。其过程为:获得优先级最高任务的TCB地址→设置堆栈指针→恢复任务环境→中断返回→运行新任务。在TMS320C54X中实现如程序列表1,其中,CONTEXT_RESTORE是将C54X中的寄存器出栈的宏定义,在此不再详述。
OSCtxSw()函数是一个任务级的任务切换函数。软中断向量指向此函数。在uC/OS-II中,如果任务调用了某个函数,而该函数的执行结果可能造成系统任务的重新调度,则在函数的末尾会调用OSSched()。OSSched()查找当前就绪最高优先级任务,如果不是当前任务,则找到该任务TCB的地址,并拷贝到变量OSTCBHighRdy中,然后通过宏OS_TASK_SW()执行软中断调用OSCtxSw()进行任务切换。变量 OSTCBCur始终包含指向当前运行任务TCB的指针。在TMS320C54X中实现如程序列表2。
OSIntCtxSw()函数与 OSCtxSw()函数类似,不同的是,OSIntCtxSw()函数进行中断级任务切换。中断可能引起任务切换,在中断服务程序的最后会调用 OSIntExit()函数检查任务就绪状态,如果需要进行任务切换,则调用OSIntCtxSw()。值得注意的是,产生中断后,CPU寄存器会自动被保存,所以,在此函数中不再进行环境保存。在TMS320C54X中实现如程序列表3。
OS_CPU_C.C文件
在此文件中,只需修改 OSTaskStkInit()函数。OSTaskStkInit()由任务创建函数OSTaskCreate()或OSTaskCreateExt() 调用,用来初始化任务的堆栈。OSTaskStkInit()与调用它的函数有三个参数进行传递:任务代码起始地址(task),参数指针 (pdata),任务堆栈顶地址(ptos)。为提高代码效率,此函数用汇编语言改写,在TMS320C54X中实现如程序列表4。(程序列表1~4,均见本刊网站 http://www.eaw.com.cn)

基于uC/OS-II的低速率语音编码器系统设计
本系统中,低速率语音编码器的功能有语音编码、语音解码、回波抵消、模拟接口、数字接口等。另外,为提高系统的稳定性,增加了空闲任务和监视任务。系统结构如图1所示。
系统由里向外分为三层:操作系统层、任务层、硬件层。

硬件层设计
硬件层设计主要包括串口和HPI口,用于接收(发送)语音信号和信道上的数据。

任务层设计
本系统中共有七个任务,其优先级从高到低依次为:监控任务、模拟接口任务、数字接口任务、回波抵消任务、编码任务、解码任务、Idle任务。各任务的状态有4种,即等待态和挂起态、就绪态、运行态以及中断态,状态的转换关系如图2所示。
监视任务设计思路为:被监视任务正常运行时其执行时间是可预估的,被监视任务在其即将运行完毕时向监视任务发送消息说明自身运行正常。被监视任务运行时,监视任务处于等待态,等待被监视任务给它发送消息,等待时间被设定为预计的任务正常运行所需的最大时间。若等待时间内监视任务收到消息,则认为发送消息的任务运行正常,依照各任务执行顺序的先后下一任务开始运行,监视任务等待下一任务发送的消息。若等待时间已过,监视任务仍未收到消息,则系统的时间管理函数将强行把监视任务视为就绪态。因监视任务的优先权是最高的,它将抢占对CPU的控制权并采取相应的纠错方案。

操作系统层设计
在应用中,各个任务之间都有数据要交换,本设计中采用消息机制实现任务间通信。编码任务需要模拟接口任务发送的消息,以接收用于编码的语音数据;数字接口任务需要编码任务发送的消息,以接收用于发往信道的编码数据;解码任务需要数字接口任务发来的消息,以接收来自信道的用于解码的解码字;模拟接口任务需要解码任务发来的消息,以接收用于D/A转换的数字语音信号。回波抵消任务需要等待的消息来自模拟接口任务和解码任务。监控任务接收所有其任务发来的消息,确认系统是否正常运行。
在运行过程中,操作系统对各任务进行调度。其动作为:
系统启动时,建立所有的任务,除回波抵消任务外,都处于就绪态;
此时,监控任务优先级最高,查询消息队列,没有消息的到来,转为等待态;
模拟接口任务运行,接收/发送数据,发数据给回波抵消任务,并使回波抵消任务处于就绪态;如条件达到(如帧数已够),向编码任务发消息,传送数据,运行完毕,自行进入挂起态,等待下一次串口中断将其转为就绪态;
数字接口任务运行,接收/发送数据,如条件达到(如编码字数够),向解码任务发消息,传送数据,运行完毕,自行进入挂起态,等待下一次串口中断(或HPI中断)将其转为就绪态;
如消息足够,回波抵消任务运行,运行完毕,自行处于挂起态;
编码任务运行,如有模拟接口任务发来的消息,则运行,编码完毕,向数字接口发消息;否则,处于等待态;
解码任务运行,如有数字接口任务发来的消息,则运行,解码完毕,向模拟接口任务和回波抵消任务发消息;否则,处于等待态;
在所有任务都执行完毕后,Idle任务运行。
由于所有的任务都有严格的执行时间限制,因此,上述的任务流程在正常情况下可以顺利进行。否则,监控任务会重启系统。

结语
本文在TMS320C54X的硬件平台上实现uC/OS-II,并针对传统的系统设计方法设计的低速率语音编码器稳定性不佳的问题,提出了基于uC/OS-II的低速率语音编码器系统设计的方案。由于低速率语音编码器通常是单片的,内部任务相对较少。使用实时内核来管理这些任务,会增加系统的内存和CPU时间的消耗,而任务调度的优势不能很好地显示出来,该设计有一定局限性。但是,在系统的内存足够大、CPU运行速度足够快的情况下,使用实时内核设计低速率语音编码器,有利于系统的后继开发。

参考文献
1 Jean J.Labrosse. uC/OS-II-源码公开的实时嵌入式操作系统[M],邵贝贝 译. 中国电力出版社,2001
2 张雄伟.DSP芯片的原理与开发应用[M]. 电子工业出版社,2000

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

大家好,我是鲏。认识我的朋友都知道,我是一个实践派,相比研究枯燥的理论知识,我更喜欢做自己想做的项目,用技术来实现自己的想法的感觉真的很棒。所以从大学期间一直到现在,除了工作中的项目外,我依然保持着自己做项目的习惯,有坚...

关键字: 系统设计 技术选型 需求分析

通过本文,你将了解到什么是绝对值编码器、绝对值编码器的工作原理以及单圈/多圈绝对值编码器的区别。

关键字: 绝对值编码器 指数 编码器

在上篇文章中,小编对增量式编码器有所阐述。为增进大家对编码器的认识,本文将对绝对式编码器予以介绍。

关键字: 绝对式编码器 指数 编码器

为增进大家对编码器的认识,本文将对增量式编码器、增量式编码器分类以及增量式编码器的工作原理予以介绍。

关键字: 增量式编码器 指数 编码器

(全球TMT2022年8月30日讯)近日,在2022英特尔中国数据中心合作伙伴技术峰会上,英特尔与浪潮信息等产业生态伙伴联合发布了《绿色数据中心创新实践 -- 冷板液冷系统设计参考》白皮书,分享冷板液冷技术关键部件的最...

关键字: 系统设计 英特尔 数据中心 生态系统

北京2022年8月30日 /美通社/ -- 近日,在2022英特尔中国数据中心合作伙伴技术峰会上,英特尔与浪潮信息等产业生态伙伴联合发布了《绿色数据中心创新实践 -- 冷板液冷系统设计参考》白皮书,分享冷板液冷技术关键部...

关键字: 系统设计 英特尔 数据中心 电量

摘要:近年来,受人类活动的影响,各大水域的水质污染问题越来越严重,大部分水资源受到严重污染,水质处理问题亟需解决。分析水体污染情况对改进水质有着重要意义,目前水质监测主要采用人工或无人船的方式。人工监测方式工作量大,影响...

关键字: 水质监测 无人机 系统设计

摘要:根据饶平县高堂水闸重建工程建设实际需求,对高堂水闸运行管理进行实时在线式监控与监测,通过闸门控制、视频监控、水情测报、安全监测和网络通信等系统的设计,为高堂水闸的水工建筑物安全、防洪调度和自动化管理提供技术支持,以...

关键字: 管理信息系统 水利工程 系统设计

湖州2022年7月26日 /美通社/ -- 近日,浙江省科技创新大会在浙江省人民大会堂隆重举行。大会正式颁布2021年度浙江省科学技术进步奖,隆重表彰为浙江科技创新事业和经济社会发展做出突出贡献的科技工作者及团队。...

关键字: 电梯 检测技术 系统设计 零部件

摘要:简要介绍了柴油发电机组和重油发电机组的构成和主要特点,以某发电厂重柴油发电机组系统设计为例,重点分析了重油发电机组燃油系统、润滑油系统、循环冷却水系统、压缩空气系统的设计要点,以提高柴油、重油发电机组的运行效率和运...

关键字: 重油发电机组 特性 系统设计

数字电源

15504 篇文章

关注

发布文章

编辑精选

技术子站

关闭