用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心解决方案电子通信

基于μC/OS-Ⅱ的变频器变结构控制系统设计

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 23:57:26
UTEX实现这个功能。得到T_MUTEX信号的任务将独自占有共享资源的使用权,两个任务不会因资源冲突而同时挂起,解决了任务间优先级反转问题,避免了系统功能失效。任务间逻辑关系如图2所示。

操作系统为任务间通信提供了多种途径,但最简单有效的方法是共享全局变量。本文使用共享全局变量的方法实现了显示任务与键盘中断服务之间的通信,代码如下:

键盘中断:

static void KeyboardISR(void)

{

UWoMl6 cpu_sr;

OS_ENTER_CRITICAL();//临界区代码保护

asm{

move X:$0FB7,A1 //读键盘中断状态表

move A1,state1 //将中断状态放入全局变量

};

OS_EXIT_CRITICAL(); //临界区代码保护结束

这里statel是全局变量,键盘中断的工作仅仅是将PORTA口中断状态寄存器(IESR,地址$0FB8) 读入statel中。为防止其他任务在此期间对statel的修改,使用了临界区代码保护。

显示任务的部分代码:

switch(statel)

{case 1: //PTA_0对应的键被按下

…… //相应的服务程序,略

case 128: //PTA_7对应的键被按下

break;}

asm{move$00,X:$OFB8}; //清键盘中断状态,以备下次中断

显示任务中采用多分支结构,javascript:window.open(this.src);" style="cursor:pointer;"/>根据statel=2n,(n=0,1,2,3,,4,5,6,7),不同的值代表不同的键被按下,程序进行相应的处理;最后将IESR寄存器清零。用同样的方法,两位之间互相组合可扩展形成16个按键。这样只用一个全局变量就完成了中断与任务间的通信,程序用内嵌汇编的C来写,简捷高效。

2 系统设计中需注意的问题

首先是存储器分配问题。多任务、邮箱等功能的使用会增加RAM的额外开销,在不扩展外部RAM的情况下,可用的只有片内2KB数据RAM和512字的程序RAM,资源相对有限,存储空间的合理分配就显得很重要。任务堆栈所占用的RAM空间要根据实际应用来确定,必须考虑任务调用的嵌套情况、任务中函数为局部变量所分配的内存数目。另外,它必须能保存DSR的所有22个寄存器和16个存储器字。如果为任务分配的存储空间富余过多则造成资源紧张,甚至会因内存溢出导致系统崩溃。解决方法是调用系统函数OSTaskStkChk(),它可以检测每个任务运行时使用的内存大小,为合理分配内存空间提供了依据。另外,可采用一些简化方法节省RAM空间。例如SDK为AD采集的每个通道都定义一个结构体,它包括三个元素:句柄、数值长度和采样值;如果使用五路AD采集,就得定义五个结构体。通常不进行初始化,DSP内核在运行时将它们放入RAM空间,占用RAM较多。通常关心的只是采样值一个元素,其他两个只完成辅助功能。如果使用一个存放采样值的变量代替这个结构体,或直接采用汇编语言写这段代码,就可大幅度地节省RAM空间。本文的AD采集程序就是用汇编完成。

SDK没有提供在DSP56F803下使用SPI函数的例程。仿照在807中的成功应用,笔者调用spiWfite()函数,通过SPI驱动D/A转换芯片。但在编译连接时出现系统错误,数据类型unsigned short与const void不匹配,在const.c中将spiWrite做强制类型转换(void*)(&spiWrite),解决了这一问题。

利用SDK与μC/OS-Ⅱ相配合,充分发挥了DSP型控制器DSP56F803的功能,采用内嵌汇编的C语言编程,大大提高了代码的可读性和可移植性,络短了系统开发周期,成功实现了系统的变结构控制功能,也体现了操作系统的多任务功能在实现多算法结构上的优越性。



上一页  [1] [2] 

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:12,187.50000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号